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

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

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

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

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

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

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

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