Simplified query builders, preparation for a-tag inclusion.
This commit is contained in:
parent
9a4183a481
commit
3ccb1c6218
@ -57,18 +57,15 @@ public class SearchIndexReader implements AutoCloseable {
|
|||||||
queryBuilders = new EnumMap<>(IndexBlock.class);
|
queryBuilders = new EnumMap<>(IndexBlock.class);
|
||||||
underspecifiedQueryBuilders = new EnumMap<>(IndexBlock.class);
|
underspecifiedQueryBuilders = new EnumMap<>(IndexBlock.class);
|
||||||
|
|
||||||
queryBuilders.put(IndexBlock.Words, new IndexQueryBuilder(listOfNonNulls(metaIndex, titleKeywordsIndex, topicIndex, titleIndex, topIndex, midIndex, lowIndex, namesIndex, wordsIndex), wordsIndex));
|
queryBuilders.put(IndexBlock.Words, new IndexQueryBuilder(listOfNonNulls(metaIndex, titleKeywordsIndex, topicIndex, titleIndex, topIndex, midIndex, lowIndex, linkIndex, namesIndex, wordsIndex), wordsIndex));
|
||||||
queryBuilders.put(IndexBlock.Low, new IndexQueryBuilder(listOfNonNulls(metaIndex, titleKeywordsIndex, topicIndex, titleIndex, topIndex, midIndex, lowIndex, namesIndex), wordsIndex));
|
queryBuilders.put(IndexBlock.Low, new IndexQueryBuilder(listOfNonNulls(metaIndex, titleKeywordsIndex, topicIndex, titleIndex, topIndex, midIndex, lowIndex, linkIndex), wordsIndex));
|
||||||
queryBuilders.put(IndexBlock.Middle, new IndexQueryBuilder(listOfNonNulls(metaIndex, titleKeywordsIndex, topicIndex, titleIndex, topIndex, midIndex), wordsIndex));
|
|
||||||
queryBuilders.put(IndexBlock.Top, new IndexQueryBuilder(listOfNonNulls(metaIndex, titleKeywordsIndex, topicIndex, titleIndex, topIndex), wordsIndex));
|
queryBuilders.put(IndexBlock.Top, new IndexQueryBuilder(listOfNonNulls(metaIndex, titleKeywordsIndex, topicIndex, titleIndex, topIndex), wordsIndex));
|
||||||
queryBuilders.put(IndexBlock.PositionWords, new IndexQueryBuilder(listOfNonNulls(metaIndex, titleKeywordsIndex, topicIndex, titleIndex, namesIndex, positionIndex), wordsIndex));
|
|
||||||
queryBuilders.put(IndexBlock.NamesWords, new IndexQueryBuilder(listOfNonNulls(metaIndex, titleKeywordsIndex, topicIndex, titleIndex, namesIndex), wordsIndex));
|
|
||||||
queryBuilders.put(IndexBlock.Link, new IndexQueryBuilder(listOfNonNulls(metaIndex, titleKeywordsIndex, topicIndex, titleIndex, linkIndex), wordsIndex));
|
|
||||||
queryBuilders.put(IndexBlock.Title, new IndexQueryBuilder(listOfNonNulls(metaIndex, titleKeywordsIndex, topicIndex, titleIndex), wordsIndex));
|
queryBuilders.put(IndexBlock.Title, new IndexQueryBuilder(listOfNonNulls(metaIndex, titleKeywordsIndex, topicIndex, titleIndex), wordsIndex));
|
||||||
queryBuilders.put(IndexBlock.TitleKeywords, new IndexQueryBuilder(listOfNonNulls(metaIndex, titleKeywordsIndex), wordsIndex));
|
queryBuilders.put(IndexBlock.TitleKeywords, new IndexQueryBuilder(listOfNonNulls(metaIndex, titleKeywordsIndex), wordsIndex));
|
||||||
|
|
||||||
underspecifiedQueryBuilders.put(IndexBlock.TitleKeywords, new IndexQueryBuilder(listOfNonNulls(titleKeywordsIndex, linkIndex, topicIndex, topIndex, midIndex, lowIndex, namesIndex, positionIndex, metaIndex), wordsIndex));
|
underspecifiedQueryBuilders.put(IndexBlock.TitleKeywords, new IndexQueryBuilder(listOfNonNulls(titleKeywordsIndex, linkIndex, topicIndex, topIndex, midIndex, lowIndex, namesIndex, positionIndex, metaIndex), wordsIndex));
|
||||||
underspecifiedQueryBuilders.put(IndexBlock.Link, new IndexQueryBuilder(listOfNonNulls(linkIndex, topicIndex, topIndex, midIndex, lowIndex, namesIndex, positionIndex, metaIndex), wordsIndex));
|
underspecifiedQueryBuilders.put(IndexBlock.Title, new IndexQueryBuilder(listOfNonNulls(titleIndex, topicIndex, linkIndex, topicIndex, topIndex, midIndex, lowIndex, namesIndex, positionIndex, metaIndex), wordsIndex));
|
||||||
|
underspecifiedQueryBuilders.put(IndexBlock.Top, new IndexQueryBuilder(listOfNonNulls(topIndex, linkIndex, midIndex, lowIndex, namesIndex, positionIndex, metaIndex), wordsIndex));
|
||||||
}
|
}
|
||||||
|
|
||||||
@SafeVarargs
|
@SafeVarargs
|
||||||
@ -121,7 +118,12 @@ public class SearchIndexReader implements AutoCloseable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public Query findWord(IndexBlock block, IndexSearchBudget budget, LongPredicate filter, int wordId) {
|
public Query findWord(IndexBlock block, IndexSearchBudget budget, LongPredicate filter, int wordId) {
|
||||||
return queryBuilders.get(block).build(budget, filter, wordId);
|
var builder = queryBuilders.get(block);
|
||||||
|
|
||||||
|
if (builder == null)
|
||||||
|
return Query.EMPTY;
|
||||||
|
|
||||||
|
return builder.build(budget, filter, wordId);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -135,13 +137,20 @@ public class SearchIndexReader implements AutoCloseable {
|
|||||||
|
|
||||||
@SneakyThrows
|
@SneakyThrows
|
||||||
public long numHits(IndexBlock block, int word) {
|
public long numHits(IndexBlock block, int word) {
|
||||||
return numHitsCache.get(Pair.of(block, word),
|
return numHitsCache.get(Pair.of(block, word), () -> numHitsForBlockWord(block, word));
|
||||||
() -> queryBuilders.get(block)
|
}
|
||||||
|
|
||||||
|
private long numHitsForBlockWord(IndexBlock block, int word) {
|
||||||
|
IndexQueryBuilder builder = queryBuilders.get(block);
|
||||||
|
|
||||||
|
if (builder == null)
|
||||||
|
return 0L;
|
||||||
|
|
||||||
|
return builder
|
||||||
.getIndicies()
|
.getIndicies()
|
||||||
.stream()
|
.stream()
|
||||||
.mapToLong(idx -> idx.numUrls(word))
|
.mapToLong(idx -> idx.numUrls(word))
|
||||||
.sum()
|
.sum();
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public IndexBlock getBlockForResult(int searchTerm, long urlId) {
|
public IndexBlock getBlockForResult(int searchTerm, long urlId) {
|
||||||
|
@ -3,6 +3,17 @@ package nu.marginalia.wmsa.edge.index.reader.query;
|
|||||||
import java.util.stream.LongStream;
|
import java.util.stream.LongStream;
|
||||||
|
|
||||||
public interface Query {
|
public interface Query {
|
||||||
|
Query EMPTY = new Query() {
|
||||||
|
@Override
|
||||||
|
public Query also(int wordId) { return this; }
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Query not(int wordId) { return this; }
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public LongStream stream() { return LongStream.empty(); }
|
||||||
|
};
|
||||||
|
|
||||||
Query also(int wordId);
|
Query also(int wordId);
|
||||||
Query not(int wordId);
|
Query not(int wordId);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user