Elasticsearch с сгруппированной строкой запроса - PullRequest
0 голосов
/ 17 февраля 2020
{
   "query":
   {
      "query_string" :
      {
         "query" : "((name:the_search_phrase) OR (keywords:the_search_phrase)) AND (city:Sydney, Australia)"
      }
   }
}

Новое в эластичном поиске. Построение JSON согласно документации здесь: https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-query-string-query.html

Запрос выполняется, однако, с другим городом, в котором также возвращается Sydney, Australia. Почему не работает часть AND?

Я хочу, чтобы поисковая фраза соответствовала одному или обоим именам, ключевым словам, но город должен быть строго Сиднейским.

1 Ответ

0 голосов
/ 17 февраля 2020

То, что вы делаете, это полнотекстовый запрос. city:Sydney, Australia представляется фильтром запроса. Как предложение WHERE в SQL. Для этого лучше использовать запрос фильтра.

Посмотрите на примеры логический ,

Возможно, что-то подобное,

    {
  "query": {
    "bool": {
      "must": [
        {
          "query_string": {
            "query": "the_search_term",
            "fields": [
              "name",
              "keywords"
            ]
          }
        }
      ],
      "filter": [
        {
          "match": {
            "city": "Sydney, Australia"
          }
        }
      ]
    }
  }
}
...