упругой поиск добавил подстановочный знак не удается запрос - PullRequest
0 голосов
/ 30 мая 2018

Работает как положено:

{
  "query": {
        "query_string": {
            "query": "Hofstetten-Grünau"
        }
    }
}

добавленный подстановочный знак в конце не дает результатов, и мне интересно, почему:

{
  "query": {
        "query_string": {
            "query": "Hofstetten-Grünau*"
        }
    }
}

как это исправить?

asticsearch v5.3.2

Это дает результаты:

{
  "query": {
        "query_string": {
            "query": "Hofstetten*"
        }
    }
}

Я использую одно поле поиска.Конечный пользователь может свободно использовать шаблоны по своему усмотрению.Пользователь может ввести:

  • hofstetten grünau
  • + ort: hofstetten-grünau
  • + ort: Hofstetten-G *

поэтому использование запроса на совпадение не сработает для меня.

Я использую Jest (Java-аннотации) в качестве отображения и использую «default» для этого поля.Мое отображение индекса не объявляет ничего особенного для поля:

{
    "mappings": {
        "_default_": {
            "date_detection": false,
            "dynamic_templates": [{
            }]
        }
    }
}

1 Ответ

0 голосов
/ 30 мая 2018

Добавление подстановочного знака «*» в конце строки запроса приводит к тому, что анализатор запросов интерпретирует черту между «Hofstetten» и «Grünau» как логический оператор NOT.Таким образом, вы фактически ищете документы, которые содержат Hofstetten, но НЕ содержат Grünau.

Вы можете проверить это, выполнив следующие варианты поиска:

"query": "Hofstetten-XXXXX" #should not return results
"query": "Hofstetten-XXXXX*" #should return results

Чтобы исправить это, я бырекомендуем использовать запрос match вместо запроса query_string:

{"query": {"match": { "city": "Hofstetten-Grünau" }}}'

(с любым подходящим именем поля вместо city).

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