改变动态映射Elasticsearch 5.3

时间:2017-04-04 18:28:36

标签: java elasticsearch mapping

我的应用程序中的许多字符串字段需要在elasticsearch 5.3中动态映射。所有以id或id结尾的新字段都应该通过弹性自动映射和索引:

 "_my_propertyId": 
 {
    "type": "keyword"
 }

我为这个

定义了索引/类型的动态模板
  "mappings": {
     "my_type": {
        "dynamic_templates": [
           {
              "id_as_keywords": {
                 "match": "*id|*Id|*Ids",
                 "match_mapping_type": "string",
                 "mapping": {
                    "type": "keyword"
                 }
              }
           }
        ]

然而,弹性仍然会产生如下属性:

       "_someIds": {
          "type": "text",
          "fields": {
             "keyword": {
                "type": "keyword",
                "ignore_above": 256
             }
          }
       }

我不确定我做错了什么或为什么这是动态字符串字段的默认映射。但是,我需要能够动态映射以id或id结尾的所有属性作为关键字,而不使用ignore_above和完全索引,以便我可以使用searchAPI搜索它们。想法?为什么这是现在的默认字符串映射(我理解关键字/文本的介绍,但仍然)?

更新

在这些默认设置上找到了一篇很好的文章:

Strings

1 个答案:

答案 0 :(得分:1)

您可以使用match_pattern参数来更好地控制match参数。在下面找到更新的动态模板:

"dynamic_templates": [
          {
            "id_as_keywords": {
              "match_mapping_type": "string",
              "match_pattern": "regex",
              "match": ".*(id|Id|Ids)",
              "mapping": {
                "type": "keyword"
              }
            }
          }
        ]

您可以详细了解match_pattern here