带有过滤器的ElasticSearch query_string无法获得结果

时间:2018-11-03 17:31:06

标签: elasticsearch

我有以下Elasticsearch查询(通常更大,但去除了导致问题的部分):

'query' => [
    'bool' => [
        'must' => [
            'query_string' => [
                'query' => $keywords,
                'fields' => ['title']
            ]
        ],
        'filter' => [
             'term' => [
                'school_id' => 1
            ]
         ]
    ]
]

但是,如果我删除过滤器,则可以正常工作,但是我想要的是仅过滤具有特定学校ID的搜索。

1 个答案:

答案 0 :(得分:1)

为什么不选择过滤数据-首先处理所需的数据呢?

某种意义上说,过滤是用于二进制结果的,如果您想知道文档字段school_id是否为1。如果您只想获得结果,还有其他方法可以做到。

在您的情况下,我认为您只是跳过了mustbool,这就是查询失败的原因。

这样,您有2个选择,第一个可以如下解决:

GET /_search
{
  "query": {
    "bool": {
      "must": {
        "query_string": {
          "default_field": "keywords",
          "query": "title"
        }
      },
      "filter": {
        "bool": {
          "must": [
            {
              "term": {
                "school_id": "1"
              }
            }
          ]
        }
      }
    }
  }
}

如果您希望对结果进行评分,可以使用以下一项:

GET /_search
{
  "query": {
    "bool": {
      "must": [
        {
          "query_string": {
            "default_field": "keywords",
            "query": "title"
          }
        },
        {
          "match": {
            "school_id": {
              "query": "1"
            }
          }
        }
      ]
    }
  }
}