【问题标题】:Elasticsearch field name case sensitiveElasticsearch 字段名称区分大小写
【发布时间】:2014-02-17 14:51:19
【问题描述】:

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

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

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

谢谢 亚西尔

【问题讨论】:

    标签: elasticsearch case-sensitive


    【解决方案1】:

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

    只需将action.auto_create_index 设置为false

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

    编辑:

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

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

    【讨论】:

    • 当您索引非现有字段下的第一个文档时,您的建议禁用了新索引的创建。如果您想禁用动态映射,以便不会自动创建映射(但您必须预先定义架构),您可以将index.mapper.dynamic 设置为false。因此,未声明的字段将被忽略。如果您希望 elasticsearch 抛出错误,请将其设置为 strictelasticsearch.org/guide/en/elasticsearch/reference/current/…
    • 谢谢,不知道!
    • 不客气,也许您可​​以相应地改写您的答案,因为它不完全正确? ;)
    猜你喜欢
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 2016-11-24
    • 2016-11-12
    • 1970-01-01
    • 1970-01-01
    • 2017-04-25
    • 1970-01-01
    相关资源
    最近更新 更多