2014-02-13 3 views
1

Я только начал изучать Elasticsearch. Я создал документ следующим образом:Нечеткое совпадение строк с использованием алгоритма Левенштейна в Elasticsearch

curl -XPUT "http://localhost:9200/cities/city/1" -d' 
{ 
    "name": "Saint Louis" 

}' 

теперь я пытался сделать нечеткий поиск на поле имени с расстоянием Левенштейн 5 следующим образом:

curl -XGET "http://localhost:9200/_search " -d' 
{ 
    "query": { 
     "fuzzy": { 
      "name" : { 
       "value" : "St. Louis", 
       "fuzziness" : 5 
      } 

     } 
    } 
}' 

Но его не возвращает ни одного матча. Я ожидаю, что запись Сент-Луиса будет возвращена. Как я могу исправить свой запрос?

Спасибо.

ответ

3

Проблема с вашим запросом заключается в том, что разрешено только максимальное расстояние редактирования 2.

В случае, выше которого вы, вероятно, хотите сделать, есть synonym для святого и святого, и это будет соответствовать вам. Конечно, это будет зависеть от ваших данных, поскольку St также может быть «улицей».

Если вы хотите просто проверить нечеткий поиск, вы можете попробовать этот пример

curl -XGET "http://localhost:9200/_search " -d' 
{ 
    "query": { 
     "fuzzy": { 
      "name" : { 
       "value" : "Louiee", 
       "fuzziness" : 2 
      } 

     } 
    } 
} 
+0

У меня есть запрос с должен с function_score с нечеткостью 0,75 с multi_match с cross_field Моим запрос термин без одного последнего символа - например, «NAM» вместо «NAME» По правилам нечеткости он должен быть возвращен мне, но я не получаю результатов. Что бы вы посоветовали по этому вопросу? Есть ли путь без NGRAM? –

+1

Грегори, вероятно, лучше всего разместить это как новый вопрос, а также детали вашего сопоставления и запроса. – Akshay

+0

@Gregory fuzziness не поддерживается для запросов cross_field типа multi_match. –

Смежные вопросы