ElasticSearch 中没有映射的带有斜线的值的术语过滤器

Term Filter for Value with Slash without Mapping in ElasticSearch

我有一个要求,我不能向 ElasticSearch 索引添加任何映射,因为所有索引都是动态的,并且是在 运行 时间创建的,并且都有不同的字段(只有 5 个公共字段)。因此,我在为 URL(例如 http://www.domain.com/a/b)或 mimetype(例如 image/jpeg)使用术语过滤器时遇到问题。在不添加映射的情况下绕过斜杠或其他特殊字符的最佳方法是什么?

您可以将模板添加到您的 elasticsearch 索引

在那里您可以指定您的索引,映射将在 运行 时间为您的所有数据自动创建。

根据@tcarmet 的回答,这就是我最终使用的模板。

{
    "enable_raw_string": {
        "order": 0,
        "template": "*",
        "settings": {},
        "mappings": {
          "_default_": {
            "dynamic_templates": [
              {
                "strings": {
                  "mapping": {
                    "type": "string",
                    "fields": {
                      "raw": {
                        "ignore_above": 256,
                        "index": "not_analyzed",
                        "type": "string"
                      }
                    }
                  },
                  "match_mapping_type": "string"
                }
              }
            ]
          }
        },
        "aliases": {}
      }
}

然后我可以只针对 x.raw 而不是 x 进行过滤。