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

55 lines
1.3 KiB
Java
Raw Normal View History

2021-12-23 02:13:51 +01:00
package it.cavallium.dbengine.lucene.searcher;
import java.util.Iterator;
import java.util.List;
import java.util.function.Supplier;
import java.util.stream.IntStream;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.ScoreDoc;
public class LuceneMultiGenerator implements Supplier<ScoreDoc> {
private final Iterator<Supplier<ScoreDoc>> generators;
private Supplier<ScoreDoc> luceneGenerator;
2022-02-11 21:46:05 +01:00
public LuceneMultiGenerator(List<IndexSearcher> shards, LocalQueryParams localQueryParams) {
2021-12-23 02:13:51 +01:00
this.generators = IntStream
.range(0, shards.size())
.mapToObj(shardIndex -> {
IndexSearcher shard = shards.get(shardIndex);
2022-02-11 13:32:50 +01:00
return (Supplier<ScoreDoc>) new LuceneGenerator(shard,
localQueryParams,
2022-02-11 21:46:05 +01:00
shardIndex
2022-02-11 13:32:50 +01:00
);
2021-12-23 02:13:51 +01:00
})
.iterator();
tryAdvanceGenerator();
}
private void tryAdvanceGenerator() {
if (generators.hasNext()) {
luceneGenerator = generators.next();
} else {
luceneGenerator = null;
}
}
@Override
public ScoreDoc get() {
if (luceneGenerator == null) {
return null;
}
ScoreDoc item;
do {
item = luceneGenerator.get();
if (item == null) {
tryAdvanceGenerator();
if (luceneGenerator == null) {
return null;
}
}
} while (item == null);
return item;
}
}