SwoDs
@SwoDs
PHP YII2

Как сделать поиск по части слова в ElasticSearch и так чтобы второе слово искалось уже в конкретной записи?

Есть задача, справочник сотрудников, нужно делать поиск по нему

К примеру есть 2 записи:

1
fname = Мария
sname = Иванова
2
fname = Максим
sname = Плюшкин

Пишем Ма находим 1 и 2 запись
Пишем Ма Плю находим 2 запись
  • Вопрос задан
  • 4902 просмотра
Пригласить эксперта
Ответы на вопрос 1
Kotofey
@Kotofey
Не знаю как по сравнению с nGram'ами, нужно тестировать, но есть вариант использовать fuzzy-запросы:
GET /_search
{
    "query": {
        "fuzzy" : {
            "fname" : {
                "value" :         "ма",
                "fuzziness" :     10, // этот параметр для вашей задачи нужно выставлять повыше
                "prefix_length" : 2, // будет равняться кол-ву уже введенных символов
                "max_expansions": 100 // также выставляется повыше
            }
        }
    }
}

Но вообще такие нечеткие fuzzy-запросы для ластика весьма "тяжелы". Так что этот подход имеет смысл использовать только если у вас база не исчисляется миллионами записей и/или гигабайтами занимаемого места.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы