Enable BoostingQuery with FVH highlighter (#19984)
* Enable BoostingQuery with FVH highlighter * apply boost with negativeBoost * flatten boosting query with its own boost and update boost query to a single layer
This commit is contained in:
parent
a93af8651c
commit
2adc2a1971
|
@ -22,6 +22,8 @@ package org.apache.lucene.search.vectorhighlight;
|
||||||
import org.apache.lucene.index.IndexReader;
|
import org.apache.lucene.index.IndexReader;
|
||||||
import org.apache.lucene.index.Term;
|
import org.apache.lucene.index.Term;
|
||||||
import org.apache.lucene.queries.BlendedTermQuery;
|
import org.apache.lucene.queries.BlendedTermQuery;
|
||||||
|
import org.apache.lucene.queries.BoostingQuery;
|
||||||
|
import org.apache.lucene.search.BoostQuery;
|
||||||
import org.apache.lucene.search.ConstantScoreQuery;
|
import org.apache.lucene.search.ConstantScoreQuery;
|
||||||
import org.apache.lucene.search.MultiPhraseQuery;
|
import org.apache.lucene.search.MultiPhraseQuery;
|
||||||
import org.apache.lucene.search.PhraseQuery;
|
import org.apache.lucene.search.PhraseQuery;
|
||||||
|
@ -56,7 +58,12 @@ public class CustomFieldQuery extends FieldQuery {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
void flatten(Query sourceQuery, IndexReader reader, Collection<Query> flatQueries, float boost) throws IOException {
|
void flatten(Query sourceQuery, IndexReader reader, Collection<Query> flatQueries, float boost) throws IOException {
|
||||||
if (sourceQuery instanceof SpanTermQuery) {
|
if (sourceQuery instanceof BoostQuery) {
|
||||||
|
BoostQuery bq = (BoostQuery) sourceQuery;
|
||||||
|
sourceQuery = bq.getQuery();
|
||||||
|
boost *= bq.getBoost();
|
||||||
|
flatten(sourceQuery, reader, flatQueries, boost);
|
||||||
|
} else if (sourceQuery instanceof SpanTermQuery) {
|
||||||
super.flatten(new TermQuery(((SpanTermQuery) sourceQuery).getTerm()), reader, flatQueries, boost);
|
super.flatten(new TermQuery(((SpanTermQuery) sourceQuery).getTerm()), reader, flatQueries, boost);
|
||||||
} else if (sourceQuery instanceof ConstantScoreQuery) {
|
} else if (sourceQuery instanceof ConstantScoreQuery) {
|
||||||
flatten(((ConstantScoreQuery) sourceQuery).getQuery(), reader, flatQueries, boost);
|
flatten(((ConstantScoreQuery) sourceQuery).getQuery(), reader, flatQueries, boost);
|
||||||
|
@ -75,6 +82,12 @@ public class CustomFieldQuery extends FieldQuery {
|
||||||
} else if (sourceQuery instanceof ToParentBlockJoinQuery) {
|
} else if (sourceQuery instanceof ToParentBlockJoinQuery) {
|
||||||
ToParentBlockJoinQuery blockJoinQuery = (ToParentBlockJoinQuery) sourceQuery;
|
ToParentBlockJoinQuery blockJoinQuery = (ToParentBlockJoinQuery) sourceQuery;
|
||||||
flatten(blockJoinQuery.getChildQuery(), reader, flatQueries, boost);
|
flatten(blockJoinQuery.getChildQuery(), reader, flatQueries, boost);
|
||||||
|
} else if (sourceQuery instanceof BoostingQuery) {
|
||||||
|
BoostingQuery boostingQuery = (BoostingQuery) sourceQuery;
|
||||||
|
//flatten positive query with query boost
|
||||||
|
flatten(boostingQuery.getMatch(), reader, flatQueries, boost);
|
||||||
|
//flatten negative query with negative boost
|
||||||
|
flatten(boostingQuery.getContext(), reader, flatQueries, boostingQuery.getBoost());
|
||||||
} else {
|
} else {
|
||||||
super.flatten(sourceQuery, reader, flatQueries, boost);
|
super.flatten(sourceQuery, reader, flatQueries, boost);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1400,7 +1400,6 @@ public class HighlighterSearchIT extends ESIntegTestCase {
|
||||||
assertHighlight(searchResponse, 0, "field2", 0, 1, equalTo("The quick <x>brown</x> fox jumps over the lazy dog"));
|
assertHighlight(searchResponse, 0, "field2", 0, 1, equalTo("The quick <x>brown</x> fox jumps over the lazy dog"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@AwaitsFix(bugUrl="Broken now that BoostingQuery does not extend BooleanQuery anymore")
|
|
||||||
public void testBoostingQueryTermVector() throws IOException {
|
public void testBoostingQueryTermVector() throws IOException {
|
||||||
assertAcked(prepareCreate("test").addMapping("type1", type1TermVectorMapping()));
|
assertAcked(prepareCreate("test").addMapping("type1", type1TermVectorMapping()));
|
||||||
ensureGreen();
|
ensureGreen();
|
||||||
|
@ -2643,7 +2642,6 @@ public class HighlighterSearchIT extends ESIntegTestCase {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@AwaitsFix(bugUrl="Broken now that BoostingQuery does not extend BooleanQuery anymore")
|
|
||||||
public void testFastVectorHighlighterPhraseBoost() throws Exception {
|
public void testFastVectorHighlighterPhraseBoost() throws Exception {
|
||||||
assertAcked(prepareCreate("test").addMapping("type1", type1TermVectorMapping()));
|
assertAcked(prepareCreate("test").addMapping("type1", type1TermVectorMapping()));
|
||||||
phraseBoostTestCase("fvh");
|
phraseBoostTestCase("fvh");
|
||||||
|
|
Loading…
Reference in New Issue