名称中带点 (.) 的弹性过滤器

Elastic filter with dot (.) in name

我对 ELK 很陌生,似乎从复杂的问题开始;-) 我有如下所示的元素:

{
    "_index": "asd01",
    "_type": "doc",
    "_id": "...",
    "_score": 0,
    "_source": {
      "@version": "1",
      "my-key": "hello.world.to.everyone",
      "@timestamp": "2018-02-05T13:45:00.000Z",
      "msg": "myval1"
    }
  },
  {
    "_index": "asd01",
    "_type": "doc",
    "_id": "...",
    "_score": 0,
    "_source": {
      "@version": "1",
      "my-key": "helloworld.from.someone",
      "@timestamp": "2018-02-05T13:44:59.000Z",
      "msg": "myval2"
    }

我想过滤以 "hello." 开头的我的键,并想忽略以 "helloworld." 开头的元素。点似乎被解释为通配符,各种转义似乎都不起作用。

使用过滤器,因为我希望能够在 Kibana 和 API 中直接使用相同的表达式。

有人可以告诉我如何让它与 Elasticsearch 6.1.1 一起工作吗?

它没有被用作通配符,它​​只是被默认分析器(标准分析器)删除了。如果您不指定映射,elasticsearch 将为您创建一个。对于字符串字段,它将创建一个多值字段,默认值为文本(使用默认分析器 - 标准)和带有关键字分析器的关键字字段。如果你不想要这种行为,你必须在索引创建期间明确指定映射,或者更新它并重新索引数据

试试这个

GET asd01/_search
{
  "query": {
    "wildcard": {
      "my-key.keyword": {
        "value": "hello.*"
      }
    }
  }
}