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

如何在Elasticsearch中使用通配符查询任意字段?

解决方案

你可以通过两种方式实现多字段的通配符查询,结合原有的精确搜索需求,具体如下:

方法一:使用multi_match的wildcard类型(简洁写法)

利用multi_match指定type: wildcard,一次性在多个keyword字段上执行通配符匹配,和原有的精确查询组合:

GET /_search
{
  "query": {
    "bool": {
      "must": [
        { "multi_match": { "query": "biden","fields": [ "*.keyword"] } },
        { 
          "multi_match": {
            "query": "123456*",
            "fields": ["email.keyword", "phone.keyword", "name.keyword"],
            "type": "wildcard"
          }
        }
      ]
    }
  }
}

方法二:使用bool.should包含多个wildcard查询(灵活写法)

如果需要给不同字段设置不同的通配符规则,或者更明确地控制每个字段的查询逻辑,可以在bool.must里嵌套一个bool.should,将多个wildcard查询放入其中(默认逻辑是任意一个匹配即可,如果需要所有字段都匹配,就把should换成must):

GET /_search
{
  "query": {
    "bool": {
      "must": [
        { "multi_match": { "query": "biden","fields": [ "*.keyword"] } },
        {
          "bool": {
            "should": [
              { "wildcard": { "email.keyword": "123456*" } },
              { "wildcard": { "phone.keyword": "123456*" } },
              { "wildcard": { "name.keyword": "123456*" } }
            ],
            "minimum_should_match": 1 // 确保至少匹配其中一个字段,可根据需求调整
          }
        }
      ]
    }
  }
}

注意事项

  • 始终使用*.keyword字段执行通配符查询,避免对分词后的text字段执行通配符,否则会出现预期外的匹配结果,且性能较差。
  • 通配符查询(尤其是以*或?开头的)会影响查询性能,如果数据量较大,建议提前通过索引设计优化(比如使用前缀索引)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 12:17:03