Package org.apache.lucene.util.hnsw

# 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 Summary

Constructors
Constructor
Description
`HnswGraphSearcher(NeighborQueue candidates, BitSet visited)`
Creates a new graph searcher.

## Method Summary

Modifier and Type
Method
Description
`static KnnCollector`
`search(RandomVectorScorer scorer, int topK, OnHeapHnswGraph graph, Bits acceptOrds, int visitedLimit)`
Search `OnHeapHnswGraph`, this method is thread safe.
`static void`
`search(RandomVectorScorer scorer, KnnCollector knnCollector, HnswGraph graph, Bits acceptOrds)`
Searches HNSW graph for the nearest neighbors of a query vector.
`HnswGraphBuilder.GraphBuilderKnnCollector`
`searchLevel(RandomVectorScorer scorer, int topK, int level, int[] eps, HnswGraph graph)`
Searches for the nearest neighbors of a query vector in a given level.

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

## 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`