Skip to content

Commit dab453b

Browse files
authored
TimeSeries Desc Sort gets skipped with Lucene 10 upgrade (#17329)
Ensuring time series desc sort optimisation invokes searchLeaf on CtxIdxSearcher --------- Signed-off-by: expani <[email protected]>
1 parent 89a6f4e commit dab453b

File tree

1 file changed

+11
-2
lines changed

1 file changed

+11
-2
lines changed

server/src/main/java/org/opensearch/search/internal/ContextIndexSearcher.java

+11-2
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
import org.apache.lucene.search.Collector;
4545
import org.apache.lucene.search.CollectorManager;
4646
import org.apache.lucene.search.ConjunctionUtils;
47+
import org.apache.lucene.search.ConstantScoreQuery;
4748
import org.apache.lucene.search.DocIdSetIterator;
4849
import org.apache.lucene.search.Explanation;
4950
import org.apache.lucene.search.IndexSearcher;
@@ -257,8 +258,15 @@ public void search(
257258

258259
@Override
259260
public void search(Query query, Collector collector) throws IOException {
260-
super.search(query, collector);
261-
searchContext.bucketCollectorProcessor().processPostCollection(collector);
261+
// TODO : Remove when switching to use the @org.apache.lucene.search.IndexSearcher#search(Query, CollectorManager) variant from
262+
// @org.opensearch.search.query.QueryPhase#searchWithCollector which then calls the overridden
263+
// search(LeafReaderContextPartition[] partitions, Weight weight, Collector collector)
264+
query = collector.scoreMode().needsScores() ? rewrite(query) : rewrite(new ConstantScoreQuery(query));
265+
Weight weight = createWeight(query, collector.scoreMode(), 1);
266+
LeafReaderContextPartition[] partitions = (getLeafContexts() == null)
267+
? new LeafReaderContextPartition[0]
268+
: getLeafContexts().stream().map(LeafReaderContextPartition::createForEntireSegment).toArray(LeafReaderContextPartition[]::new);
269+
search(partitions, weight, collector);
262270
}
263271

264272
public void search(
@@ -297,6 +305,7 @@ protected void search(LeafReaderContextPartition[] partitions, Weight weight, Co
297305
searchLeaf(partition.ctx, partition.minDocId, partition.maxDocId, weight, collector);
298306
}
299307
}
308+
// TODO : Make this a responsibility for the callers rather than implicitly getting it done here ?
300309
searchContext.bucketCollectorProcessor().processPostCollection(collector);
301310
} catch (Throwable t) {
302311
searchContext.indexShard().getSearchOperationListener().onFailedSliceExecution(searchContext);

0 commit comments

Comments
 (0)