Elasticsearch字段名称区分大小写

时间:2014-01-26 21:29:03

标签: elasticsearch case-sensitive

我正在寻找有关ElasticSearch中字段名称区分大小写的建议和最佳实践,以及是否存在使字段名称不区分大小写的全局配置。 此外,如果可以禁用ES添加不同的字段(如果映射中不存在)。

这里有一个例子来说明这一点;

1-使用小写

创建一个字段“name”的映射
curl -XPUT http://localhost:9200/twitter/user/_mapping -d '{ 
        "user" : { 
            "properties" : { 
            "name" : { "type" : "string" } 
        } 
    } 
}' 

2-使用名称字段(NAME)的不同大小写索引文档

curl -POST http://localhost:9200/twitter/user/1 -d '{ 
   "NAME" :  "Yasir" 
}'

在Elasticsearch日志中,我注意到映射已更新。

[2014-01-26 20:58:19,074][INFO ][cluster.metadata         ] [Mad-Dog] [twitter] update_mapping [user] (dynamic)

3-检查映射,你会注意到一个新字段已添加“NAME”

curl -XGET http://localhost:9200/twitter/user/_mapping?pretty

{
  "user" : {
    "properties" : {
      "NAME" : {
        "type" : "string"
      },
      "name" : {
        "type" : "string"
      }
    }
  }
}

由于 亚西尔

1 个答案:

答案 0 :(得分:3)

您可以在配置中取消自动创建映射,如提到的in the documentation

只需将action.auto_create_index设为false

字段名称不能区分大小写,因为命名属于您。我建议只使用小写。但是,您可以搜索不区分大小写的值。

修改

就像@ javanna的评论所说,这不会禁用dynamic mapping。 因此,您必须将index.mapper.dynamic设置为false

因此,将忽略未声明的字段。 如果您希望elasticsearch引发错误,则必须将其设置为strict