Отключение анализа поля по умолчанию в режиме упругого поиска
Можно ли выборочно включить индексирование полей упругого поиска для типа?
Через настройки отображения для определенного индекса можно установить свойство
{ "index": "not_analyzed" }
Для определенного поля. Поскольку в моем документе слишком много полей и, вероятно, изменит структуру в будущем, мне понадобится сопоставление, где поля не анализируются по умолчанию, если не указано иначе.
Возможно ли это?
Ответы
Ответ 1
Да - посмотрите динамические шаблоны
Попробуйте следующее:
PUT /my_index
{
"mappings": {
"my_type": {
"dynamic_templates": [
{ "notanalyzed": {
"match": "*",
"match_mapping_type": "string",
"mapping": {
"type": "string",
"index": "not_analyzed"
}
}
}
]
}
}
}
Динамический шаблон предназначен для новых полей, которые не охвачены вашим сопоставлением - из документов:
С помощью dynamic_templates вы можете полностью контролировать отображение который генерируется для вновь обнаруженных полей.
Вы также можете изменять отображение в соответствии с именем поля, например. используйте "match": "*_data"
, чтобы иметь другой набор сопоставлений для имен полей, заканчивающихся на "_data".
Ответ 2
Из строкового типа elasticsearch 5.x отключен. Вместо этого elasticsearch представил два типа текста и ключевое слово. Прочитайте этот блог о причинах переноса данных https://www.elastic.co/blog/strings-are-dead-long-live-strings
Итак, вместо добавления шаблона для отключения анализатора вы можете просто использовать поле field.keyword для точного поиска.
например Если имя поля fullName, и у вас есть записи
- fullName: "John Doe"
- FULLNAME: "Джон"
then, fullName: "John" вернет два результата, а fullName.keyword: "John" вернет одну запись.
На всякий случай вы все же хотите отключить текстовое поле, вы можете использовать ниже динамический шаблон,
PUT _template/disable_all_analyzer
{
"template": "*",
"mappings": {
"_default_": {
"dynamic_templates": [
{ "notanalyzed": {
"match": "*",
"match_mapping_type": "string",
"mapping": {
"type": "keyword"
}
}
}
]
}
}
}
Ура!!!