2014-01-26 250 views
4

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

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

1-小写

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" 
     } 
    } 
    } 
} 

感谢 亚西尔

回答

3

可确定停用的自动创建的映射配置,如提到in the documentation

只需将action.auto_create_index设置为false即可。

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

编辑:

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

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

+2

当您在非现有字段下为第一个文档建立索引时,您建议禁用创建新索引。如果你想禁用动态映射,以便映射不是自动创建的(但你必须预先定义模式),你可以将'index.mapper.dynamic'设置为'false'。结果,未声明的字段将被忽略。如果你想弹性搜索抛出一个错误,把它设置为'strict'。 http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/mapping-dynamic-mapping.html – javanna

+0

Thx,不知道! –

+0

不客气,也许你可以相应地修改你的答案,因为它不完全正确? ;) – javanna

相关问题