Есть ли стеммер для упругого поиска, который может заменить "сломанный" на "сломанный"
Вот что я хотел бы, чтобы стеммер сделал: ломать: ломать ломать: ломать ломать: ломать ввод: вводить ввод: вводить ввод: вводить
Я проиндексировал поле следующим образом: "body": { "type": "text", "fields": { "stemmed": { "type": "text", "analyzer": "english" } } }
Когда я запрашиваю "взлом и вход", я вижу, что в поле body.stemmed выполняется поиск: "взломать и войти". Выглядит неплохо. Однако, когда я запрашиваю "сломал и вошел", я получил: "сломал и вошел". Таким образом, по-видимому, "break" не становится "break" при использовании "английского" стеммера. Точно так же "сломлен и вошел" становится: "сломан и вошел". Таким образом, ES, по-видимому, не меняет ни "сломался", ни "сломался" на "сломаться" (что, согласно этому: снежный ком, я думаю, объясняет, почему, если это то, что используется).
Итак, есть ли способ указать "известный" стеммер, который выполнит то, что я пытаюсь сделать?
1 ответ
Ваше требование может быть выполнено словарем Stemmer, который выполняет поиск по словарю для определения слов. Алгоритмические основы происходят без знания корневых слов, они просто делают это алгоритмически. Посмотрите на Хунспелла, подумайте, он справится со своей задачей: https://www.elastic.co/guide/en/elasticsearch/guide/current/hunspell.html