percolator: Also support query extraction for queries wrapped inside a ESToParentBlockJoinQuery
This commit is contained in:
parent
158e1971df
commit
805437b8bc
|
@ -47,6 +47,7 @@ import org.apache.lucene.util.BytesRef;
|
|||
import org.apache.lucene.util.NumericUtils;
|
||||
import org.elasticsearch.common.logging.LoggerMessageFormat;
|
||||
import org.elasticsearch.common.lucene.search.function.FunctionScoreQuery;
|
||||
import org.elasticsearch.index.search.ESToParentBlockJoinQuery;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
|
@ -88,6 +89,7 @@ final class QueryAnalyzer {
|
|||
map.put(FunctionScoreQuery.class, functionScoreQuery());
|
||||
map.put(PointRangeQuery.class, pointRangeQuery());
|
||||
map.put(IndexOrDocValuesQuery.class, indexOrDocValuesQuery());
|
||||
map.put(ESToParentBlockJoinQuery.class, toParentBlockJoinQuery());
|
||||
queryProcessors = Collections.unmodifiableMap(map);
|
||||
}
|
||||
|
||||
|
@ -390,6 +392,14 @@ final class QueryAnalyzer {
|
|||
};
|
||||
}
|
||||
|
||||
private static BiFunction<Query, Map<String, Float>, Result> toParentBlockJoinQuery() {
|
||||
return (query, boosts) -> {
|
||||
ESToParentBlockJoinQuery toParentBlockJoinQuery = (ESToParentBlockJoinQuery) query;
|
||||
Result result = analyze(toParentBlockJoinQuery.getChildQuery(), boosts);
|
||||
return new Result(false, result.extractions);
|
||||
};
|
||||
}
|
||||
|
||||
private static Result handleDisjunction(List<Query> disjunctions, int minimumShouldMatch, boolean otherClauses,
|
||||
Map<String, Float> boosts) {
|
||||
boolean verified = minimumShouldMatch <= 1 && otherClauses == false;
|
||||
|
|
|
@ -44,6 +44,8 @@ import org.apache.lucene.search.SynonymQuery;
|
|||
import org.apache.lucene.search.TermInSetQuery;
|
||||
import org.apache.lucene.search.TermQuery;
|
||||
import org.apache.lucene.search.TermRangeQuery;
|
||||
import org.apache.lucene.search.join.QueryBitSetProducer;
|
||||
import org.apache.lucene.search.join.ScoreMode;
|
||||
import org.apache.lucene.search.spans.SpanFirstQuery;
|
||||
import org.apache.lucene.search.spans.SpanNearQuery;
|
||||
import org.apache.lucene.search.spans.SpanNotQuery;
|
||||
|
@ -54,6 +56,7 @@ import org.elasticsearch.common.lucene.search.function.CombineFunction;
|
|||
import org.elasticsearch.common.lucene.search.function.FunctionScoreQuery;
|
||||
import org.elasticsearch.common.lucene.search.function.RandomScoreFunction;
|
||||
import org.elasticsearch.common.network.InetAddresses;
|
||||
import org.elasticsearch.index.search.ESToParentBlockJoinQuery;
|
||||
import org.elasticsearch.percolator.QueryAnalyzer.QueryExtraction;
|
||||
import org.elasticsearch.percolator.QueryAnalyzer.Result;
|
||||
import org.elasticsearch.test.ESTestCase;
|
||||
|
@ -788,6 +791,17 @@ public class QueryAnalyzerTests extends ESTestCase {
|
|||
assertDimension(ranges.get(0).range.upperPoint, bytes -> IntPoint.encodeDimension(20, bytes, 0));
|
||||
}
|
||||
|
||||
public void testToParentBlockJoinQuery() {
|
||||
TermQuery termQuery = new TermQuery(new Term("field", "value"));
|
||||
QueryBitSetProducer queryBitSetProducer = new QueryBitSetProducer(new TermQuery(new Term("_type", "child")));
|
||||
ESToParentBlockJoinQuery query = new ESToParentBlockJoinQuery(termQuery, queryBitSetProducer, ScoreMode.None, "child");
|
||||
Result result = analyze(query, Collections.emptyMap());
|
||||
assertFalse(result.verified);
|
||||
assertEquals(1, result.extractions.size());
|
||||
assertNull(result.extractions.toArray(new QueryExtraction[0])[0].range);
|
||||
assertEquals(new Term("field", "value"), result.extractions.toArray(new QueryExtraction[0])[0].term);
|
||||
}
|
||||
|
||||
public void testPointRangeQuerySelectShortestRange() {
|
||||
BooleanQuery.Builder boolQuery = new BooleanQuery.Builder();
|
||||
boolQuery.add(LongPoint.newRangeQuery("_field1", 10, 20), BooleanClause.Occur.FILTER);
|
||||
|
|
Loading…
Reference in New Issue