Elasticsearch 7.0:过滤 must_not 查询错误
Posted
技术标签:
【中文标题】Elasticsearch 7.0:过滤 must_not 查询错误【英文标题】:Elasticsearch 7.0: filter must_not query error 【发布时间】:2019-04-26 14:31:35 【问题描述】:我在 Windows 8 机器上使用 elasticsearch-py 7.0 和 elasticsearch server 7.0。
我有这个问题:
'size': 10000,
'query':
'bool': 'must_not': 'filter': ['term': 'status': 'ok']
映射是这样的:
"mappings":
"properties":
"name": "type": "text",
"status": "type": "keyword",
"date": "type":"date"
它遵循docs for boolean query 中指定的规则,但它不起作用,因为它会引发语法错误:
RequestError: RequestError(400, 'parsing_exception', '没有为 [filter] 注册 [query]')
但是,如果我删除“must_not”元素,它会起作用:
'size': 10000,
'query':
'bool': 'filter': ['term': 'status': 'ok']
我在这里做错了什么?
【问题讨论】:
【参考方案1】:
filter
子句(查询)必须出现在匹配的文档中。然而不像 必须忽略查询的分数。过滤子句是 在过滤器上下文中执行,这意味着评分被忽略并且 子句被考虑用于缓存。
must_not
子句(查询)不得出现在匹配的文档中。条款 在过滤器上下文中执行,这意味着评分被忽略并且 子句被考虑用于缓存。因为得分被忽略了,一个 返回所有文档的 0 分。
filter
和 must_not
都是 bool
查询的子句,工作方式相同。要使用must_not
,则需要删除filter
:
'size': 10000,
'query':
'bool':
'must_not':
'term':
'status': 'ok'
【讨论】:
以上是关于Elasticsearch 7.0:过滤 must_not 查询错误的主要内容,如果未能解决你的问题,请参考以下文章
ElasticSearch Bool Query JAVA API
Elasticsearch (DSL 布尔查询 过滤器 排序 高亮显示