Elasticsearch - передать параметр нечеткости в query_string - PullRequest
0 голосов
/ 06 марта 2020

У меня нечеткий запрос с настроенным AUTO:10,20 нечетким значением.

{
"query": {
 "match": {
   "name": {
     "query": "nike",
     "fuzziness": "AUTO:10,20"
   }
 }
}
}

Как преобразовать его в запрос query_string ? Я пытался nike~AUTO:10,20, но он не работает.

Ответы [ 2 ]

2 голосов
/ 06 марта 2020

Это возможно и с query_strng, позвольте мне показать, используя тот же пример, что и предоставленный OP, оба match_query, предоставляемые OP-совпадениями, и query_string выбирает один и тот же документ с тем же score.

* 1006. * И в соответствии с , и , ES документами, Elasticsearch поддерживает формат AUTO:10,20, который также показан в моем примере.

Также

Индексное отображение

{
    "mappings": {
        "properties": {
            "name": {
                "type": "text"
            }
        }
    }
}

Индекс некоторые делают c

{
   "name" : "nike"
}

Поисковый запрос с использованием совпадения с нечеткостью

{
"query": {
 "match": {
   "name": {
     "query": "nike",
     "fuzziness": "AUTO:10,20"
   }
 }
}
}

И результат

"hits": [
         {
            "_index": "so-query",
            "_type": "_doc",
            "_id": "1",
            "_score": 0.9808292,
            "_source": {
               "name": "nike"
            }
         }
      ]

Строка запроса с нечеткостью

{
    "query": {
        "query_string": {
            "fields": ["name"],
            "query": "nike",
            "fuzziness": "AUTO:10,20"
        }
    }
}

И результат

 "hits": [
         {
            "_index": "so-query",
            "_type": "_doc",
            "_id": "1",
            "_score": 0.9808292,
            "_source": {
               "name": "nike"
            }
         }
      ]
1 голос
/ 06 марта 2020

Синтаксис Lucene позволяет указывать только «размытость» с символом тильды «~», за которым, возможно, следуют 0, 1 или 2. Для указания расстояния редактирования.

Elasticsearch Query DSL поддерживает настраиваемое специальное значение для AUTO, который затем используется для построения правильного запроса Lucene.

Вам нужно будет реализовать эту логику c на стороне вашего приложения, оценивая желаемое расстояние редактирования на основе длины вашего поискового запроса, а затем используйте <searchTerm>~<editDistance> в вашем query_string -запросе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...