我正在使用 Elasticsearch 的近似 k-NN 特征。
问题是,当我在同一个索引上重复查询时,有时最近的邻居文档 ID 是不同的。从我读到的关于 Lucene 的实现,似乎近似 k-NN 使用确定性算法,所以我很好奇为什么会出现这种行为。
这是一个示例查询:
GET /my-index/_search
{
"size": 30,
"knn": {
"field": "knnVector",
"k": 30,
"num_candidates": 300,
"query_vector": [
// some 1024 dimensional vector
]
}
}
以下是
my-index
的详情。
GET /_cat/shards/my-index
my-index 0 p STARTED 586611 4.5gb 10.46.32.153 instance-0000000001
my-index 0 r STARTED 586611 4.2gb 10.46.32.91 instance-0000000002
GET /my-index/_mapping
{
"my-index": {
"mappings": {
"dynamic": "false",
"date_detection": false,
"numeric_detection": false,
"properties": {
"knnVector": {
"type": "dense_vector",
"dims": 1024,
"index": true,
"similarity": "dot_product"
},
}
}
}
}
如果有人知道为什么会出现这种行为以及如何使其具有确定性,请告诉我。