search() collected ef candidates, then filtered out soft-deleted nodes, then took k. When the records nearest a query had been deleted, every candidate was a tombstone and the search returned fewer than k results — 39 of 40 queries in the new test, which deletes each query's 40 nearest neighbours. search_layer takes an optional skip mask: a skipped node is still pushed onto the candidate queue (a tombstone is a valid waypoint) but never into the result heap, so the ef result slots hold live nodes only. Build and insert pass no mask. Recall and speed without deletions are unchanged. Co-Authored-By: Claude Fable 5.1 <[email protected]>
clawhdf5-ann
HNSW approximate nearest neighbor index stored as HDF5.
Features
- Build and query HNSW indexes persisted in HDF5 format
- Pure Rust, no C dependencies
- Efficient similarity search for high-dimensional vectors
Usage
use clawhdf5_ann::HnswIndex;
let index = HnswIndex::from_hdf5("vectors.h5").unwrap();
let neighbors = index.search(&query, 10);
License
MIT