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

如何在ElasticSearch索引中获取匹配通配符的词条列表

获取Elasticsearch中匹配通配符的词条列表

要从Elasticsearch索引中获取匹配指定通配符模式(比如Cont*ct)且实际存在于文档中的词条列表,主要有以下两种实用方法:

方法一:使用terms聚合配合通配符查询

这种方法通过先过滤匹配文档,再聚合去重得到唯一词条,是最常用的方式。

请求示例:

GET /你的索引名/_search
{
  "size": 0, // 无需返回原始文档,只保留聚合结果
  "query": {
    "wildcard": {
      "目标字段名": {
        "value": "Cont*ct",
        "case_insensitive": true // 可选参数,开启忽略大小写匹配
      }
    }
  },
  "aggs": {
    "匹配词条集合": {
      "terms": {
        "field": "目标字段名.keyword", // 必须用keyword子字段,确保聚合原始完整词条
        "size": 10000 // 调整为你需要的最大返回数量,默认仅返回10个
      }
    }
  }
}

关键注意点:

  • 必须使用目标字段名.keyword:text类型字段会被分词,直接聚合text字段会得到分词后的碎片,而非原始完整词条;如果你的字段没有keyword子字段,需要先修改索引映射添加该子字段。
  • size参数:如果匹配的词条数量较多,要设置足够大的数值,避免截断结果。
  • 性能优化:如果你的通配符是前缀匹配(比如Cont*),可以用prefix查询替代wildcard,效率会更高。

方法二:使用折叠查询(collapse)获取去重词条

如果需要同时查看词条关联的其他文档字段,或者不想用聚合,可通过折叠查询实现去重:

请求示例:

GET /你的索引名/_search
{
  "query": {
    "wildcard": {
      "目标字段名": {
        "value": "Cont*ct",
        "case_insensitive": true
      }
    }
  },
  "collapse": {
    "field": "目标字段名.keyword"
  },
  "_source": false, // 关闭原始文档内容返回
  "fields": ["目标字段名.keyword"], // 仅返回目标字段的词条值
  "size": 10000
}

这种方法会返回每个唯一词条对应的一条文档,你可以从fields字段中提取匹配的词条。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 14:01:02