org.apache.lucene.search

Class PhraseQuery



  • public class PhraseQuery
    extends Query
    A Query that matches documents containing a particular sequence of terms. A PhraseQuery is built by QueryParser for input like "new york".

    This query may be combined with other terms or queries with a BooleanQuery.

    NOTE: All terms in the phrase must match, even those at the same position. If you have terms at the same position, perhaps synonyms, you probably want MultiPhraseQuery instead which only requires one term at a position to match.
    Also, Leading holes don't have any particular meaning for this query and will be ignored. For instance this query:

     PhraseQuery.Builder builder = new PhraseQuery.Builder();
     builder.add(new Term("body", "one"), 4);
     builder.add(new Term("body", "two"), 5);
     PhraseQuery pq = builder.build();
     
    is equivalent to the below query:
     PhraseQuery.Builder builder = new PhraseQuery.Builder();
     builder.add(new Term("body", "one"), 0);
     builder.add(new Term("body", "two"), 1);
     PhraseQuery pq = builder.build();
     
    • Nested Class Summary

      Nested Classes 
      Modifier and Type Class and Description
      static class  PhraseQuery.Builder
      A builder for phrase queries.
    • Constructor Summary

      Constructors 
      Constructor and Description
      PhraseQuery(int slop, String field, BytesRef... terms)
      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.
      PhraseQuery(int slop, String field, String... terms)
      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.
      PhraseQuery(String field, BytesRef... terms)
      Create a phrase query which will match documents that contain the given list of terms at consecutive positions in field.
      PhraseQuery(String field, String... terms)
      Create a phrase query which will match documents that contain the given list of terms at consecutive positions in field.
    • Constructor Detail

      • PhraseQuery

        public PhraseQuery(int slop,
                           String field,
                           String... terms)
        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. For more complicated use-cases, use PhraseQuery.Builder.
        See Also:
        getSlop()
      • PhraseQuery

        public PhraseQuery(String field,
                           String... terms)
        Create a phrase query which will match documents that contain the given list of terms at consecutive positions in field.
      • PhraseQuery

        public PhraseQuery(int slop,
                           String field,
                           BytesRef... terms)
        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. For more complicated use-cases, use PhraseQuery.Builder.
        See Also:
        getSlop()
      • PhraseQuery

        public PhraseQuery(String field,
                           BytesRef... terms)
        Create a phrase query which will match documents that contain the given list of terms at consecutive positions in field.
    • Method Detail

      • getSlop

        public int getSlop()
        Return the slop for this PhraseQuery.

        The slop is an edit distance between respective positions of terms as defined in this PhraseQuery and the positions of terms in a document.

        For instance, when searching for "quick fox", it is expected that the difference between the positions of fox and quick is 1. So "a quick brown fox" would be at an edit distance of 1 since the difference of the positions of fox and quick is 2. Similarly, "the fox is quick" would be at an edit distance of 3 since the difference of the positions of fox and quick is -2. The slop defines the maximum edit distance for a document to match.

        More exact matches are scored higher than sloppier matches, thus search results are sorted by exactness.

      • getTerms

        public Term[] getTerms()
        Returns the list of terms in this phrase.
      • getPositions

        public int[] getPositions()
        Returns the relative positions of terms in this phrase.
      • rewrite

        public Query rewrite(IndexReader reader)
                      throws IOException
        Description copied from class: Query
        Expert: called to re-write queries into primitive queries. For example, a PrefixQuery will be rewritten into a BooleanQuery that consists of TermQuerys.
        Overrides:
        rewrite in class Query
        Throws:
        IOException