Elasticsearch:向量搜索 (kNN) 实施指南 - API 版
from elasticsearch import Elasticsearch
# 连接到Elasticsearch
es = Elasticsearch("http://localhost:9200")
# 定义kNN搜索的请求体
def kNN_search_request(query_vector, k):
return {
"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
}
}
}
}
}
# 执行kNN搜索
def perform_knn_search(es, index_name, query_vector, k):
search_request = kNN_search_request(query_vector, k)
results = es.search(index=index_name, body=search_request)
return results
# 示例向量
query_vector = [0.1, 0.2, 0.3]
k = 5
index_name = "my_vector_index"
# 执行搜索
results = perform_knn_search(es, index_name, query_vector, k)
print(results)
这段代码首先导入了Elasticsearch客户端,然后定义了一个函数kNN_search_request
来构建一个kNN搜索的请求体。在这个请求体中,我们使用了Elasticsearch的script\_score查询来计算文档与查询向量的余弦相似度。然后定义了perform_knn_search
函数来执行搜索并返回结果。最后,我们提供了一个示例向量和索引名称来执行搜索,并打印了返回的结果。
评论已关闭