ElasticSearch结合使用match_phrase和multi_match

时间:2019-06-19 17:08:29

标签: elasticsearch

我使用ES 7.1,我想使用多重匹配查询来从多个字段中获取结果,但是我想在特定字段上使用match_phrase来获取结果。

我尝试了很多事情,这是最接近我想要的版本:

'bool' : {
    'must' : {
        'multi_match' : {
            'fields' => ['titre', 'subtitre', 'description'],
            'query' => $query
        },
        'match_phrase' : {
            'titre' => $query
        }
    },
    'filters' : { // ... some filters }
}

我得到一个错误:

  

parsing_exception“,”原因“:” [multi_match]格式错误的查询,预期   [END_OBJECT]但找到了[FIELD_NAME]

是否有一种方法可以将两个条件组合在一起?我不想创建2个查询。

1 个答案:

答案 0 :(得分:0)

当您需要多个must子查询时,您只需要将子查询作为数组传递即可。此修改应该可以工作(转换为JSON):

{
  "query": {
    "bool": {
      "must": [
        {
          "multi_match": {
            "query": "hello",
            "fields": ["name", "brand_name"]
          }
        },
        {
          "match_phrase": {
            "title": "hello"
          }
        }
      ]
    }
  }
}