使用Python操作Elasticsearch查询非None值session文档报错求助
问题解决:Elasticsearch查询session字段不为"None"报错
错误原因分析
- 第一种查询的问题:请求体结构错误。Elasticsearch的查询请求需要将
bool查询包裹在顶层的query字段中,而你直接将bool作为请求体的顶层键,导致解析失败。 - 第二种查询的问题:
must_not内部缺少查询类型(如term/match),直接写{"returncode": "None"}不符合ES的查询DSL规范,无法被正确解析。
正确查询写法
写法一(适用于Elasticsearch-py 7.x+版本,推荐使用query参数)
resp = es.search( index="test-sql-index", query={ "bool": { "must_not": { "term": { "session": "None" } } } }, size=1000 )
写法二(适用于旧版客户端,使用body参数)
query = { "query": { "bool": { "must_not": { "term": { "session": "None" } } } } } resp = es.search(index="test-sql-index", body=query, size=1000)
额外注意事项
如果session字段是text类型,直接用term查询可能无法匹配到"None"(因为text字段会被分词处理),此时可以改用match查询,或者使用该字段的keyword子字段(若存在):
# 使用keyword子字段查询 "term": { "session.keyword": "None" }
内容的提问来源于stack exchange,提问作者Dun King
相关产品推荐
相关产品推荐

