Skip to content

Commit 55cb434

Browse files
committed
lucene 9.10.0
1 parent a146392 commit 55cb434

File tree

4 files changed

+36
-13
lines changed

4 files changed

+36
-13
lines changed

opengrok-indexer/src/main/java/org/opengrok/indexer/search/SearchEngine.java

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@
4848
import org.apache.lucene.search.IndexSearcher;
4949
import org.apache.lucene.search.Query;
5050
import org.apache.lucene.search.ScoreDoc;
51-
import org.apache.lucene.search.TopScoreDocCollector;
51+
import org.apache.lucene.search.TopScoreDocCollectorManager;
5252
import org.apache.lucene.util.Version;
5353
import org.opengrok.indexer.analysis.AbstractAnalyzer;
5454
import org.opengrok.indexer.analysis.CompatibleAnalyser;
@@ -132,7 +132,7 @@ public class SearchEngine {
132132
int cachePages = RuntimeEnvironment.getInstance().getCachePages();
133133
int totalHits = 0;
134134
private ScoreDoc[] hits;
135-
private TopScoreDocCollector collector;
135+
private TopScoreDocCollectorManager collectorManager;
136136
private IndexSearcher searcher;
137137
boolean allCollected;
138138
private final ArrayList<SuperIndexSearcher> searcherList = new ArrayList<>();
@@ -205,18 +205,17 @@ private void searchMultiDatabase(List<Project> projectList, boolean paging) thro
205205
}
206206

207207
private void searchIndex(IndexSearcher searcher, boolean paging) throws IOException {
208-
collector = TopScoreDocCollector.create(hitsPerPage * cachePages, Short.MAX_VALUE);
208+
collectorManager = new TopScoreDocCollectorManager(hitsPerPage * cachePages, Short.MAX_VALUE);
209209
Statistics stat = new Statistics();
210-
searcher.search(query, collector);
211-
totalHits = collector.getTotalHits();
210+
hits = searcher.search(query, collectorManager).scoreDocs;
211+
totalHits = searcher.count(query);
212212
stat.report(LOGGER, Level.FINEST, "search via SearchEngine done",
213213
"search.latency", new String[]{"category", "engine",
214214
"outcome", totalHits > 0 ? "success" : "empty"});
215215
if (!paging && totalHits > 0) {
216-
collector = TopScoreDocCollector.create(totalHits, Short.MAX_VALUE);
217-
searcher.search(query, collector);
216+
collectorManager = new TopScoreDocCollectorManager(totalHits, Short.MAX_VALUE);
217+
hits = searcher.search(query, collectorManager).scoreDocs;
218218
}
219-
hits = collector.topDocs().scoreDocs;
220219
StoredFields storedFields = searcher.storedFields();
221220
for (ScoreDoc hit : hits) {
222221
int docId = hit.doc;
@@ -412,14 +411,13 @@ public void results(int start, int end, List<Hit> ret) {
412411
// TODO check if below fits for if end=old hits.length, or it should include it
413412
if (end > hits.length && !allCollected) {
414413
//do the requery, we want more than 5 pages
415-
collector = TopScoreDocCollector.create(totalHits, Short.MAX_VALUE);
414+
collectorManager = new TopScoreDocCollectorManager(totalHits, Short.MAX_VALUE);
416415
try {
417-
searcher.search(query, collector);
416+
hits = searcher.search(query, collectorManager).scoreDocs;
418417
} catch (Exception e) { // this exception should never be hit, since search() will hit this before
419418
LOGGER.log(
420419
Level.WARNING, SEARCH_EXCEPTION_MSG, e);
421420
}
422-
hits = collector.topDocs().scoreDocs;
423421
StoredFields storedFields = null;
424422
try {
425423
storedFields = searcher.storedFields();

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ Portions Copyright (c) 2018, 2020, Chris Fraire <cfraire@me.com>.
6060
</scm>
6161

6262
<properties>
63-
<lucene.version>9.9.2</lucene.version>
63+
<lucene.version>9.10.0</lucene.version>
6464
<mavenjavadocplugin.version>3.6.0</mavenjavadocplugin.version>
6565
<java.version>11</java.version>
6666
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

suggester/src/main/java/org/opengrok/suggest/SuggestResultCollector.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import org.apache.lucene.index.StoredFields;
2828
import org.apache.lucene.search.CollectionTerminatedException;
2929
import org.apache.lucene.search.Collector;
30+
import org.apache.lucene.search.CollectorManager;
3031
import org.apache.lucene.search.IndexSearcher;
3132
import org.apache.lucene.search.LeafCollector;
3233
import org.apache.lucene.search.Scorable;
@@ -35,6 +36,7 @@
3536
import org.opengrok.suggest.query.data.BitIntsHolder;
3637

3738
import java.io.IOException;
39+
import java.util.Collection;
3840

3941
/**
4042
* Collects Suggester query results.
@@ -62,6 +64,29 @@ public LeafCollector getLeafCollector(LeafReaderContext context) throws IOExcept
6264
return new SuggesterLeafCollector(context);
6365
}
6466

67+
/**
68+
* Creates a {@link CollectorManager} that can concurrently collect matching docs in a {@link
69+
* BitIntsHolder}.
70+
*/
71+
public static CollectorManager<SuggestResultCollector, BitIntsHolder> createManager(LeafReaderContext leafReaderContext, ComplexQueryData data,
72+
BitIntsHolder documentIds) {
73+
return new CollectorManager<>() {
74+
@Override
75+
public SuggestResultCollector newCollector() {
76+
return new SuggestResultCollector(leafReaderContext, data, documentIds);
77+
}
78+
79+
@Override
80+
public BitIntsHolder reduce(Collection<SuggestResultCollector> collectors) {
81+
BitIntsHolder reduced = documentIds;
82+
for (SuggestResultCollector collector : collectors) {
83+
documentIds.or(collector.documentIds); //TODO fix as per https://github.com/apache/lucene/pull/766/files
84+
}
85+
return reduced;
86+
}
87+
};
88+
}
89+
6590
/**
6691
* Indicates what features are required from the scorer.
6792
*/

suggester/src/main/java/org/opengrok/suggest/SuggesterSearcher.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -238,7 +238,7 @@ private ComplexQueryData getComplexQueryData(final Query query, final LeafReader
238238

239239
BitIntsHolder documentIds = new BitIntsHolder();
240240
try {
241-
search(query, new SuggestResultCollector(leafReaderContext, data, documentIds));
241+
search(query, SuggestResultCollector.createManager(leafReaderContext, data, documentIds));
242242
} catch (IOException e) {
243243
if (Thread.currentThread().isInterrupted()) {
244244
interrupted = true;

0 commit comments

Comments
 (0)