Package org.apache.lucene.util.hnsw
Class NeighborArray
- java.lang.Object
-
- org.apache.lucene.util.hnsw.NeighborArray
-
public class NeighborArray extends Object
NeighborArray encodes the neighbors of a node and their mutual scores in the HNSW graph as a pair of growable arrays. Nodes are arranged in the sorted order of their scores in descending order (if scoresDescOrder is true), or in the ascending order of their scores (if scoresDescOrder is false)- NOTE: This API is for internal purposes only and might change in incompatible ways in the next release.
-
-
Field Summary
Fields Modifier and Type Field Description ReadWriteLock
rwlock
-
Constructor Summary
Constructors Constructor Description NeighborArray(int maxSize, boolean descOrder)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
addAndEnsureDiversity(int newNode, float newScore, int nodeId, RandomVectorScorerSupplier scorerSupplier)
In addition toaddOutOfOrder(int, float)
, this function will also remove the least-diverse node if the node array is full after insertionvoid
addInOrder(int newNode, float newScore)
Add a new node to the NeighborArray.void
addOutOfOrder(int newNode, float newScore)
Add node and newScore but do not insert as sortedvoid
clear()
int[]
nodes()
Direct access to the internal list of node ids; provided for efficient writing of the graphfloat[]
scores()
int
size()
String
toString()
-
-
-
Field Detail
-
rwlock
public final ReadWriteLock rwlock
-
-
Method Detail
-
addInOrder
public void addInOrder(int newNode, float newScore)
Add a new node to the NeighborArray. The new node must be worse than all previously stored nodes. This cannot be called afteraddOutOfOrder(int, float)
-
addOutOfOrder
public void addOutOfOrder(int newNode, float newScore)
Add node and newScore but do not insert as sorted
-
addAndEnsureDiversity
public void addAndEnsureDiversity(int newNode, float newScore, int nodeId, RandomVectorScorerSupplier scorerSupplier) throws IOException
In addition toaddOutOfOrder(int, float)
, this function will also remove the least-diverse node if the node array is full after insertionIn multi-threading environment, this method need to be locked as it will be called by multiple threads while other add method is only supposed to be called by one thread.
- Parameters:
nodeId
- node Id of the owner of this NeighbourArray- Throws:
IOException
-
size
public int size()
-
nodes
public int[] nodes()
Direct access to the internal list of node ids; provided for efficient writing of the graph- NOTE: This API is for internal purposes only and might change in incompatible ways in the next release.
-
scores
public float[] scores()
-
clear
public void clear()
-
-