Elasticsearch字段名称区分大小写

Yas*_*sir 6 case-sensitive elasticsearch

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

这是一个例子来说明这一点;

1-用小写的一个字段"name"创建映射

curl -XPUT http://localhost:9200/twitter/user/_mapping -d '{ 
        "user" : { 
            "properties" : { 
            "name" : { "type" : "string" } 
        } 
    } 
}' 
Run Code Online (Sandbox Code Playgroud)

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

curl -POST http://localhost:9200/twitter/user/1 -d '{ 
   "NAME" :  "Yasir" 
}'
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

{
  "user" : {
    "properties" : {
      "NAME" : {
        "type" : "string"
      },
      "name" : {
        "type" : "string"
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

谢谢Yasir

Mar*_*ler 4

您可以在配置中禁用自动创建映射,如文档中所述。

只需设置action.auto_create_indexfalse.

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

编辑:

就像 @javanna 的评论所说,这不会禁用动态映射。因此,您必须设置index.mapper.dynamicfalse

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

  • 当您在不存在的字段下索引第一个文档时,您建议禁用创建新索引。如果您想禁用动态映射,以便不会自动创建映射(但您必须预先定义架构),您可以将“index.mapper.dynamic”设置为“false”。因此,未声明的字段将被忽略。如果您希望 elasticsearch 抛出错误,请将其设置为“strict”。http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/mapping-dynamic-mapping.html (2认同)