Class HnswGraphSearcher


  • public class HnswGraphSearcher
    extends Object
    Searches an HNSW graph to find nearest neighbors to a query vector. For more background on the search algorithm, see HnswGraph.
    • Constructor Detail

      • HnswGraphSearcher

        public HnswGraphSearcher​(NeighborQueue candidates,
                                 BitSet visited)
        Creates a new graph searcher.
        Parameters:
        candidates - max heap that will track the candidate nodes to explore
        visited - bit set that will track nodes that have already been visited
    • Method Detail

      • search

        public static void search​(RandomVectorScorer scorer,
                                  KnnCollector knnCollector,
                                  HnswGraph graph,
                                  Bits acceptOrds)
                           throws IOException
        Searches HNSW graph for the nearest neighbors of a query vector.
        Parameters:
        scorer - the scorer to compare the query with the nodes
        knnCollector - a collector of top knn results to be returned
        graph - the graph values. May represent the entire graph, or a level in a hierarchical graph.
        acceptOrds - Bits that represents the allowed document ordinals to match, or null if they are all allowed to match.
        Throws:
        IOException
      • search

        public static KnnCollector search​(RandomVectorScorer scorer,
                                          int topK,
                                          OnHeapHnswGraph graph,
                                          Bits acceptOrds,
                                          int visitedLimit)
                                   throws IOException
        Search OnHeapHnswGraph, this method is thread safe.
        Parameters:
        scorer - the scorer to compare the query with the nodes
        topK - the number of nodes to be returned
        graph - the graph values. May represent the entire graph, or a level in a hierarchical graph.
        acceptOrds - Bits that represents the allowed document ordinals to match, or null if they are all allowed to match.
        visitedLimit - the maximum number of nodes that the search is allowed to visit
        Returns:
        a set of collected vectors holding the nearest neighbors found
        Throws:
        IOException
      • searchLevel

        public HnswGraphBuilder.GraphBuilderKnnCollector searchLevel​(RandomVectorScorer scorer,
                                                                     int topK,
                                                                     int level,
                                                                     int[] eps,
                                                                     HnswGraph graph)
                                                              throws IOException
        Searches for the nearest neighbors of a query vector in a given level.

        If the search stops early because it reaches the visited nodes limit, then the results will be marked incomplete through NeighborQueue.incomplete().

        Parameters:
        scorer - the scorer to compare the query with the nodes
        topK - the number of nearest to query results to return
        level - level to search
        eps - the entry points for search at this level expressed as level 0th ordinals
        graph - the graph values
        Returns:
        a set of collected vectors holding the nearest neighbors found
        Throws:
        IOException