首页 > 解决方案 > 带有分组查询字符串的 Elasticsearch

问题描述

{
   "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 部分不起作用?

我希望搜索词组与名称、关键字中的一个或两个匹配,但城市应该是严格意义上的悉尼。

标签: elasticsearchelasticsearch-php

解决方案


你正在做的是一个全文查询。city:Sydney, Australia似乎是一个过滤查询。就像 SQL 中的 WHERE 子句。您最好为此使用过滤器查询。

查看布尔查询的示例,

大概是这样的,

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

推荐阅读