我使用的是ES 8.2。我想在多个向量上使用_knn_search
的近似方法。下面,我将我当前的代码搜索附加到一个向量上。据我所知,_knn_search
不支持对nested
字段进行搜索。或者,我可以使用多索引搜索。一个索引、一个向量、一个搜索,将所有结果汇总在一起。然而,我需要将所有这些向量一起存储在一个索引中,因为我还需要对KNN搜索的向量以外的其他一些字段执行过滤。
因此,问题是,是否有解决方法来解决如何对多个向量执行_knn_search
的问题?
search_vector = np.zeros(512).tolist()
es_query = {
"knn": {
"field": "feature_vector_1.vector",
"query_vector": search_vector,
"k": 100,
"num_candidates": 1000
},
"filter": [
{
"range": {
"feature_vector_1.match_prc": {
"gt": 10
}
}
}
],
"_source": {
"excludes": ["feature_vector_1.vector", "feature_vector_2.vector"]
}
}
2条答案
按热度按时间sh7euo9m1#
我最后得到的最后一个工作查询是
然而,在两个向量上AKNN不是真的,但如果这样的查询的性能满足您的期望,它仍然是工作选项。
hk8txs482#
下面的方法似乎适用于我组合KNN搜索,取多个余弦相似度得分的平均值。注意,这与原始请求略有不同,因为它执行暴力搜索,但您仍然可以通过替换
match_all
位来预先过滤结果。