Имя поля Elasticsearch с учетом регистра

Я ищу советы и рекомендации по чувствительности к регистру имен полей в ElasticSearch и есть ли глобальная конфигурация, чтобы сделать имена полей нечувствительными к регистру. Кроме того, если можно отключить 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-Проверьте отображение, вы заметите, что новое поле было добавлено "имя"

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

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

спасибо Ясир!--5-->

1 ответов


вы можете отменить автоматическое создание отображения в конфигурациях, как указано документации.

просто набор action.auto_create_index до false.

имена полей не могут быть нечувствительными к регистру, так как имя принадлежит вам. Я бы предложил использовать только нижний регистр для этого. Однако вы можете искать в своих значениях без учета регистра.

EDIT:

как говорится в комментарии @javanna, это не отключает динамическое отображение. Поэтому вы должны установить index.mapper.dynamic to false.

в результате, не объявленные поля будут проигнорированы. Если вы хотите, чтобы elasticsearch выдавал ошибку, вы должны установить ее в strict.