You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Elasticsearch DSL查询中实现not filter反向过滤功能

实现方法

你可以直接使用Elasticsearch Bool查询的must_not子句实现反向过滤,它和filter同属过滤上下文,不会影响文档相关性得分,仅用于排除符合条件的文档。

修改后的完整DSL(Python字典格式):

{'from': 0, 'size': 10, 'aggs': 
     {'products': {'terms': {'field': 'softwares.name.keyword', 'order': {'_key': 'desc'}}}, 
      'color': {'terms': {'field': 'white.name.keyword', 'order': {'_key': 'desc'}}},
      'types': {'terms': {'field': 'mercedez.name.keyword', 'order': {'_key': 'desc'}}}},
     'query': {'bool': {'must': {'match_all': {}}, 
     'must_not': [{'term': {'name.keyword': 'Germany'}}]}}}

改动说明

  • 仅将原filter数组内的正向term查询,移动到bool查询下的must_not数组中即可,原有分页、聚合逻辑完全不需要调整
  • 如果你同时还有其他需要保留的正向过滤条件,filter和must_not可以共存,示例如下:
# 同时正向过滤status为1,反向排除name为Germany的示例
{'from': 0, 'size': 10, 'aggs': 
     {'products': {'terms': {'field': 'softwares.name.keyword', 'order': {'_key': 'desc'}}}, 
      'color': {'terms': {'field': 'white.name.keyword', 'order': {'_key': 'desc'}}},
      'types': {'terms': {'field': 'mercedez.name.keyword', 'order': {'_key': 'desc'}}}},
     'query': {'bool': {'must': {'match_all': {}}, 
     'filter': [{'term': {'status': 1}}],
     'must_not': [{'term': {'name.keyword': 'Germany'}}]}}}

内容的提问来源于stack exchange,提问作者sim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 08:36:03