Elasticsearch Python API 在一个简单的查询中得到 "search() missing 1 required positional argument"

Elasticsearch Python API results in "search() missing 1 required positional argument" on a simple query

我正拼命尝试在 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'

我必须在哪里写所需的'query'?我正在尝试搜索名字和姓氏。

pyelasticsearch 库(您正在使用)中的 search 方法调用查询参数 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)。

两个库都导出相同的模块名称,因此当您使用错误的模块时,有时 某种 可以正常工作。这不是巧合,see this article关于他们的历史和分歧。安装官方客户端很简单:

pip uninstall pyelasticsearch
pip install elasticsearch