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

Elasticsearch中Keyword类型字段的通配符匹配需求咨询

解决Elasticsearch中Keyword类型字段的指定位置正则匹配问题

首先提个小细节:你原来的查询里字段名写的是tag,但索引映射里定义的是tags,这会直接导致查询不到结果,先把这个小问题修正过来。

接下来针对你需要的类似TERM2-*-TERM3的指定位置匹配(即匹配包含TERM2作为独立分段、后面跟任意内容分段、最后以TERM3结尾的字符串),因为tags是keyword类型(整个字符串作为单个词项),我们可以通过编写精准的正则表达式来实现需求:

正确的查询语句

GET /my_index/_doc/_search
{
  "query": {
    "regexp": {
      "tags": ".*-TERM2-.+-TERM3"
    }
  }
}

正则表达式拆解说明

  • .*:匹配任意数量的任意字符(包括0个),用来覆盖TERM2之前的所有内容(比如你文档里的TERM1-)
  • -TERM2-:精准匹配这个固定字符串,确保TERM2是一个独立的分段(前后都有分隔符-),避免误匹配类似TERM22-这类不符合预期的内容
  • .+:匹配至少一个任意字符,对应你需求中*的部分,保证TERM2和TERM3之间有至少一个有效分段(如果允许中间分段为空,可以改成.*)
  • -TERM3:匹配结尾的-TERM3,确保TERM3是整个字符串的最后一个分段

测试验证

用你提供的两个文档测试这个查询:

  • TERM1-TERM2-TERM4-TERM3:会被成功匹配,完全符合正则结构
  • TERM1-TERM2-TERM5-TERM3:同样会被命中,满足匹配条件

可选优化:更严格的分段匹配

如果你希望明确匹配四段结构(第二个分段是TERM2、第四个是TERM3),可以用更精确的正则来限制每个分段的格式:

GET /my_index/_doc/_search
{
  "query": {
    "regexp": {
      "tags": "[^-]+-TERM2-[^-]+-TERM3"
    }
  }
}

这里[^-]+表示匹配不包含-的任意字符序列,确保每个分段都是独立的,不会出现跨分段的模糊匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:33:17