Class HnswGraphSearcher

java.lang.Object
org.apache.lucene.util.hnsw.HnswGraphSearcher
Direct Known Subclasses:
FilteredHnswGraphSearcher

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

  • 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
      Parameters:
      scorer - the scorer to compare the query with the nodes
      knnCollector - a hnsw knn 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 void search(RandomVectorScorer scorer, KnnCollector knnCollector, HnswGraph graph, Bits acceptOrds, int filteredDocCount) throws IOException
      Searches the HNSW graph for the nearest neighbors of a query vector. If entry points are directly provided via the knnCollector, then the search will be initialized at those points. Otherwise, the search will discover the best entry point per the normal HNSW search algorithm.
      Parameters:
      scorer - the scorer to compare the query with the nodes
      knnCollector - a hnsw knn 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.
      filteredDocCount - the number of docs that pass the filter
      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
    • search

      public void search(KnnCollector results, RandomVectorScorer scorer, HnswGraph graph, Bits acceptOrds) throws IOException
      Search the graph for the given scorer. Gathering results in the provided collector that pass the provided acceptOrds.
      Parameters:
      results - the collector to collect the results
      scorer - the scorer to compare the query with the nodes
      graph - the HNSWGraph
      acceptOrds - the ordinals to accept for the results
      Throws:
      IOException - When accessing the vectors or graph fails