我面临一个问题,我需要在嵌套的 ElasticSearch 上进行 KNN 计算。 我的主要问题是关于查询,我有一个完整的系统来生成一些与用户个人资料相关的查询,它已经实现,我需要从与给定查询匹配的文档中获取 KNN。
这是我的实际代码,有一个非常简单的查询,但考虑到在 99% 的情况下,结合 bool/must/must_not 确实会更复杂。
POST feedbacks/_search
{
"fields": [
"id",
"created_at",
"satisfaction_ratio"
],
"_source": false,
"query": {
"bool": {
"must": [
{
"bool": {
"must_not": [
{
"term": {
"id": 1190473 // Example query that doesn't work for KNN calculation
}
}
]
}
}
]
}
},
"knn": {
"inner_hits": {
"_source": false,
"fields": [
"question_answers.value"
],
"size": 1
},
"field": "question_answers.embedding",
"k": 2,
"num_candidates": 2,
"query_vector": [
-0.031112670898438,
0.04901123046875,
0.05078125,
// 1024 dimensional
]
}
}
这似乎是您正在寻找的倒数排名融合 (rrf),但它是 Elastic Search 的一项高级功能。
如果您在同一搜索中使用 query 和 knn,这将是一个析取(OR 子句),因此将出现满足两者之一的结果。似乎还有另一种方法叫做凸组合,我还在研究它。