Python操作Elasticsearch:添加size字段报错及正确设置方法咨询
Elasticsearch Python客户端查询错误及size参数设置方案
问题背景
使用Python客户端查询Elasticsearch索引时,默认仅返回前10条结果,想要获取前200条,尝试修改查询格式后触发解析错误。
当前使用的查询代码:
result=es.search(index="sample_full",query=new_dep_query)
正常工作的new_dep_query格式:
{ "bool": { "must": [ { "match": { "field1": "no" } } ] } }
修改后报错的new_dep_query格式:
{ "query": { "bool": { "must": [ { "match": { "field1": "no" } } ] } } }
报错信息:
Traceback (most recent call last): File "/Users/xxxx/Desktop/project/integ1/sample_finder.py", line 76, in <module> result=es.search(index="sample_full",query=new_dep_query) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/homebrew/lib/python3.11/site-packages/elasticsearch/_sync/client/utils.py", line 414, in wrapped return api(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^ File "/opt/homebrew/lib/python3.11/site-packages/elasticsearch/_sync/client/__init__.py", line 3859, in search return self.perform_request( # type: ignore[return-value] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/homebrew/lib/python3.11/site-packages/elasticsearch/_sync/client/_base.py", line 320, in perform_request raise HTTP_EXCEPTIONS.get(meta.status, ApiError)( elasticsearch.BadRequestError: BadRequestError(400, 'parsing_exception', 'unknown query [query]')
错误原因及解决方法
1. 报错原因
你在new_dep_query中额外嵌套了一层"query"键,但Python Elasticsearch客户端的search方法里,query参数本身就对应Elasticsearch DSL的query部分,不需要在查询体里重复写"query"顶级键,因此引发了解析异常。
2. 添加size参数的正确方式
要获取前200条结果,无需修改原有查询结构,直接通过以下两种方式设置size参数即可:
方式一:直接在search方法中传入size参数
保留原有的new_dep_query格式,在es.search()方法中新增size参数:
result=es.search(index="sample_full", query=new_dep_query, size=200)
方式二:通过完整请求体指定size
若习惯用body参数传递完整请求结构,可按Elasticsearch原生DSL格式编写,同时包含query和size顶级键:
result=es.search(index="sample_full", body={ "query": { "bool": { "must": [ { "match": { "field1": "no" } } ] } }, "size": 200 })
内容的提问来源于stack exchange,提问作者SpamsterHamster
相关产品推荐
相关产品推荐

