Example usage for org.apache.lucene.search PhraseQuery PhraseQuery

List of usage examples for org.apache.lucene.search PhraseQuery PhraseQuery

Introduction

In this page you can find the example usage for org.apache.lucene.search PhraseQuery PhraseQuery.

Prototype

public PhraseQuery(int slop, String field, BytesRef... terms) 

Source Link

Document

Create a phrase query which will match documents that contain the given list of terms at consecutive positions in field , and at a maximum edit distance of slop .

Usage

From source file:org.elasticsearch.index.mapper.internal.TypeFieldTypeTests.java

License:Apache License

public void testTermQuery() throws Exception {
    Directory dir = newDirectory();/*from w  ww .  j ava 2  s . c o  m*/
    IndexWriter w = new IndexWriter(dir, newIndexWriterConfig());
    Document doc = new Document();
    StringField type = new StringField(TypeFieldMapper.NAME, "my_type", Store.NO);
    doc.add(type);
    w.addDocument(doc);
    w.addDocument(doc);
    IndexReader reader = DirectoryReader.open(w);

    TypeFieldMapper.TypeFieldType ft = new TypeFieldMapper.TypeFieldType();
    ft.setName(TypeFieldMapper.NAME);
    Query query = ft.termQuery("my_type", null);

    assertEquals(new MatchAllDocsQuery(), query.rewrite(reader));

    // Make sure that Lucene actually simplifies the query when there is a single type
    Query userQuery = new PhraseQuery("body", "quick", "fox");
    Query filteredQuery = new BooleanQuery.Builder().add(userQuery, Occur.MUST).add(query, Occur.FILTER)
            .build();
    Query rewritten = new IndexSearcher(reader).rewrite(filteredQuery);
    assertEquals(userQuery, rewritten);

    type.setStringValue("my_type2");
    w.addDocument(doc);
    reader.close();
    reader = DirectoryReader.open(w);

    assertEquals(new ConstantScoreQuery(new TermQuery(new Term(TypeFieldMapper.NAME, "my_type"))),
            query.rewrite(reader));

    IOUtils.close(reader, w, dir);
}

From source file:org.elasticsearch.index.percolator.ExtractQueryTermsServiceTests.java

License:Apache License

public void testExtractQueryMetadata_phraseQuery() {
    PhraseQuery phraseQuery = new PhraseQuery("_field", "_term1", "term2");
    List<Term> terms = new ArrayList<>(ExtractQueryTermsService.extractQueryTerms(phraseQuery));
    assertThat(terms.size(), equalTo(1));
    assertThat(terms.get(0).field(), equalTo(phraseQuery.getTerms()[0].field()));
    assertThat(terms.get(0).bytes(), equalTo(phraseQuery.getTerms()[0].bytes()));
}

From source file:org.elasticsearch.index.percolator.ExtractQueryTermsServiceTests.java

License:Apache License

public void testExtractQueryMetadata_booleanQuery() {
    BooleanQuery.Builder builder = new BooleanQuery.Builder();
    TermQuery termQuery1 = new TermQuery(new Term("_field", "_term"));
    builder.add(termQuery1, BooleanClause.Occur.SHOULD);
    PhraseQuery phraseQuery = new PhraseQuery("_field", "_term1", "term2");
    builder.add(phraseQuery, BooleanClause.Occur.SHOULD);

    BooleanQuery.Builder subBuilder = new BooleanQuery.Builder();
    TermQuery termQuery2 = new TermQuery(new Term("_field1", "_term"));
    subBuilder.add(termQuery2, BooleanClause.Occur.MUST);
    TermQuery termQuery3 = new TermQuery(new Term("_field3", "_long_term"));
    subBuilder.add(termQuery3, BooleanClause.Occur.MUST);
    builder.add(subBuilder.build(), BooleanClause.Occur.SHOULD);

    BooleanQuery booleanQuery = builder.build();
    List<Term> terms = new ArrayList<>(ExtractQueryTermsService.extractQueryTerms(booleanQuery));
    Collections.sort(terms);//from   www .  j a va  2 s  .  com
    assertThat(terms.size(), equalTo(3));
    assertThat(terms.get(0).field(), equalTo(termQuery1.getTerm().field()));
    assertThat(terms.get(0).bytes(), equalTo(termQuery1.getTerm().bytes()));
    assertThat(terms.get(1).field(), equalTo(phraseQuery.getTerms()[0].field()));
    assertThat(terms.get(1).bytes(), equalTo(phraseQuery.getTerms()[0].bytes()));
    assertThat(terms.get(2).field(), equalTo(termQuery3.getTerm().field()));
    assertThat(terms.get(2).bytes(), equalTo(termQuery3.getTerm().bytes()));
}

From source file:org.elasticsearch.index.percolator.ExtractQueryTermsServiceTests.java

License:Apache License

public void testExtractQueryMetadata_booleanQueryWithMustNot() {
    BooleanQuery.Builder builder = new BooleanQuery.Builder();
    TermQuery termQuery1 = new TermQuery(new Term("_field", "_term"));
    builder.add(termQuery1, BooleanClause.Occur.MUST_NOT);
    PhraseQuery phraseQuery = new PhraseQuery("_field", "_term1", "term2");
    builder.add(phraseQuery, BooleanClause.Occur.SHOULD);

    BooleanQuery booleanQuery = builder.build();
    List<Term> terms = new ArrayList<>(ExtractQueryTermsService.extractQueryTerms(booleanQuery));
    assertThat(terms.size(), equalTo(1));
    assertThat(terms.get(0).field(), equalTo(phraseQuery.getTerms()[0].field()));
    assertThat(terms.get(0).bytes(), equalTo(phraseQuery.getTerms()[0].bytes()));
}

From source file:org.elasticsearch.index.shard.ElasticsearchQueryCachingPolicyTests.java

License:Apache License

public void testDoesNotCacheTermQueries() throws IOException {
    QueryCachingPolicy policy = QueryCachingPolicy.ALWAYS_CACHE;
    assertTrue(policy.shouldCache(new TermQuery(new Term("foo", "bar"))));
    assertTrue(policy.shouldCache(new PhraseQuery("foo", "bar", "baz")));
    policy = new ElasticsearchQueryCachingPolicy(policy);
    assertFalse(policy.shouldCache(new TermQuery(new Term("foo", "bar"))));
    assertTrue(policy.shouldCache(new PhraseQuery("foo", "bar", "baz")));
}

From source file:org.elasticsearch.index.shard.ElasticsearchQueryCachingPolicyTests.java

License:Apache License

public void testDoesNotPutTermQueriesIntoTheHistory() {
    boolean[] used = new boolean[1];
    QueryCachingPolicy policy = new QueryCachingPolicy() {
        @Override/* w  ww.  j  av a  2 s  . c o m*/
        public boolean shouldCache(Query query) throws IOException {
            throw new UnsupportedOperationException();
        }

        @Override
        public void onUse(Query query) {
            used[0] = true;
        }
    };
    policy = new ElasticsearchQueryCachingPolicy(policy);
    policy.onUse(new TermQuery(new Term("foo", "bar")));
    assertFalse(used[0]);
    policy.onUse(new PhraseQuery("foo", "bar", "baz"));
    assertTrue(used[0]);
}

From source file:org.elasticsearch.percolator.ExtractQueryTermsServiceTests.java

License:Apache License

public void testExtractQueryMetadata_phraseQuery() {
    PhraseQuery phraseQuery = new PhraseQuery("_field", "_term1", "term2");
    Result result = extractQueryTerms(phraseQuery);
    assertThat(result.verified, is(false));
    List<Term> terms = new ArrayList<>(result.terms);
    assertThat(terms.size(), equalTo(1));
    assertThat(terms.get(0).field(), equalTo(phraseQuery.getTerms()[0].field()));
    assertThat(terms.get(0).bytes(), equalTo(phraseQuery.getTerms()[0].bytes()));
}

From source file:org.elasticsearch.percolator.ExtractQueryTermsServiceTests.java

License:Apache License

public void testExtractQueryMetadata_booleanQuery() {
    BooleanQuery.Builder builder = new BooleanQuery.Builder();
    TermQuery termQuery1 = new TermQuery(new Term("_field", "_term"));
    builder.add(termQuery1, BooleanClause.Occur.SHOULD);
    PhraseQuery phraseQuery = new PhraseQuery("_field", "_term1", "term2");
    builder.add(phraseQuery, BooleanClause.Occur.SHOULD);

    BooleanQuery.Builder subBuilder = new BooleanQuery.Builder();
    TermQuery termQuery2 = new TermQuery(new Term("_field1", "_term"));
    subBuilder.add(termQuery2, BooleanClause.Occur.MUST);
    TermQuery termQuery3 = new TermQuery(new Term("_field3", "_long_term"));
    subBuilder.add(termQuery3, BooleanClause.Occur.MUST);
    builder.add(subBuilder.build(), BooleanClause.Occur.SHOULD);

    BooleanQuery booleanQuery = builder.build();
    Result result = extractQueryTerms(booleanQuery);
    assertThat("Should clause with phrase query isn't verified, so entire query can't be verified",
            result.verified, is(false));
    List<Term> terms = new ArrayList<>(result.terms);
    Collections.sort(terms);/*from  www .  java  2 s. c om*/
    assertThat(terms.size(), equalTo(3));
    assertThat(terms.get(0).field(), equalTo(termQuery1.getTerm().field()));
    assertThat(terms.get(0).bytes(), equalTo(termQuery1.getTerm().bytes()));
    assertThat(terms.get(1).field(), equalTo(phraseQuery.getTerms()[0].field()));
    assertThat(terms.get(1).bytes(), equalTo(phraseQuery.getTerms()[0].bytes()));
    assertThat(terms.get(2).field(), equalTo(termQuery3.getTerm().field()));
    assertThat(terms.get(2).bytes(), equalTo(termQuery3.getTerm().bytes()));
}

From source file:org.elasticsearch.percolator.ExtractQueryTermsServiceTests.java

License:Apache License

public void testExtractQueryMetadata_booleanQueryWithMustNot() {
    BooleanQuery.Builder builder = new BooleanQuery.Builder();
    TermQuery termQuery1 = new TermQuery(new Term("_field", "_term"));
    builder.add(termQuery1, BooleanClause.Occur.MUST_NOT);
    PhraseQuery phraseQuery = new PhraseQuery("_field", "_term1", "term2");
    builder.add(phraseQuery, BooleanClause.Occur.SHOULD);

    BooleanQuery booleanQuery = builder.build();
    Result result = extractQueryTerms(booleanQuery);
    assertThat(result.verified, is(false));
    List<Term> terms = new ArrayList<>(result.terms);
    assertThat(terms.size(), equalTo(1));
    assertThat(terms.get(0).field(), equalTo(phraseQuery.getTerms()[0].field()));
    assertThat(terms.get(0).bytes(), equalTo(phraseQuery.getTerms()[0].bytes()));
}

From source file:org.elasticsearch.percolator.ExtractQueryTermsServiceTests.java

License:Apache License

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 = extractQueryTerms(builder.build());
    assertThat("All clauses are exact, so candidate matches are verified", result.verified, is(true));

    builder = new BooleanQuery.Builder();
    builder.add(termQuery1, BooleanClause.Occur.SHOULD);
    PhraseQuery phraseQuery1 = new PhraseQuery("_field", "_term1", "_term2");
    builder.add(phraseQuery1, BooleanClause.Occur.SHOULD);
    result = extractQueryTerms(builder.build());
    assertThat("Clause isn't exact, so candidate matches are not verified", result.verified, is(false));

    builder = new BooleanQuery.Builder();
    builder.add(phraseQuery1, BooleanClause.Occur.SHOULD);
    PhraseQuery phraseQuery2 = new PhraseQuery("_field", "_term3", "_term4");
    builder.add(phraseQuery2, BooleanClause.Occur.SHOULD);
    result = extractQueryTerms(builder.build());
    assertThat("No clause is exact, so candidate matches are not verified", result.verified, is(false));

    builder = new BooleanQuery.Builder();
    builder.add(termQuery1, BooleanClause.Occur.MUST_NOT);
    builder.add(termQuery2, BooleanClause.Occur.SHOULD);
    result = extractQueryTerms(builder.build());
    assertThat("There is a must_not clause, so candidate matches are not verified", result.verified, is(false));

    builder = new BooleanQuery.Builder();
    builder.setMinimumNumberShouldMatch(randomIntBetween(2, 32));
    builder.add(termQuery1, BooleanClause.Occur.SHOULD);
    builder.add(termQuery2, BooleanClause.Occur.SHOULD);
    result = extractQueryTerms(builder.build());
    assertThat("Minimum match is >= 1, so candidate matches are not verified", result.verified, is(false));

    builder = new BooleanQuery.Builder();
    builder.add(termQuery1, randomBoolean() ? BooleanClause.Occur.MUST : BooleanClause.Occur.FILTER);
    result = extractQueryTerms(builder.build());
    assertThat("Single required clause, so candidate matches are verified", result.verified, is(false));

    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 = extractQueryTerms(builder.build());
    assertThat("Two or more required clauses, so candidate matches are not verified", result.verified,
            is(false));//from  w w w .  j  a  va  2 s  . co m

    builder = new BooleanQuery.Builder();
    builder.add(termQuery1, randomBoolean() ? BooleanClause.Occur.MUST : BooleanClause.Occur.FILTER);
    builder.add(termQuery2, BooleanClause.Occur.MUST_NOT);
    result = extractQueryTerms(builder.build());
    assertThat("Required and prohibited clauses, so candidate matches are not verified", result.verified,
            is(false));
}