python - Elasticsearch DocumentSimilarity density_vector为参数 'body'获得了多个值

标签 python elasticsearch

我想将文档 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/

相关文章:

python - 无法在装饰器中捕获 pytest 的结果

python - 怎么说......当字段是数字时匹配......在mongodb中?

python - 安装后Tensorflow `Syntax Error: pywrap_tensorflow`

python - 在自定义 Django 日志记录处理程序中检索请求对象

python - Pygame 和 Pymunk 程序在后台屏幕上加载一点,然后关闭

elasticsearch - 如何提取字段的一部分并将其存储到logstash过滤器中的另一个字段中?

date - Elasticsearch 或 term 与日期范围相结合

elasticsearch - 在 Elasticsearch 中自动合并/汇总数据

c# - Elasticsearch 7和Nest 7-检索结果时,我收到键值对列表或空对象列表

sql-server - 带有jdbc的logstash获取PsychParser错误