КатегорииElasticsearch

Elasticsearch — Урок 3.7 Маппинг одного и того же поля с разными типами данных

Иногда появляется потребность поддерживать разные запросы для одного и того же поля. Например у нас есть поле заголовка title и мы хотим делать как полнотекстовые запросы так и запросы на точное соответствие. Первое что приходит на ум, это создать два поля и указать им разные типы данных, например:

{
   "properties": {
     "title_text": {
       "type": "text"
     },
     "title_keyword": {
       "type": "keyword"
     }
   }
}

Предположим вы добавили следующий документ:

{
 "title_text"    : "Learning Elasticsearch",
 "title_keyword" : "Learning Elasticsearch"
}

Заметьте что документ содержит дублирование данных, как в принципе и предполагалось. Чтобы избежать дублирования данных при индексировании и хранении документа, Elasticsearch предоставляет возможность индексировать одно поле с указанием нескольких типов данных, данная возможность называется fieldsmapping (сопоставление полей).

Используя сопоставление полей, одно и то же поле можно индексировать как text, так и keyword. Как показано ниже, поле title индексируется как text и title.exact будет индексироваться как keyword, которое может использоваться для поиска точного совпадения, сортировки и т. д.

Пример маппинга:

{
  "properties": {
    "title": {
      "type": "text",
      "fields": {
        "exact": {
          "type": "keyword"
        }
      }
    }
  }
}

Теперь можно добавлять документы без дублирования данных:

{
 "title" : "Learning Elasticsearch"
}

Теперь у нас два поля title c типом text и title.exact с типом keyword.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *