#elasticsearch
Вопрос:
У меня есть проблема, которую я не совсем уверен, как решить в elasticsearch.
У меня есть куча документов, в которых есть массив имен
{
...
"names":["name nameson", "example exampleson"],
...
}
И я хочу иметь поисковый запрос, в котором у меня есть только имя в качестве входных данных. Например "name testson".
Если массив содержит хотя бы одно имя, которое более чем на 80% похоже на входное имя (в соответствии с некоторым алгоритмом), то оно должно быть возвращено запросом.
Возможно ли это в elasticsearch?
Ответ №1:
Если вам нужно хотя бы одно имя, вы можете определить поле в сопоставлении как «текст», и поиск найдет его.
Сходство около 80%, может быть, вам поможет векторное поле.
https://www.elastic.co/blog/text-similarity-search-with-vectors-in-elasticsearch
Другой способ — с помощью нечеткого поиска, но это даст не процент сходства, а количество букв с ошибкой:
https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-fuzzy-query.html
Я думаю, что самый простой способ — удалить поле «текст» и выполнить нечеткий поиск.