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

使用AWS OpenSearch/ElasticSearch Search API如何排除指定文档?

在OpenSearch/ElasticSearch中搜索时排除特定文档的方法

完全不需要先搜索再手动过滤,直接通过bool查询就能在搜索阶段完成排除操作,具体实现方式如下:

方法一:使用terms精确排除(推荐)

如果你的name字段是text类型,通常会自动生成对应的keyword子字段(用于精确匹配完整字符串),可以用terms在must_not中指定要排除的电影名称:

GET /movies/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "name": "Night"
          }
        }
      ],
      "must_not": [
        {
          "terms": {
            "name.keyword": ["Boogie Nights", "Aladdin"]
          }
        }
      ]
    }
  }
}

这里的逻辑很清晰:

  • must中的match保证只返回名称包含“Night”的电影
  • must_not中的terms直接排除名称精确匹配“Boogie Nights”和“Aladdin”的文档

方法二:使用match_phrase精确排除

如果你的索引没有name.keyword子字段,也可以用match_phrase来精确匹配完整电影名称,逐个排除:

GET /movies/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "name": "Night"
          }
        }
      ],
      "must_not": [
        {
          "match_phrase": {
            "name": "Boogie Nights"
          }
        },
        {
          "match_phrase": {
            "name": "Aladdin"
          }
        }
      ]
    }
  }
}

以上两种方式都会让ElasticSearch/OpenSearch在查询阶段直接过滤掉不需要的文档,返回的结果就是已经排除指定电影后的匹配结果,无需后续手动处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 17:06:00