У меня есть коллекция документов, и у них есть поле tags
, которое является массивом строк. Каждая строка - это слово. Пример:
[{
"id": 1,
"tags": [ "man", "boy", "people" ]
}, {
"id": 2,
"tags":[ "health", "boys", "people" ]
}, {
"id": 3,
"tags":[ "people", "box", "boxer" ]
}]
Теперь мне нужно запросить только документы, содержащие слово «мальчик» и его формы (в моем примере «мальчики»). Мне не нужен эластичный поиск, чтобы вернуть c номер 3, потому что это не форма мальчика.
Если я использую запрос fuzzy
, я получу все три документа, а также сделаю c номер 3, который я не требуется. Насколько я понимаю, эластичный поиск использует расстояние Левенштейна, чтобы определить, имеет ли значение c или нет.
Если я использую запрос match
, я получу только номер 1, но не оба (1,2).
Интересно, есть ли возможность запрашивать документы путем сопоставления словарных форм. Есть ли способ заставить elasti c соответствовать "герцогу", "герцогине", "герцогу", но не "дамкам", "буке", "байке" и так далее? Это более сложный случай с «герцогом», но мне нужно также поддерживать такой случай.
Возможно, это можно решить, используя некоторые специфические c настройки анализатора?