CavalliumDBEngine/src/main/java/it/cavallium/dbengine/lucene/searcher/TopDocsSearcher.java

51 lines
2.0 KiB
Java
Raw Normal View History

2021-04-01 19:48:25 +02:00
package it.cavallium.dbengine.lucene.searcher;
import java.io.IOException;
2021-07-17 23:06:26 +02:00
import org.apache.lucene.index.LeafReaderContext;
import org.apache.lucene.index.NumericDocValues;
import org.apache.lucene.misc.search.DiversifiedTopDocsCollector;
import org.apache.lucene.search.BulkScorer;
2021-07-05 15:43:19 +02:00
import org.apache.lucene.search.Collector;
2021-04-01 19:48:25 +02:00
import org.apache.lucene.search.FieldDoc;
2021-07-17 23:06:26 +02:00
import org.apache.lucene.search.HitQueue;
2021-04-01 19:48:25 +02:00
import org.apache.lucene.search.IndexSearcher;
2021-07-17 23:06:26 +02:00
import org.apache.lucene.search.LeafCollector;
2021-07-05 15:43:19 +02:00
import org.apache.lucene.search.MultiCollectorManager.Collectors;
2021-04-01 19:48:25 +02:00
import org.apache.lucene.search.Query;
2021-07-17 23:06:26 +02:00
import org.apache.lucene.search.Scorable;
2021-07-05 15:43:19 +02:00
import org.apache.lucene.search.ScoreDoc;
2021-07-17 23:06:26 +02:00
import org.apache.lucene.search.ScoreMode;
2021-04-01 19:48:25 +02:00
import org.apache.lucene.search.Sort;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.search.TopDocsCollector;
import org.apache.lucene.search.TopFieldCollector;
import org.apache.lucene.search.TopScoreDocCollector;
2021-07-17 23:06:26 +02:00
import org.apache.lucene.search.TotalHits.Relation;
2021-04-01 19:48:25 +02:00
class TopDocsSearcher {
2021-07-08 18:54:53 +02:00
@SuppressWarnings({"unchecked", "rawtypes"})
public static TopDocsCollector<ScoreDoc> getTopDocsCollector(Sort luceneSort,
2021-07-05 15:43:19 +02:00
int limit,
ScoreDoc after,
int totalHitsThreshold) {
2021-07-08 18:54:53 +02:00
TopDocsCollector<ScoreDoc> collector;
2021-07-05 15:43:19 +02:00
if (luceneSort == null) {
if (after == null) {
collector = TopScoreDocCollector.create(limit, totalHitsThreshold);
} else {
collector = TopScoreDocCollector.create(limit, after, totalHitsThreshold);
}
} else {
if (after == null) {
2021-07-08 18:54:53 +02:00
collector = (TopDocsCollector<ScoreDoc>) (TopDocsCollector) TopFieldCollector.create(luceneSort, limit, totalHitsThreshold);
2021-07-05 15:43:19 +02:00
} else if (after instanceof FieldDoc afterFieldDoc) {
2021-07-08 18:54:53 +02:00
collector = (TopDocsCollector<ScoreDoc>) (TopDocsCollector) TopFieldCollector.create(luceneSort, limit, afterFieldDoc, totalHitsThreshold);
2021-07-05 15:43:19 +02:00
} else {
throw new UnsupportedOperationException("GetTopDocs with \"luceneSort\" != null requires \"after\" to be a FieldDoc");
}
}
return collector;
}
2021-04-01 19:48:25 +02:00
}