1

我拼命地尝试在elasticsearch上执行一个简单的搜索操作,但是几个小时后就失败了。这是我的代码:

res = es.search(index="people", doc_type="test", body={"query":{"match":{"name": "john"}}})

我在互联网上看到过很多次,但我总是收到一个错误,并且不知道我的代码片段有什么问题。

Traceback (most recent call last):
  File "./es_request.py", line 14, in <module>
    res = es.search(index="people", doc_type="test", body={"query":{"match":{"name": "john"}}})
  File "/usr/local/lib/python3.4/dist-packages/pyelasticsearch/client.py", line 93, in decorate
    return func(*args, query_params=query_params, **kwargs)
TypeError: search() missing 1 required positional argument: 'query'

我必须在哪里编写所需的“查询”?我正在尝试搜索姓名和姓氏。

4

1 回答 1

2

库中的search方法pyelasticsearch(您正在使用)调用查询参数query,而不是body

 query = {"query": {"match": {"name": "john"}}}
 es.search(index="people", doc_type="test", query=query)
 es.search(query, index="people", doc_type="test")  # you can also do this

我认为您的意思是使用官方elasticsearch库,您的代码使用它可以很好地工作(为了增加更多的混乱,它的文档位于elasticsearch-py.readthedocs.io)。

两个库都导出相同的模块名称,因此当您使用错误的模块名称时,有时会发生一些事情这不是巧合,请参阅这篇文章了解它们的历史和差异。安装官方客户端很简单:

pip uninstall pyelasticsearch
pip install elasticsearch
于 2017-12-09T18:43:09.760 回答