Имя поля 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
.