jmazanec15 commented on code in PR #12050:
URL: https://github.com/apache/lucene/pull/12050#discussion_r1062966074
##########
lucene/core/src/java/org/apache/lucene/util/hnsw/OnHeapHnswGraph.java:
##########
@@ -94,36 +93,83 @@ public int size() {
}
/**
- * Add node on the given level
+ * Add node on the given level. Nodes can be inserted out of order, but it
requires that the nodes
Review Comment:
> but still because in L156 we need to copy the rest of array again and
again as long as that is a non-appending action
Right, this could be expensive for out of order insertion. I can try
switching the nodeByLevel int array to a TreeSet and compare performance to
https://github.com/apache/lucene/issues/11354.
One complication with this approach is that the NodesIterator expects an int
array:
https://github.com/apache/lucene/blob/main/lucene/core/src/java/org/apache/lucene/util/hnsw/HnswGraph.java#L134.
Given this is a public interface, we might need to either convert the treeset
to an int array every time
[getNodesOnLevel](https://github.com/apache/lucene/blob/main/lucene/core/src/java/org/apache/lucene/util/hnsw/OnHeapHnswGraph.java#L165)
gets called, or alter the NodesIterator interface to support both an int array
and an Iterator produced from the TreeSet.
@zhaih What do you think of this approach? Is there better way to do this?
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]