Class Lucene92HnswVectorsReader
- java.lang.Object
-
- org.apache.lucene.codecs.KnnVectorsReader
-
- org.apache.lucene.codecs.lucene92.Lucene92HnswVectorsReader
-
- All Implemented Interfaces:
java.io.Closeable
,java.lang.AutoCloseable
,Accountable
public final class Lucene92HnswVectorsReader extends KnnVectorsReader
Reads vectors from the index segments along with index data structures supporting KNN search.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description (package private) static class
Lucene92HnswVectorsReader.FieldEntry
private static class
Lucene92HnswVectorsReader.OffHeapHnswGraph
Read the nearest-neighbors graph from the index input
-
Field Summary
Fields Modifier and Type Field Description private FieldInfos
fieldInfos
private java.util.Map<java.lang.String,Lucene92HnswVectorsReader.FieldEntry>
fields
private IndexInput
vectorData
private IndexInput
vectorIndex
-
Fields inherited from interface org.apache.lucene.util.Accountable
NULL_ACCOUNTABLE
-
-
Constructor Summary
Constructors Constructor Description Lucene92HnswVectorsReader(SegmentReadState state)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description void
checkIntegrity()
Checks consistency of this reader.void
close()
HnswGraph
getGraph(java.lang.String field)
Get knn graph values; used for testingprivate HnswGraph
getGraph(Lucene92HnswVectorsReader.FieldEntry entry)
VectorValues
getVectorValues(java.lang.String field)
Returns theVectorValues
for the givenfield
.private static IndexInput
openDataInput(SegmentReadState state, int versionMeta, java.lang.String fileExtension, java.lang.String codecName)
long
ramBytesUsed()
Return the memory usage of this object in bytes.private Lucene92HnswVectorsReader.FieldEntry
readField(IndexInput input)
private void
readFields(ChecksumIndexInput meta, FieldInfos infos)
private int
readMetadata(SegmentReadState state)
private VectorSimilarityFunction
readSimilarityFunction(DataInput input)
TopDocs
search(java.lang.String field, float[] target, int k, Bits acceptDocs, int visitedLimit)
Return the k nearest neighbor documents as determined by comparison of their vector values for this field, to the given vector, by the field's similarity function.private void
validateFieldEntry(FieldInfo info, Lucene92HnswVectorsReader.FieldEntry fieldEntry)
-
Methods inherited from class org.apache.lucene.codecs.KnnVectorsReader
getMergeInstance
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface org.apache.lucene.util.Accountable
getChildResources
-
-
-
-
Field Detail
-
fieldInfos
private final FieldInfos fieldInfos
-
fields
private final java.util.Map<java.lang.String,Lucene92HnswVectorsReader.FieldEntry> fields
-
vectorData
private final IndexInput vectorData
-
vectorIndex
private final IndexInput vectorIndex
-
-
Constructor Detail
-
Lucene92HnswVectorsReader
Lucene92HnswVectorsReader(SegmentReadState state) throws java.io.IOException
- Throws:
java.io.IOException
-
-
Method Detail
-
readMetadata
private int readMetadata(SegmentReadState state) throws java.io.IOException
- Throws:
java.io.IOException
-
openDataInput
private static IndexInput openDataInput(SegmentReadState state, int versionMeta, java.lang.String fileExtension, java.lang.String codecName) throws java.io.IOException
- Throws:
java.io.IOException
-
readFields
private void readFields(ChecksumIndexInput meta, FieldInfos infos) throws java.io.IOException
- Throws:
java.io.IOException
-
validateFieldEntry
private void validateFieldEntry(FieldInfo info, Lucene92HnswVectorsReader.FieldEntry fieldEntry)
-
readSimilarityFunction
private VectorSimilarityFunction readSimilarityFunction(DataInput input) throws java.io.IOException
- Throws:
java.io.IOException
-
readField
private Lucene92HnswVectorsReader.FieldEntry readField(IndexInput input) throws java.io.IOException
- Throws:
java.io.IOException
-
ramBytesUsed
public long ramBytesUsed()
Description copied from interface:Accountable
Return the memory usage of this object in bytes. Negative values are illegal.
-
checkIntegrity
public void checkIntegrity() throws java.io.IOException
Description copied from class:KnnVectorsReader
Checks consistency of this reader.Note that this may be costly in terms of I/O, e.g. may involve computing a checksum value against large data files.
- Specified by:
checkIntegrity
in classKnnVectorsReader
- Throws:
java.io.IOException
-
getVectorValues
public VectorValues getVectorValues(java.lang.String field) throws java.io.IOException
Description copied from class:KnnVectorsReader
Returns theVectorValues
for the givenfield
. The behavior is undefined if the given field doesn't have KNN vectors enabled on itsFieldInfo
. The return value is nevernull
.- Specified by:
getVectorValues
in classKnnVectorsReader
- Throws:
java.io.IOException
-
search
public TopDocs search(java.lang.String field, float[] target, int k, Bits acceptDocs, int visitedLimit) throws java.io.IOException
Description copied from class:KnnVectorsReader
Return the k nearest neighbor documents as determined by comparison of their vector values for this field, to the given vector, by the field's similarity function. The score of each document is derived from the vector similarity in a way that ensures scores are positive and that a larger score corresponds to a higher ranking.The search is allowed to be approximate, meaning the results are not guaranteed to be the true k closest neighbors. For large values of k (for example when k is close to the total number of documents), the search may also retrieve fewer than k documents.
The returned
TopDocs
will contain aScoreDoc
for each nearest neighbor, in order of their similarity to the query vector (decreasing scores). TheTotalHits
contains the number of documents visited during the search. If the search stopped early because it hitvisitedLimit
, it is indicated through the relationTotalHits.Relation.GREATER_THAN_OR_EQUAL_TO
.The behavior is undefined if the given field doesn't have KNN vectors enabled on its
FieldInfo
. The return value is nevernull
.- Specified by:
search
in classKnnVectorsReader
- Parameters:
field
- the vector field to searchtarget
- the vector-valued queryk
- the number of docs to returnacceptDocs
-Bits
that represents the allowed documents to match, ornull
if they are all allowed to match.visitedLimit
- the maximum number of nodes that the search is allowed to visit- Returns:
- the k nearest neighbor documents, along with their (searchStrategy-specific) scores.
- Throws:
java.io.IOException
-
getGraph
public HnswGraph getGraph(java.lang.String field) throws java.io.IOException
Get knn graph values; used for testing- Throws:
java.io.IOException
-
getGraph
private HnswGraph getGraph(Lucene92HnswVectorsReader.FieldEntry entry) throws java.io.IOException
- Throws:
java.io.IOException
-
close
public void close() throws java.io.IOException
- Throws:
java.io.IOException
-
-