Class KnnVectorQuery


  • public class KnnVectorQuery
    extends Query
    Uses KnnVectorsReader.search(java.lang.String, float[], int, org.apache.lucene.util.Bits, int) to perform nearest neighbour search.

    This query also allows for performing a kNN search subject to a filter. In this case, it first executes the filter for each leaf, then chooses a strategy dynamically:

    • If the filter cost is less than k, just execute an exact search
    • Otherwise run a kNN search subject to the filter
    • If the kNN search visits too many vectors without completing, stop and run an exact search
    • Field Detail

      • NO_RESULTS

        private static final TopDocs NO_RESULTS
      • field

        private final java.lang.String field
      • target

        private final float[] target
      • k

        private final int k
      • filter

        private final Query filter
    • Constructor Detail

      • KnnVectorQuery

        public KnnVectorQuery​(java.lang.String field,
                              float[] target,
                              int k)
        Find the k nearest documents to the target vector according to the vectors in the given field. target vector.
        Parameters:
        field - a field that has been indexed as a KnnVectorField.
        target - the target of the search
        k - the number of documents to find
        Throws:
        java.lang.IllegalArgumentException - if k is less than 1
      • KnnVectorQuery

        public KnnVectorQuery​(java.lang.String field,
                              float[] target,
                              int k,
                              Query filter)
        Find the k nearest documents to the target vector according to the vectors in the given field. target vector.
        Parameters:
        field - a field that has been indexed as a KnnVectorField.
        target - the target of the search
        k - the number of documents to find
        filter - a filter applied before the vector search
        Throws:
        java.lang.IllegalArgumentException - if k is less than 1
    • Method Detail

      • rewrite

        public Query rewrite​(IndexReader reader)
                      throws java.io.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.

        Callers are expected to call rewrite multiple times if necessary, until the rewritten query is the same as the original query.

        Overrides:
        rewrite in class Query
        Throws:
        java.io.IOException
        See Also:
        IndexSearcher.rewrite(Query)
      • approximateSearch

        private TopDocs approximateSearch​(LeafReaderContext context,
                                          Bits acceptDocs,
                                          int visitedLimit)
                                   throws java.io.IOException
        Throws:
        java.io.IOException
      • findSegmentStarts

        private int[] findSegmentStarts​(IndexReader reader,
                                        int[] docs)
      • toString

        public java.lang.String toString​(java.lang.String field)
        Description copied from class: Query
        Prints a query to a string, with field assumed to be the default field and omitted.
        Specified by:
        toString in class Query
      • visit

        public void visit​(QueryVisitor visitor)
        Description copied from class: Query
        Recurse through the query tree, visiting any child queries
        Specified by:
        visit in class Query
        Parameters:
        visitor - a QueryVisitor to be called by each query in the tree
      • equals

        public boolean equals​(java.lang.Object obj)
        Description copied from class: Query
        Override and implement query instance equivalence properly in a subclass. This is required so that QueryCache works properly.

        Typically a query will be equal to another only if it's an instance of the same class and its document-filtering properties are identical that other instance. Utility methods are provided for certain repetitive code.

        Specified by:
        equals in class Query
        See Also:
        Query.sameClassAs(Object), Query.classHash()
      • hashCode

        public int hashCode()
        Description copied from class: Query
        Override and implement query hash code properly in a subclass. This is required so that QueryCache works properly.
        Specified by:
        hashCode in class Query
        See Also:
        Query.equals(Object)