Multi_match和匹配查询

时间:2016-04-20 12:02:37

标签: elasticsearch

我在弹性搜索中有以下查询:

{
  "query": {
    "multi_match": {
      "query": "bluefin bat",
      "type": "phrase",
      "fields": [
        "title^5",
        "body.value"
      ]
    }
  },
  "highlight": {
    "fields": {
      "body.value": {
        "number_of_fragments": 3
      }
    }
  },
  "fields": [
    "title",
    "id"
  ]
}

我尝试使用“dis_max”但是我的两个字段必须搜索相同的查询。 剩余的匹配查询具有不同的查询文本。

剩下的匹配查询是这样的:

{
  "query": {
    "match": {
      "ingredients": "key1, key2",
      "analyzer": "keyword_analyzer"
    }
  }
}

如何在不使用dis_max加入的情况下集成这两个查询。

1 个答案:

答案 0 :(得分:2)

我想出了答案。 multi_match内部适用:

"dis_max"

因此,您无法将dis_maxmulti_match一起使用。 但我可以做的是我可以应用bool查询来解决这类问题。

我可以应用should实际转换为OR布尔值,或者我可以应用must,相当于AND

这就是我修改查询的方式:

{
  "query": {
    "bool":{
      "should": [
        {"multi_match":
          {"query": "SOME_QUERY",
            "type": "phrase", 
            "fields": ["title^5","body"]
          }
        },
        {
          "match":{
            "labels" :{
             "query": "SOME_QUERY",
             "analyzer": "keyword_analyzer"
            }
          }
        },
        {
          "match":{
            "displayName" :{
             "query": "SOME_QUERY",
             "fuzziness": "AUTO"
            }
          }
        }
      ],
      "minimum_number_should_match": "50%"
    }
    },
  "fields": ["title","id","labels","displayName","username"],
  "highlight": {
    "fields": {
      "body.storage.value": {
        "number_of_fragments": 3}
    }
  }
}

我希望将来可以帮助某人。