Class HnswGraphSearcher

java.lang.Object
org.apache.lucene.util.hnsw.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 Details

    • 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 Details

    • 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