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

ElasticSearch 7.0多精确hostname查询及通配符匹配问题

Elasticsearch 7.0 多值精确匹配与通配符查询解决方案

一、多值精确匹配多个完整hostname

你尝试的match查询无效,核心原因是server.hostname.keyword是不分词的keyword类型字段,但match查询会默认对查询字符串分词,把"server1-windows.loc2.uk server1-linux.loc1.uk"拆成两个独立词,而keyword字段存储的是完整字符串,自然无法匹配。

正确做法是使用terms查询,它支持传入值数组,直接匹配keyword字段的完整值:

{
  "query": {
    "terms": {
      "server.hostname.keyword": [
        "server1-windows.loc2.uk",
        "server1-linux.loc1.uk"
      ]
    }
  }
}

也可以用bool查询的should子句组合多个精确匹配(效果与terms一致):

{
  "query": {
    "bool": {
      "should": [
        {
          "match": {
            "server.hostname.keyword": "server1-windows.loc2.uk"
          }
        },
        {
          "match": {
            "server.hostname.keyword": "server1-linux.loc1.uk"
          }
        }
      ],
      "minimum_should_match": 1
    }
  }
}

二、通配符匹配任意loc的hostname

你的通配符查询无结果,问题出在两点:

  1. match查询不支持通配符(*、?)语法,这类模糊匹配需要用专门的wildcard查询;
  2. 通配符必须作用在keyword字段上——text字段会把hostname分词成多个独立词(比如server1、windows、loc2),无法匹配完整的字符串结构。

正确的wildcard查询写法如下,可匹配所有以server1-windows.开头、以.uk结尾的hostname:

{
  "query": {
    "wildcard": {
      "server.hostname.keyword": "server1-windows.*.uk"
    }
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 23:40:22