You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@solr.apache.org by kr...@apache.org on 2024/01/24 19:12:05 UTC
(solr) 01/01: optimize-rows-zero
This is an automated email from the ASF dual-hosted git repository.
krisden pushed a commit to branch optimize-rows-zero
in repository https://gitbox.apache.org/repos/asf/solr.git
commit 841defcaf8ebf57ddc74340b23d1fd06cab5ac79
Author: Kevin Risden <kr...@apache.org>
AuthorDate: Wed Jan 24 13:52:24 2024 -0500
optimize-rows-zero
---
.../org/apache/solr/search/SolrIndexSearcher.java | 15 +++++++++++-
.../apache/solr/search/TestMainQueryCaching.java | 27 ++--------------------
2 files changed, 16 insertions(+), 26 deletions(-)
diff --git a/solr/core/src/java/org/apache/solr/search/SolrIndexSearcher.java b/solr/core/src/java/org/apache/solr/search/SolrIndexSearcher.java
index 9c3a2fbc2f3..01ea3d4d3c5 100644
--- a/solr/core/src/java/org/apache/solr/search/SolrIndexSearcher.java
+++ b/solr/core/src/java/org/apache/solr/search/SolrIndexSearcher.java
@@ -1617,9 +1617,16 @@ public class SolrIndexSearcher extends IndexSearcher implements Closeable, SolrI
// check if we should try and use the filter cache
final boolean needSort;
final boolean useFilterCache;
+ final boolean useFilterCacheForQuery;
if ((flags & (GET_SCORES | NO_CHECK_FILTERCACHE)) != 0 || filterCache == null) {
needSort = true; // this value should be irrelevant when `useFilterCache=false`
useFilterCache = false;
+ useFilterCacheForQuery = useFilterCache;
+ } else if (cmd.getLen() == 0) {
+ // No rows are being returned so no need to sort and can use the filterCache
+ needSort = false;
+ useFilterCache = true;
+ useFilterCacheForQuery = false;
} else if (q instanceof MatchAllDocsQuery
|| (useFilterForSortedQuery && QueryUtils.isConstantScoreQuery(q))) {
// special-case MatchAllDocsQuery: implicit default useFilterForSortedQuery=true;
@@ -1643,10 +1650,12 @@ public class SolrIndexSearcher extends IndexSearcher implements Closeable, SolrI
useFilterCache =
Arrays.stream(sort.getSort()).noneMatch((sf) -> sf.getType() == SortField.Type.SCORE);
}
+ useFilterCacheForQuery = useFilterCache;
} else {
// for non-constant-score queries, must sort unless no docs requested
needSort = cmd.getLen() > 0;
useFilterCache = useFilterCacheForDynamicScoreQuery(needSort, cmd);
+ useFilterCacheForQuery = useFilterCache;
}
if (useFilterCache) {
@@ -1654,7 +1663,11 @@ public class SolrIndexSearcher extends IndexSearcher implements Closeable, SolrI
// for large filters that match few documents, this may be
// slower than simply re-executing the query.
if (out.docSet == null) {
- out.docSet = getDocSet(cmd.getQuery());
+ if (useFilterCacheForQuery) {
+ out.docSet = getDocSet(cmd.getQuery());
+ } else {
+ out.docSet = getDocSetNC(QueryUtils.getAbs(cmd.getQuery()), null);
+ }
List<Query> filterList = cmd.getFilterList();
if (filterList != null && !filterList.isEmpty()) {
out.docSet = DocSetUtil.getDocSet(out.docSet.intersection(getDocSet(filterList)), this);
diff --git a/solr/core/src/test/org/apache/solr/search/TestMainQueryCaching.java b/solr/core/src/test/org/apache/solr/search/TestMainQueryCaching.java
index 8a298be2cb1..184eade8b3e 100644
--- a/solr/core/src/test/org/apache/solr/search/TestMainQueryCaching.java
+++ b/solr/core/src/test/org/apache/solr/search/TestMainQueryCaching.java
@@ -184,13 +184,7 @@ public class TestMainQueryCaching extends SolrTestCaseJ4 {
"0",
"sort",
(random().nextBoolean() ? "id asc" : "score desc")));
- final int insertAndSkipCount = USE_FILTER_FOR_SORTED_QUERY ? 1 : 0;
- assertMetricCounts(
- response,
- false,
- insertAndSkipCount,
- USE_FILTER_FOR_SORTED_QUERY ? 0 : 1,
- insertAndSkipCount);
+ assertMetricCounts(response, false, 0, 0, 1);
}
@Test
@@ -363,24 +357,7 @@ public class TestMainQueryCaching extends SolrTestCaseJ4 {
"0",
"sort",
random().nextBoolean() ? "id asc" : "score desc,id asc"));
- final boolean consultMatchAllDocs;
- final boolean insertFilterCache;
- final boolean skipSort;
- if (MATCH_ALL_DOCS_QUERY.equals(q)) {
- consultMatchAllDocs = true;
- insertFilterCache = false;
- skipSort = true;
- } else {
- consultMatchAllDocs = false;
- insertFilterCache = USE_FILTER_FOR_SORTED_QUERY;
- skipSort = USE_FILTER_FOR_SORTED_QUERY;
- }
- assertMetricCounts(
- response,
- consultMatchAllDocs,
- insertFilterCache ? 1 : 0,
- skipSort ? 0 : 1,
- skipSort ? 1 : 0);
+ assertMetricCounts(response, MATCH_ALL_DOCS_QUERY.equals(q), 0, 0, 1);
}
private static void assertMetricCounts(