Package org.apache.lucene.util.hnsw
Class HnswGraphSearcher
java.lang.Object
org.apache.lucene.util.hnsw.HnswGraphSearcher
- Direct Known Subclasses:
FilteredHnswGraphSearcher
Searches an HNSW graph to find nearest neighbors to a query vector. For more background on the
search algorithm, see
HnswGraph
.-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected final NeighborQueue
Scratch data structures that are used in eachsearchLevel(org.apache.lucene.util.hnsw.RandomVectorScorer, int, int, int[], org.apache.lucene.util.hnsw.HnswGraph)
call.protected BitSet
-
Constructor Summary
ConstructorsConstructorDescriptionHnswGraphSearcher
(NeighborQueue candidates, BitSet visited) Creates a new graph searcher. -
Method Summary
Modifier and TypeMethodDescriptionvoid
search
(KnnCollector results, RandomVectorScorer scorer, HnswGraph graph, Bits acceptOrds) Search the graph for the given scorer.static KnnCollector
search
(RandomVectorScorer scorer, int topK, OnHeapHnswGraph graph, Bits acceptOrds, int visitedLimit) SearchOnHeapHnswGraph
, this method is thread safe.static void
search
(RandomVectorScorer scorer, KnnCollector knnCollector, HnswGraph graph, Bits acceptOrds) static void
search
(RandomVectorScorer scorer, KnnCollector knnCollector, HnswGraph graph, Bits acceptOrds, int filteredDocCount) Searches the HNSW graph for the nearest neighbors of a query vector.searchLevel
(RandomVectorScorer scorer, int topK, int level, int[] eps, HnswGraph graph) Searches for the nearest neighbors of a query vector in a given level.
-
Field Details
-
candidates
Scratch data structures that are used in eachsearchLevel(org.apache.lucene.util.hnsw.RandomVectorScorer, int, int, int[], org.apache.lucene.util.hnsw.HnswGraph)
call. These can be expensive to allocate, so they're cleared and reused across calls. -
visited
-
-
Constructor Details
-
HnswGraphSearcher
Creates a new graph searcher.- Parameters:
candidates
- max heap that will track the candidate nodes to explorevisited
- 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 nodesknnCollector
- a hnsw knn collector of top knn results to be returnedgraph
- 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, ornull
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 nodesknnCollector
- a hnsw knn collector of top knn results to be returnedgraph
- 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, ornull
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 SearchOnHeapHnswGraph
, this method is thread safe.- Parameters:
scorer
- the scorer to compare the query with the nodestopK
- the number of nodes to be returnedgraph
- 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, ornull
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 nodestopK
- the number of nearest to query results to returnlevel
- level to searcheps
- the entry points for search at this level expressed as level 0th ordinalsgraph
- 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 resultsscorer
- the scorer to compare the query with the nodesgraph
- the HNSWGraphacceptOrds
- the ordinals to accept for the results- Throws:
IOException
- When accessing the vectors or graph fails
-