HNSW provides a high-performance, approximate nearest-neighbor search solution using the HNSW data structure. It supports custom distance metrics, efficient searching with concurrency, and configurable parameters to balance speed, recall, and memory usage. Perfect for .NET applications that require fast similarity lookups (e.g., image retrieval, recommendation systems, or vector-based search).
$ dotnet add package HNSWAot本项目在 HNSWINDEX 基础上修改,主要解决两个问题:
public class HNSWPoint
{
public float[] Data { get; set; } = Array.Empty<float>();
public string Label { get; set; } = String.Empty;
}
var vectors = HNSWPoint.Random(128, 2_000);
var vectors2 = HNSWPoint.Random(128, 1);
var index = new HNSWIndex(HNSWPoint.CosineMetricUnitCompute);
for (int i = 0; i < vectors.Count; i++)
index.Add(vectors[i]);
index.Serialize("GraphData.bin");
var decodedIndex = HNSWIndex.Deserialize(HNSWPoint.CosineMetricUnitCompute, "GraphData.bin");
var originalResults = index.KnnQuery(vectors2[0], 5);
var decodeResults = decodedIndex.KnnQuery(vectors2[0], 5);
Console.WriteLine(decodeResults[0].Distance);
Console.WriteLine(originalResults[0].Distance);
Console.WriteLine(decodeResults[2].Distance);
Console.WriteLine(originalResults[2].Distance);
Console.WriteLine(decodeResults[0].Point.Data[0]);
Console.WriteLine(originalResults[0].Point.Data[0]);
Console.WriteLine(decodeResults[0].Point.Label);
Console.WriteLine(originalResults[0].Point.Label);