Elasticsearch с сгруппированной строкой query_string

{
   "query":
   {
      "query_string" :
      {
         "query" : "((name:the_search_phrase) OR (keywords:the_search_phrase)) AND (city:Sydney, Australia)"
      }
   }
}

Новое в elasticsearch. Создание JSON в соответствии с документацией здесь: https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-query-string-query.html

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

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

1 ответ

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

Посмотрите на логический запрос для примеров,

Что-то вроде этого возможно,

    {
  "query": {
    "bool": {
      "must": [
        {
          "query_string": {
            "query": "the_search_term",
            "fields": [
              "name",
              "keywords"
            ]
          }
        }
      ],
      "filter": [
        {
          "match": {
            "city": "Sydney, Australia"
          }
        }
      ]
    }
  }
}
Другие вопросы по тегам