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

Elasticsearch同一字段多通配符条件查询的等价实现问题

解决Elasticsearch多条件全匹配查询问题

你原来的查询用了should子句,这会导致只要匹配三个条件里的任意一个就返回结果,所以才出现匹配过多的情况。要实现三个参数全部匹配才返回的要求,只需要把should替换成must,或者直接将三个wildcard条件放到外层的must数组中即可。

正确的查询语句

{
  "query": {
    "bool": {
      "must": [
        {
          "wildcard": {
            "contact.fullname_phone": "john*"
          }
        },
        {
          "wildcard": {
            "contact.fullname_phone": "do*"
          }
        },
        {
          "wildcard": {
            "contact.fullname_phone": "123456*"
          }
        }
      ]
    }
  }
}

关于lower的处理

对应SQL里的lower(fullname_phone),如果你的contact.fullname_phone字段存储的是混合大小写内容,建议给字段设置小写标准化器(normalizer),确保查询时自动统一大小写:

{
  "mappings": {
    "properties": {
      "contact.fullname_phone": {
        "type": "keyword",
        "normalizer": "lowercase"
      }
    }
  }
}

设置后,查询时无需手动转小写,Elasticsearch会自动将字段值和查询条件统一为小写进行匹配,完全等价于SQL中的lower处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 02:19:51