在elasticsearch 1.7中的索引下的所有(未来)类型中将字段设置为not_analysed

时间:2016-01-12 16:25:50

标签: elasticsearch mapping

我有一个包含多种类型的索引,以及新类型'创造不受我的控制。我知道数据结构非常可靠,但我事先并不知道类型的名称。

我想将一些字段设置为not_analysed,而有些字段应该进行分析。有没有办法实现这个目标?

2 个答案:

答案 0 :(得分:2)

我还要添加Val的优秀答案,您可能希望将这些动态模板添加到索引的_default_映射中,因为您提到您事先并不知道这些类型。例如:

PUT /my_index/_mapping/_default_
{
  "dynamic_templates": [
    {
      "analyzed": {
        "match_mapping_type": "string",
        "match": "*_text",
        "mapping": {
          "type": "string"
        }
      }
    },
    {
      "not_analyzed": {
        "match_mapping_type": "string",
        "match": "*_key",
        "mapping": {
          "type": "string",
          "index": "not_analyzed"
        }
      }
    }
  ]
}

有了这个,您可以向索引添加任意类型,并将文档中的任何字段添加到以#34; _text"结尾的新类型中。将被分析。任何以" _key"结尾的字段;不会被分析。您可以阅读有关default mapping in the docs

的更多信息

答案 1 :(得分:1)

Dynamic mappings是要走的路。由于您提到analyzed vs not_analyzed,我估计您在谈论string字段。

我们的想法是更新索引和映射,以便为字符串字段包含动态模板:

PUT my_index
{
  "mappings": {
    "my_type": {
      "dynamic_templates": [     <--- include this section in your existing mapping
        {
          "analyzed": {
            "match_mapping_type": "string",
            "match":   "field1",
            "mapping": {
              "type": "string"
            }
          }
        },
        {
          "not_analyzed": {
            "match_mapping_type": "string",
            "match":   "field2",
            "mapping": {
              "type": "string",
              "index": "not_analyzed"
            }
          }
        }
      ]
    }
  }
}

另一种方法是将每个新字符串字段设为analyzednot_analyzed,这样您就不必枚举所有字段,只需使用:

PUT my_index
{
  "mappings": {
    "my_type": {
      "dynamic_templates": [     <--- include this section in your existing mapping
       {
         "strings": {
           "match_mapping_type": "string",   <-- match all string fields
           "mapping": {
             "type": "string",
             "fields": {
               "raw": {
                 "type":  "string",
                 "index": "not_analyzed",
                 "ignore_above": 256
               }
             }
           }
         }
       }
      ]
    }
  }
}