Search in sources :

Example 21 with Result

use of org.opensearch.percolator.QueryAnalyzer.Result in project OpenSearch by opensearch-project.

the class QueryAnalyzerTests method testExactMatch_booleanQuery.

public void testExactMatch_booleanQuery() {
    BooleanQuery.Builder builder = new BooleanQuery.Builder();
    TermQuery termQuery1 = new TermQuery(new Term("_field", "_term1"));
    builder.add(termQuery1, BooleanClause.Occur.SHOULD);
    TermQuery termQuery2 = new TermQuery(new Term("_field", "_term2"));
    builder.add(termQuery2, BooleanClause.Occur.SHOULD);
    Result result = analyze(builder.build(), Version.CURRENT);
    assertThat("All clauses are exact, so candidate matches are verified", result.verified, is(true));
    assertThat(result.minimumShouldMatch, equalTo(1));
    builder = new BooleanQuery.Builder();
    builder.add(termQuery1, BooleanClause.Occur.SHOULD);
    PhraseQuery phraseQuery1 = new PhraseQuery("_field", "_term1", "_term2");
    builder.add(phraseQuery1, BooleanClause.Occur.SHOULD);
    result = analyze(builder.build(), Version.CURRENT);
    assertThat("Clause isn't exact, so candidate matches are not verified", result.verified, is(false));
    assertThat(result.minimumShouldMatch, equalTo(1));
    builder = new BooleanQuery.Builder();
    builder.add(phraseQuery1, BooleanClause.Occur.SHOULD);
    PhraseQuery phraseQuery2 = new PhraseQuery("_field", "_term3", "_term4");
    builder.add(phraseQuery2, BooleanClause.Occur.SHOULD);
    result = analyze(builder.build(), Version.CURRENT);
    assertThat("No clause is exact, so candidate matches are not verified", result.verified, is(false));
    assertThat(result.minimumShouldMatch, equalTo(2));
    builder = new BooleanQuery.Builder();
    builder.add(termQuery1, BooleanClause.Occur.MUST_NOT);
    builder.add(termQuery2, BooleanClause.Occur.SHOULD);
    result = analyze(builder.build(), Version.CURRENT);
    assertThat("There is a must_not clause, so candidate matches are not verified", result.verified, is(false));
    assertThat(result.minimumShouldMatch, equalTo(1));
    builder = new BooleanQuery.Builder();
    int msm = randomIntBetween(2, 3);
    builder.setMinimumNumberShouldMatch(msm);
    TermQuery termQuery3 = new TermQuery(new Term("_field", "_term3"));
    builder.add(termQuery1, BooleanClause.Occur.SHOULD);
    builder.add(termQuery2, BooleanClause.Occur.SHOULD);
    builder.add(termQuery3, BooleanClause.Occur.SHOULD);
    result = analyze(builder.build(), Version.CURRENT);
    assertThat("Minimum match has no impact on whether the result is verified", result.verified, is(true));
    assertThat("msm is at least two so result.minimumShouldMatch should 2 too", result.minimumShouldMatch, equalTo(msm));
    builder = new BooleanQuery.Builder();
    builder.add(termQuery1, randomBoolean() ? BooleanClause.Occur.MUST : BooleanClause.Occur.FILTER);
    result = analyze(builder.build(), Version.CURRENT);
    assertThat("Also required clauses are taken into account whether the result is verified", result.verified, is(true));
    assertThat(result.minimumShouldMatch, equalTo(1));
    builder = new BooleanQuery.Builder();
    builder.add(termQuery1, randomBoolean() ? BooleanClause.Occur.MUST : BooleanClause.Occur.FILTER);
    builder.add(termQuery2, randomBoolean() ? BooleanClause.Occur.MUST : BooleanClause.Occur.FILTER);
    result = analyze(builder.build(), Version.CURRENT);
    assertThat("Also required clauses are taken into account whether the result is verified", result.verified, is(true));
    assertThat(result.minimumShouldMatch, equalTo(2));
    builder = new BooleanQuery.Builder();
    builder.add(termQuery1, randomBoolean() ? BooleanClause.Occur.MUST : BooleanClause.Occur.FILTER);
    builder.add(termQuery2, BooleanClause.Occur.MUST_NOT);
    result = analyze(builder.build(), Version.CURRENT);
    assertThat("Prohibited clause, so candidate matches are not verified", result.verified, is(false));
    assertThat(result.minimumShouldMatch, equalTo(1));
    builder = new BooleanQuery.Builder();
    builder.add(termQuery1, randomBoolean() ? BooleanClause.Occur.MUST : BooleanClause.Occur.FILTER);
    builder.add(termQuery2, BooleanClause.Occur.MUST_NOT);
    result = analyze(builder.build(), Version.CURRENT);
    assertThat("Prohibited clause, so candidate matches are not verified", result.verified, is(false));
    assertThat(result.minimumShouldMatch, equalTo(1));
    builder = new BooleanQuery.Builder().add(new BooleanQuery.Builder().add(termQuery1, Occur.FILTER).add(termQuery2, Occur.FILTER).build(), Occur.SHOULD).add(termQuery3, Occur.SHOULD);
    result = analyze(builder.build(), Version.CURRENT);
    assertThat("Inner clause that is not a pure disjunction, so candidate matches are not verified", result.verified, is(false));
    assertThat(result.minimumShouldMatch, equalTo(1));
    builder = new BooleanQuery.Builder().add(new BooleanQuery.Builder().add(termQuery1, Occur.SHOULD).add(termQuery2, Occur.SHOULD).build(), Occur.SHOULD).add(termQuery3, Occur.SHOULD);
    result = analyze(builder.build(), Version.CURRENT);
    assertThat("Inner clause that is a pure disjunction, so candidate matches are verified", result.verified, is(true));
    assertThat(result.minimumShouldMatch, equalTo(1));
    builder = new BooleanQuery.Builder().add(new BooleanQuery.Builder().add(termQuery1, Occur.SHOULD).add(termQuery2, Occur.SHOULD).build(), Occur.MUST).add(termQuery3, Occur.FILTER);
    result = analyze(builder.build(), Version.CURRENT);
    assertThat("Disjunctions of conjunctions can't be verified", result.verified, is(false));
    assertThat(result.minimumShouldMatch, equalTo(2));
    builder = new BooleanQuery.Builder().add(new BooleanQuery.Builder().add(termQuery1, Occur.MUST).add(termQuery2, Occur.FILTER).build(), Occur.SHOULD).add(termQuery3, Occur.SHOULD);
    result = analyze(builder.build(), Version.CURRENT);
    assertThat("Conjunctions of disjunctions can't be verified", result.verified, is(false));
    assertThat(result.minimumShouldMatch, equalTo(1));
}
Also used : BooleanQuery(org.apache.lucene.search.BooleanQuery) BlendedTermQuery(org.apache.lucene.queries.BlendedTermQuery) SpanTermQuery(org.apache.lucene.search.spans.SpanTermQuery) TermQuery(org.apache.lucene.search.TermQuery) PhraseQuery(org.apache.lucene.search.PhraseQuery) MultiPhraseQuery(org.apache.lucene.search.MultiPhraseQuery) Term(org.apache.lucene.index.Term) DoublePoint(org.apache.lucene.document.DoublePoint) LatLonPoint(org.apache.lucene.document.LatLonPoint) InetAddressPoint(org.apache.lucene.document.InetAddressPoint) LongPoint(org.apache.lucene.document.LongPoint) IntPoint(org.apache.lucene.document.IntPoint) FloatPoint(org.apache.lucene.document.FloatPoint) HalfFloatPoint(org.apache.lucene.document.HalfFloatPoint) Result(org.opensearch.percolator.QueryAnalyzer.Result) QueryAnalyzer.selectBestResult(org.opensearch.percolator.QueryAnalyzer.selectBestResult)

Example 22 with Result

use of org.opensearch.percolator.QueryAnalyzer.Result in project OpenSearch by opensearch-project.

the class QueryAnalyzerTests method testCombinedRangeAndTermWithMinimumShouldMatch.

public void testCombinedRangeAndTermWithMinimumShouldMatch() {
    Query disj = new BooleanQuery.Builder().add(IntPoint.newRangeQuery("i", 0, 10), Occur.SHOULD).add(new TermQuery(new Term("f", "v1")), Occur.SHOULD).add(new TermQuery(new Term("f", "v1")), Occur.SHOULD).setMinimumNumberShouldMatch(2).build();
    Result r = analyze(disj, Version.CURRENT);
    assertThat(r.minimumShouldMatch, equalTo(1));
    assertThat(r.extractions, hasSize(2));
    assertFalse(r.matchAllDocs);
    assertFalse(r.verified);
    Query q = new BooleanQuery.Builder().add(IntPoint.newRangeQuery("i", 0, 10), Occur.SHOULD).add(new TermQuery(new Term("f", "v1")), Occur.SHOULD).add(new TermQuery(new Term("f", "v1")), Occur.SHOULD).add(new TermQuery(new Term("f", "v1")), Occur.FILTER).setMinimumNumberShouldMatch(2).build();
    Result result = analyze(q, Version.CURRENT);
    assertThat(result.minimumShouldMatch, equalTo(1));
    assertThat(result.extractions.size(), equalTo(2));
    assertFalse(result.verified);
    assertFalse(result.matchAllDocs);
    q = new BooleanQuery.Builder().add(q, Occur.MUST).add(q, Occur.MUST).build();
    result = analyze(q, Version.CURRENT);
    assertThat(result.minimumShouldMatch, equalTo(1));
    assertThat(result.extractions.size(), equalTo(2));
    assertFalse(result.verified);
    assertFalse(result.matchAllDocs);
    Query q2 = new BooleanQuery.Builder().add(new TermQuery(new Term("f", "v1")), Occur.FILTER).add(IntPoint.newRangeQuery("i", 15, 20), Occur.SHOULD).add(new TermQuery(new Term("f", "v2")), Occur.SHOULD).add(new TermQuery(new Term("f", "v2")), Occur.MUST).setMinimumNumberShouldMatch(1).build();
    result = analyze(q2, Version.CURRENT);
    assertThat(result.minimumShouldMatch, equalTo(2));
    assertThat(result.extractions, hasSize(3));
    assertFalse(result.verified);
    assertFalse(result.matchAllDocs);
    // multiple range queries on different fields
    Query q3 = new BooleanQuery.Builder().add(IntPoint.newRangeQuery("i", 15, 20), Occur.SHOULD).add(IntPoint.newRangeQuery("i2", 15, 20), Occur.SHOULD).add(new TermQuery(new Term("f", "v1")), Occur.SHOULD).add(new TermQuery(new Term("f", "v2")), Occur.MUST).setMinimumNumberShouldMatch(1).build();
    result = analyze(q3, Version.CURRENT);
    assertThat(result.minimumShouldMatch, equalTo(2));
    assertThat(result.extractions, hasSize(4));
    assertFalse(result.verified);
    assertFalse(result.matchAllDocs);
    // multiple disjoint range queries on the same field
    Query q4 = new BooleanQuery.Builder().add(IntPoint.newRangeQuery("i", 15, 20), Occur.SHOULD).add(IntPoint.newRangeQuery("i", 25, 30), Occur.SHOULD).add(IntPoint.newRangeQuery("i", 35, 40), Occur.SHOULD).add(new TermQuery(new Term("f", "v1")), Occur.SHOULD).add(new TermQuery(new Term("f", "v2")), Occur.MUST).setMinimumNumberShouldMatch(1).build();
    result = analyze(q4, Version.CURRENT);
    assertThat(result.minimumShouldMatch, equalTo(2));
    assertThat(result.extractions, hasSize(5));
    assertFalse(result.verified);
    assertFalse(result.matchAllDocs);
    // multiple conjunction range queries on the same field
    Query q5 = new BooleanQuery.Builder().add(new BooleanQuery.Builder().add(IntPoint.newRangeQuery("i", 15, 20), Occur.MUST).add(IntPoint.newRangeQuery("i", 25, 30), Occur.MUST).build(), Occur.MUST).add(IntPoint.newRangeQuery("i", 35, 40), Occur.MUST).add(new TermQuery(new Term("f", "v2")), Occur.MUST).build();
    result = analyze(q5, Version.CURRENT);
    assertThat(result.minimumShouldMatch, equalTo(2));
    assertThat(result.extractions, hasSize(4));
    assertFalse(result.verified);
    assertFalse(result.matchAllDocs);
    // multiple conjunction range queries on different fields
    Query q6 = new BooleanQuery.Builder().add(new BooleanQuery.Builder().add(IntPoint.newRangeQuery("i", 15, 20), Occur.MUST).add(IntPoint.newRangeQuery("i2", 25, 30), Occur.MUST).build(), Occur.MUST).add(IntPoint.newRangeQuery("i", 35, 40), Occur.MUST).add(new TermQuery(new Term("f", "v2")), Occur.MUST).build();
    result = analyze(q6, Version.CURRENT);
    assertThat(result.minimumShouldMatch, equalTo(3));
    assertThat(result.extractions, hasSize(4));
    assertFalse(result.verified);
    assertFalse(result.matchAllDocs);
    // mixed term and range conjunctions
    Query q7 = new BooleanQuery.Builder().add(new BooleanQuery.Builder().add(IntPoint.newRangeQuery("i", 1, 2), Occur.MUST).add(new TermQuery(new Term("f", "1")), Occur.MUST).build(), Occur.MUST).add(new BooleanQuery.Builder().add(IntPoint.newRangeQuery("i", 1, 2), Occur.MUST).add(new TermQuery(new Term("f", "2")), Occur.MUST).build(), Occur.MUST).build();
    result = analyze(q7, Version.CURRENT);
    assertThat(result.minimumShouldMatch, equalTo(3));
    assertThat(result.extractions, hasSize(3));
    assertFalse(result.verified);
    assertFalse(result.matchAllDocs);
}
Also used : BooleanQuery(org.apache.lucene.search.BooleanQuery) BlendedTermQuery(org.apache.lucene.queries.BlendedTermQuery) SpanTermQuery(org.apache.lucene.search.spans.SpanTermQuery) TermQuery(org.apache.lucene.search.TermQuery) Query(org.apache.lucene.search.Query) MatchNoDocsQuery(org.apache.lucene.search.MatchNoDocsQuery) CommonTermsQuery(org.apache.lucene.queries.CommonTermsQuery) PhraseQuery(org.apache.lucene.search.PhraseQuery) IndexOrDocValuesQuery(org.apache.lucene.search.IndexOrDocValuesQuery) BlendedTermQuery(org.apache.lucene.queries.BlendedTermQuery) FunctionScoreQuery(org.opensearch.common.lucene.search.function.FunctionScoreQuery) TermInSetQuery(org.apache.lucene.search.TermInSetQuery) SpanFirstQuery(org.apache.lucene.search.spans.SpanFirstQuery) MatchAllDocsQuery(org.apache.lucene.search.MatchAllDocsQuery) DisjunctionMaxQuery(org.apache.lucene.search.DisjunctionMaxQuery) IntervalQuery(org.apache.lucene.queries.intervals.IntervalQuery) SpanTermQuery(org.apache.lucene.search.spans.SpanTermQuery) SpanNotQuery(org.apache.lucene.search.spans.SpanNotQuery) ConstantScoreQuery(org.apache.lucene.search.ConstantScoreQuery) MultiPhraseQuery(org.apache.lucene.search.MultiPhraseQuery) SpanNearQuery(org.apache.lucene.search.spans.SpanNearQuery) TermQuery(org.apache.lucene.search.TermQuery) SynonymQuery(org.apache.lucene.search.SynonymQuery) BooleanQuery(org.apache.lucene.search.BooleanQuery) BoostQuery(org.apache.lucene.search.BoostQuery) TermRangeQuery(org.apache.lucene.search.TermRangeQuery) SpanOrQuery(org.apache.lucene.search.spans.SpanOrQuery) OpenSearchToParentBlockJoinQuery(org.opensearch.index.search.OpenSearchToParentBlockJoinQuery) Term(org.apache.lucene.index.Term) Result(org.opensearch.percolator.QueryAnalyzer.Result) QueryAnalyzer.selectBestResult(org.opensearch.percolator.QueryAnalyzer.selectBestResult)

Example 23 with Result

use of org.opensearch.percolator.QueryAnalyzer.Result in project OpenSearch by opensearch-project.

the class QueryAnalyzerTests method testPointRangeQuery_lowerUpperReversed.

public void testPointRangeQuery_lowerUpperReversed() {
    Query query = IntPoint.newRangeQuery("_field", 20, 10);
    Result result = analyze(query, Version.CURRENT);
    assertTrue(result.verified);
    assertThat(result.minimumShouldMatch, equalTo(0));
    assertThat(result.extractions.size(), equalTo(0));
}
Also used : Query(org.apache.lucene.search.Query) MatchNoDocsQuery(org.apache.lucene.search.MatchNoDocsQuery) CommonTermsQuery(org.apache.lucene.queries.CommonTermsQuery) PhraseQuery(org.apache.lucene.search.PhraseQuery) IndexOrDocValuesQuery(org.apache.lucene.search.IndexOrDocValuesQuery) BlendedTermQuery(org.apache.lucene.queries.BlendedTermQuery) FunctionScoreQuery(org.opensearch.common.lucene.search.function.FunctionScoreQuery) TermInSetQuery(org.apache.lucene.search.TermInSetQuery) SpanFirstQuery(org.apache.lucene.search.spans.SpanFirstQuery) MatchAllDocsQuery(org.apache.lucene.search.MatchAllDocsQuery) DisjunctionMaxQuery(org.apache.lucene.search.DisjunctionMaxQuery) IntervalQuery(org.apache.lucene.queries.intervals.IntervalQuery) SpanTermQuery(org.apache.lucene.search.spans.SpanTermQuery) SpanNotQuery(org.apache.lucene.search.spans.SpanNotQuery) ConstantScoreQuery(org.apache.lucene.search.ConstantScoreQuery) MultiPhraseQuery(org.apache.lucene.search.MultiPhraseQuery) SpanNearQuery(org.apache.lucene.search.spans.SpanNearQuery) TermQuery(org.apache.lucene.search.TermQuery) SynonymQuery(org.apache.lucene.search.SynonymQuery) BooleanQuery(org.apache.lucene.search.BooleanQuery) BoostQuery(org.apache.lucene.search.BoostQuery) TermRangeQuery(org.apache.lucene.search.TermRangeQuery) SpanOrQuery(org.apache.lucene.search.spans.SpanOrQuery) OpenSearchToParentBlockJoinQuery(org.opensearch.index.search.OpenSearchToParentBlockJoinQuery) Result(org.opensearch.percolator.QueryAnalyzer.Result) QueryAnalyzer.selectBestResult(org.opensearch.percolator.QueryAnalyzer.selectBestResult)

Example 24 with Result

use of org.opensearch.percolator.QueryAnalyzer.Result in project OpenSearch by opensearch-project.

the class QueryAnalyzerTests method testExtractQueryMetadata_termsQuery.

public void testExtractQueryMetadata_termsQuery() {
    TermInSetQuery termsQuery = new TermInSetQuery("_field", new BytesRef("_term1"), new BytesRef("_term2"));
    Result result = analyze(termsQuery, Version.CURRENT);
    assertThat(result.verified, is(true));
    assertThat(result.minimumShouldMatch, equalTo(1));
    List<QueryExtraction> terms = new ArrayList<>(result.extractions);
    terms.sort(Comparator.comparing(qt -> qt.term));
    assertThat(terms.size(), equalTo(2));
    assertThat(terms.get(0).field(), equalTo("_field"));
    assertThat(terms.get(0).text(), equalTo("_term1"));
    assertThat(terms.get(1).field(), equalTo("_field"));
    assertThat(terms.get(1).text(), equalTo("_term2"));
}
Also used : Query(org.apache.lucene.search.Query) Arrays(java.util.Arrays) MatchNoDocsQuery(org.apache.lucene.search.MatchNoDocsQuery) SortedNumericDocValuesField(org.apache.lucene.document.SortedNumericDocValuesField) Term(org.apache.lucene.index.Term) CommonTermsQuery(org.apache.lucene.queries.CommonTermsQuery) PhraseQuery(org.apache.lucene.search.PhraseQuery) Version(org.opensearch.Version) IndexOrDocValuesQuery(org.apache.lucene.search.IndexOrDocValuesQuery) BlendedTermQuery(org.apache.lucene.queries.BlendedTermQuery) DoublePoint(org.apache.lucene.document.DoublePoint) QueryAnalyzer.analyze(org.opensearch.percolator.QueryAnalyzer.analyze) IntervalsSource(org.apache.lucene.queries.intervals.IntervalsSource) LatLonPoint(org.apache.lucene.document.LatLonPoint) Occur(org.apache.lucene.search.BooleanClause.Occur) FunctionScoreQuery(org.opensearch.common.lucene.search.function.FunctionScoreQuery) InetAddressPoint(org.apache.lucene.document.InetAddressPoint) TermInSetQuery(org.apache.lucene.search.TermInSetQuery) SpanFirstQuery(org.apache.lucene.search.spans.SpanFirstQuery) BytesRef(org.apache.lucene.util.BytesRef) Result(org.opensearch.percolator.QueryAnalyzer.Result) OpenSearchTestCase(org.opensearch.test.OpenSearchTestCase) Set(java.util.Set) MatchAllDocsQuery(org.apache.lucene.search.MatchAllDocsQuery) ScoreMode(org.apache.lucene.search.join.ScoreMode) Collectors(java.util.stream.Collectors) IsCollectionWithSize.hasSize(org.hamcrest.collection.IsCollectionWithSize.hasSize) DisjunctionMaxQuery(org.apache.lucene.search.DisjunctionMaxQuery) List(java.util.List) IntervalQuery(org.apache.lucene.queries.intervals.IntervalQuery) Matchers.equalTo(org.hamcrest.Matchers.equalTo) Matchers.is(org.hamcrest.Matchers.is) RandomScoreFunction(org.opensearch.common.lucene.search.function.RandomScoreFunction) SpanTermQuery(org.apache.lucene.search.spans.SpanTermQuery) QueryExtraction(org.opensearch.percolator.QueryAnalyzer.QueryExtraction) LongPoint(org.apache.lucene.document.LongPoint) InetAddresses(org.opensearch.common.network.InetAddresses) SpanNotQuery(org.apache.lucene.search.spans.SpanNotQuery) QueryBitSetProducer(org.apache.lucene.search.join.QueryBitSetProducer) ArrayList(java.util.ArrayList) HashSet(java.util.HashSet) ConstantScoreQuery(org.apache.lucene.search.ConstantScoreQuery) MultiPhraseQuery(org.apache.lucene.search.MultiPhraseQuery) CombineFunction(org.opensearch.common.lucene.search.function.CombineFunction) IntPoint(org.apache.lucene.document.IntPoint) SpanNearQuery(org.apache.lucene.search.spans.SpanNearQuery) FloatPoint(org.apache.lucene.document.FloatPoint) HalfFloatPoint(org.apache.lucene.document.HalfFloatPoint) QueryAnalyzer.selectBestResult(org.opensearch.percolator.QueryAnalyzer.selectBestResult) BooleanClause(org.apache.lucene.search.BooleanClause) Consumer(java.util.function.Consumer) TermQuery(org.apache.lucene.search.TermQuery) SynonymQuery(org.apache.lucene.search.SynonymQuery) BooleanQuery(org.apache.lucene.search.BooleanQuery) Matchers.sameInstance(org.hamcrest.Matchers.sameInstance) BoostQuery(org.apache.lucene.search.BoostQuery) TermRangeQuery(org.apache.lucene.search.TermRangeQuery) SpanOrQuery(org.apache.lucene.search.spans.SpanOrQuery) Intervals(org.apache.lucene.queries.intervals.Intervals) OpenSearchToParentBlockJoinQuery(org.opensearch.index.search.OpenSearchToParentBlockJoinQuery) Comparator(java.util.Comparator) Collections(java.util.Collections) QueryExtraction(org.opensearch.percolator.QueryAnalyzer.QueryExtraction) TermInSetQuery(org.apache.lucene.search.TermInSetQuery) ArrayList(java.util.ArrayList) BytesRef(org.apache.lucene.util.BytesRef) Result(org.opensearch.percolator.QueryAnalyzer.Result) QueryAnalyzer.selectBestResult(org.opensearch.percolator.QueryAnalyzer.selectBestResult)

Example 25 with Result

use of org.opensearch.percolator.QueryAnalyzer.Result in project OpenSearch by opensearch-project.

the class QueryAnalyzerTests method testBooleanQueryWithMustAndShouldClauses.

public void testBooleanQueryWithMustAndShouldClauses() {
    BooleanQuery.Builder builder = new BooleanQuery.Builder();
    TermQuery termQuery1 = new TermQuery(new Term("_field", "_term1"));
    builder.add(termQuery1, BooleanClause.Occur.SHOULD);
    TermQuery termQuery2 = new TermQuery(new Term("_field", "_term2"));
    builder.add(termQuery2, BooleanClause.Occur.SHOULD);
    TermQuery termQuery3 = new TermQuery(new Term("_field", "_term3"));
    builder.add(termQuery3, BooleanClause.Occur.MUST);
    Result result = analyze(builder.build(), Version.CURRENT);
    assertThat("Must clause is exact, so this is a verified candidate match", result.verified, is(true));
    assertThat(result.minimumShouldMatch, equalTo(1));
    assertThat(result.extractions.size(), equalTo(1));
    List<QueryExtraction> extractions = new ArrayList<>(result.extractions);
    assertThat(extractions.get(0).term, equalTo(new Term("_field", "_term3")));
    builder.setMinimumNumberShouldMatch(1);
    result = analyze(builder.build(), Version.CURRENT);
    assertThat("Must clause is exact, but m_s_m is 1 so one should clause must match too", result.verified, is(false));
    assertThat(result.minimumShouldMatch, equalTo(2));
    assertTermsEqual(result.extractions, termQuery1.getTerm(), termQuery2.getTerm(), termQuery3.getTerm());
    builder = new BooleanQuery.Builder();
    BooleanQuery.Builder innerBuilder = new BooleanQuery.Builder();
    innerBuilder.setMinimumNumberShouldMatch(2);
    innerBuilder.add(termQuery1, BooleanClause.Occur.SHOULD);
    innerBuilder.add(termQuery2, BooleanClause.Occur.SHOULD);
    builder.add(innerBuilder.build(), BooleanClause.Occur.MUST);
    builder.add(termQuery3, BooleanClause.Occur.MUST);
    result = analyze(builder.build(), Version.CURRENT);
    assertThat("Verified, because m_s_m is specified in an inner clause and not top level clause", result.verified, is(true));
    assertThat(result.minimumShouldMatch, equalTo(3));
    assertThat(result.extractions.size(), equalTo(3));
    extractions = new ArrayList<>(result.extractions);
    extractions.sort(Comparator.comparing(key -> key.term));
    assertThat(extractions.get(0).term, equalTo(new Term("_field", "_term1")));
    assertThat(extractions.get(1).term, equalTo(new Term("_field", "_term2")));
    assertThat(extractions.get(2).term, equalTo(new Term("_field", "_term3")));
    builder = new BooleanQuery.Builder();
    builder.add(innerBuilder.build(), BooleanClause.Occur.SHOULD);
    builder.add(termQuery3, BooleanClause.Occur.MUST);
    result = analyze(builder.build(), Version.CURRENT);
    assertThat("Verified, because m_s_m is specified in an inner clause and not top level clause", result.verified, is(true));
    assertThat(result.minimumShouldMatch, equalTo(1));
    assertThat(result.extractions.size(), equalTo(1));
    extractions = new ArrayList<>(result.extractions);
    assertThat(extractions.get(0).term, equalTo(new Term("_field", "_term3")));
}
Also used : Query(org.apache.lucene.search.Query) Arrays(java.util.Arrays) MatchNoDocsQuery(org.apache.lucene.search.MatchNoDocsQuery) SortedNumericDocValuesField(org.apache.lucene.document.SortedNumericDocValuesField) Term(org.apache.lucene.index.Term) CommonTermsQuery(org.apache.lucene.queries.CommonTermsQuery) PhraseQuery(org.apache.lucene.search.PhraseQuery) Version(org.opensearch.Version) IndexOrDocValuesQuery(org.apache.lucene.search.IndexOrDocValuesQuery) BlendedTermQuery(org.apache.lucene.queries.BlendedTermQuery) DoublePoint(org.apache.lucene.document.DoublePoint) QueryAnalyzer.analyze(org.opensearch.percolator.QueryAnalyzer.analyze) IntervalsSource(org.apache.lucene.queries.intervals.IntervalsSource) LatLonPoint(org.apache.lucene.document.LatLonPoint) Occur(org.apache.lucene.search.BooleanClause.Occur) FunctionScoreQuery(org.opensearch.common.lucene.search.function.FunctionScoreQuery) InetAddressPoint(org.apache.lucene.document.InetAddressPoint) TermInSetQuery(org.apache.lucene.search.TermInSetQuery) SpanFirstQuery(org.apache.lucene.search.spans.SpanFirstQuery) BytesRef(org.apache.lucene.util.BytesRef) Result(org.opensearch.percolator.QueryAnalyzer.Result) OpenSearchTestCase(org.opensearch.test.OpenSearchTestCase) Set(java.util.Set) MatchAllDocsQuery(org.apache.lucene.search.MatchAllDocsQuery) ScoreMode(org.apache.lucene.search.join.ScoreMode) Collectors(java.util.stream.Collectors) IsCollectionWithSize.hasSize(org.hamcrest.collection.IsCollectionWithSize.hasSize) DisjunctionMaxQuery(org.apache.lucene.search.DisjunctionMaxQuery) List(java.util.List) IntervalQuery(org.apache.lucene.queries.intervals.IntervalQuery) Matchers.equalTo(org.hamcrest.Matchers.equalTo) Matchers.is(org.hamcrest.Matchers.is) RandomScoreFunction(org.opensearch.common.lucene.search.function.RandomScoreFunction) SpanTermQuery(org.apache.lucene.search.spans.SpanTermQuery) QueryExtraction(org.opensearch.percolator.QueryAnalyzer.QueryExtraction) LongPoint(org.apache.lucene.document.LongPoint) InetAddresses(org.opensearch.common.network.InetAddresses) SpanNotQuery(org.apache.lucene.search.spans.SpanNotQuery) QueryBitSetProducer(org.apache.lucene.search.join.QueryBitSetProducer) ArrayList(java.util.ArrayList) HashSet(java.util.HashSet) ConstantScoreQuery(org.apache.lucene.search.ConstantScoreQuery) MultiPhraseQuery(org.apache.lucene.search.MultiPhraseQuery) CombineFunction(org.opensearch.common.lucene.search.function.CombineFunction) IntPoint(org.apache.lucene.document.IntPoint) SpanNearQuery(org.apache.lucene.search.spans.SpanNearQuery) FloatPoint(org.apache.lucene.document.FloatPoint) HalfFloatPoint(org.apache.lucene.document.HalfFloatPoint) QueryAnalyzer.selectBestResult(org.opensearch.percolator.QueryAnalyzer.selectBestResult) BooleanClause(org.apache.lucene.search.BooleanClause) Consumer(java.util.function.Consumer) TermQuery(org.apache.lucene.search.TermQuery) SynonymQuery(org.apache.lucene.search.SynonymQuery) BooleanQuery(org.apache.lucene.search.BooleanQuery) Matchers.sameInstance(org.hamcrest.Matchers.sameInstance) BoostQuery(org.apache.lucene.search.BoostQuery) TermRangeQuery(org.apache.lucene.search.TermRangeQuery) SpanOrQuery(org.apache.lucene.search.spans.SpanOrQuery) Intervals(org.apache.lucene.queries.intervals.Intervals) OpenSearchToParentBlockJoinQuery(org.opensearch.index.search.OpenSearchToParentBlockJoinQuery) Comparator(java.util.Comparator) Collections(java.util.Collections) BooleanQuery(org.apache.lucene.search.BooleanQuery) BlendedTermQuery(org.apache.lucene.queries.BlendedTermQuery) SpanTermQuery(org.apache.lucene.search.spans.SpanTermQuery) TermQuery(org.apache.lucene.search.TermQuery) QueryExtraction(org.opensearch.percolator.QueryAnalyzer.QueryExtraction) ArrayList(java.util.ArrayList) Term(org.apache.lucene.index.Term) Result(org.opensearch.percolator.QueryAnalyzer.Result) QueryAnalyzer.selectBestResult(org.opensearch.percolator.QueryAnalyzer.selectBestResult)

Aggregations

Result (org.opensearch.percolator.QueryAnalyzer.Result)39 QueryAnalyzer.selectBestResult (org.opensearch.percolator.QueryAnalyzer.selectBestResult)39 Term (org.apache.lucene.index.Term)32 SpanTermQuery (org.apache.lucene.search.spans.SpanTermQuery)31 BlendedTermQuery (org.apache.lucene.queries.BlendedTermQuery)26 TermQuery (org.apache.lucene.search.TermQuery)26 BooleanQuery (org.apache.lucene.search.BooleanQuery)23 MatchAllDocsQuery (org.apache.lucene.search.MatchAllDocsQuery)17 MultiPhraseQuery (org.apache.lucene.search.MultiPhraseQuery)17 QueryExtraction (org.opensearch.percolator.QueryAnalyzer.QueryExtraction)17 DisjunctionMaxQuery (org.apache.lucene.search.DisjunctionMaxQuery)16 PhraseQuery (org.apache.lucene.search.PhraseQuery)16 FunctionScoreQuery (org.opensearch.common.lucene.search.function.FunctionScoreQuery)16 ArrayList (java.util.ArrayList)15 IntervalQuery (org.apache.lucene.queries.intervals.IntervalQuery)15 BoostQuery (org.apache.lucene.search.BoostQuery)15 ConstantScoreQuery (org.apache.lucene.search.ConstantScoreQuery)15 MatchNoDocsQuery (org.apache.lucene.search.MatchNoDocsQuery)15 SynonymQuery (org.apache.lucene.search.SynonymQuery)15 TermRangeQuery (org.apache.lucene.search.TermRangeQuery)15