我想将文档 vector 存储在Elasticsearch索引中,以计算文档相似度。我正在为Elasticsearch 7.8.0使用Python客户端。
我有一个(虚拟)Elasticsearch索引,具有以下映射:
mapping = {
"mappings": {
"properties": {
"title_vector":{
"type": "dense_vector",
"dims": 3
}
}
}
}
es.indices.create(index="test_vector", body=mapping)
我用以下方式存储了一堆 vector :vectors = [[1,2,3],[2,2,2],[1,2,2],[2,2,2],[4,5,6],[1,1,1]]
for i, v in enumerate(vectors):
doc = {"title_vector": v}
es.create("test_vector", id=i, body=doc)
根据documentation,我要获取最相似文档的查询应如下所示:doc = {
"query": {
"script_score": {
"query": {
"match_all": {}
},
"script": {
"source": "cosineSimilarity(params.queryVector, 'title_vector') + 1.0",
"params": {
"queryVector": [1,1,1]
}
}
}
}}
es.search("test_vector", body=doc)
但是我越来越TypeError: search() got multiple values for argument 'body'
它看起来更像是Python错误而不是Elastic错误。但是我无法真正找到错误的原因以及如何解决查询的不同结构。提前致谢!
编辑:添加了Elasticsearch版本
最佳答案
您是正确的,这是python错误。所以下面是如何根据此link定义es.search
search(body=None, index=None, params=None, headers=None)
如您所见,第一个参数是body
。请注意,您拥有
es.search
,但尚未在第一个参数中指定key
,即body, index, params, headers
。结果,python根据上述方法声明将其解释为body
的值。只需在第一个参数中添加
index="test_vector"
而不是"test_vector"
即可。es.search(index="test_vector", body=doc)
希望能帮助到你!
关于python - Elasticsearch DocumentSimilarity density_vector为参数 'body'获得了多个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62516384/