使用 ElasticSearch 作为知识库,存储向量及相似性搜索
from datetime import datetime
from elasticsearch import Elasticsearch
# 连接到ElasticSearch
es = Elasticsearch("http://localhost:9200")
# 向ElasticSearch中添加文档
def add_document(es, index_name, doc_id, vector, timestamp):
doc = {
"id": doc_id,
"vector": vector,
"timestamp": timestamp,
}
es.index(index=index_name, id=doc_id, document=doc)
# 获取最接近目标向量的文档
def get_nearest_neighbor(es, index_name, target_vector, k):
query = {
"size": k,
"query": {
"script_score": {
"query": {
"match_all": {}
},
"script": {
"source": "cosineSimilarity(params.query_vector, 'vector') + 1.0",
"params": {
"query_vector": target_vector
}
}
}
}
}
results = es.search(index=index_name, body=query)
return results['hits']['hits']
# 示例使用
index_name = "knowledge_base"
doc_id = "123"
vector = [0.1, 0.2, 0.3, 0.4] # 向量是一个实数列表
timestamp = datetime.now()
add_document(es, index_name, doc_id, vector, timestamp)
target_vector = [0.1, 0.2, 0.3, 0.4]
k = 5
nearest_neighbors = get_nearest_neighbor(es, index_name, target_vector, k)
print(nearest_neighbors)
这段代码展示了如何使用ElasticSearch存储向量数据并进行相似性搜索。首先,我们连接到ElasticSearch服务器。然后,我们定义了一个函数add_document
来添加文档到知识库中。最后,我们定义了一个函数get_nearest_neighbor
来找出与目标向量最相似的K个文档。在实际应用中,向量数据可能来自自然语言处理或图像识别的结果。
评论已关闭