Elasticsearch:简化 KNN 搜索
warning:
这篇文章距离上次修改已过181天,其中的内容可能已经有所变动。
from elasticsearch import Elasticsearch
# 连接到Elasticsearch
es = Elasticsearch("http://localhost:9200")
# 定义KNN搜索的函数
def knn_search(index_name, query_vector, k=1):
body = {
"from": 0,
"size": k,
"query": {
"script_score": {
"query": {
"match_all": {}
},
"script": {
"source": "cosineSimilarity(params.query_vector, doc['vector_field']) + 1.0",
"params": {
"query_vector": query_vector
}
}
}
}
}
# 执行搜索
results = es.search(index=index_name, body=body)
return results['hits']['hits']
# 示例向量
query_vector = [0.1, 0.2, 0.3]
# 示例索引名
index_name = "my_knn_index"
# 执行KNN搜索
knn_hits = knn_search(index_name, query_vector, k=3)
# 输出结果
for hit in knn_hits:
print(hit)
这段代码展示了如何在Elasticsearch中使用Python客户端执行简化的KNN搜索。它定义了一个knn_search
函数,该函数接受索引名、查询向量和K值作为参数,并返回最近邻的文档列表。这里使用了余弦相似度来评估文档与查询向量之间的相似度,并通过Elasticsearch的脚本查询功能进行了计算。
评论已关闭