Elasticsearch находит похожие строки в массиве строк

#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

Я думаю, что самый простой способ — удалить поле «текст» и выполнить нечеткий поиск.