一个查询中每个映射的不同多重匹配

时间:2018-11-21 10:50:50

标签: elasticsearch elasticsearch-5 spring-data-elasticsearch

我有4种不同的映射:ABCD

对于映射AB,以下查询可提供最佳结果:

{
  "query": {
    "bool": {
      "should": [
          {
            "bool": {
              "must": [
                {
                  "multi_match": {
                    "query": "....",
                    "analyzer": "keyword",
                    "fuzziness": "AUTO",
                    "fields": ["name*"]
                  }
                }
              ]
            }
          }
      ]
    }
  },
  "from": 0,
  "size": 20
}

对于C,以下查询可提供最佳结果:

{
  "query": {
    "bool": {
      "should": [
          {
            "bool": {
              "must": [
                {
                  "multi_match": {
                    "query": "....",
                    "analyzer": "simple",
                    "fuzziness": "AUTO",
                    "use_dis_max": false, 
                    "fields": ["name*"]
                  }
                }
              ]
            }
          }
      ]
    }
  }
}

对于D,以下查询可提供最佳结果:

{

  "query": {
    "bool": {
      "should": [
          {
            "bool": {
              "must": [
                {
                  "multi_match": {
                    "query": "....",
                    "analyzer": "simple",
                    "fuzziness": 0,
                    "use_dis_max": false, 
                    "fields": ["name*"]
                  }
                },
                {
                  "multi_match": {
                    "query": "....",
                    "analyzer": "simple",
                    "fuzziness": 3,
                    "fields": ["name*"]
                  }
                }
              ]
            }
          }
      ]
    }
  }
} 

我可以进行3个单独的查询并处理结果,但是结果很麻烦,而且花费时间更长。是否可以将这3个查询合并为一个,并说映射/类型AB使用第一个多重匹配,C使用第二个,D使用第三。

1 个答案:

答案 0 :(得分:1)

我使用Type Query提出了以下内容。

为简单起见,我仅考虑问题中提到的类型CD的查询。

请注意,我还包含了boost参数,并且以这样的方式提及了它:与{{1}类型的文档相比,C类型的文档在结果中总是显得更高}}。

您可以继续并根据需要进行更改。

查询

D

让我知道这是否有帮助!