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

Different multi match for each mapping in one query

我有 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 个查询组合成一个并说 mapping/types AB 使用第一个多重匹配 C 使用第二个 D使用第三个。

我使用 Type Query 得出了以下结果。

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

请注意,我还包含了 boost 参数,并且我提到它的方式是,与 C 类型的文档相比,C 类型的文档在结果中总是显得更高=12=]。

您可以继续根据您的要求进行更改。

查询

POST <your_index_name>/_search
{  
   "query":{  
      "bool":{  
         "should":[  
            {  
               "bool":{  
                  "boost":100,
                  "must":[  
                     {  
                        "multi_match":{  
                           "query":"....",
                           "analyzer":"simple",
                           "fuzziness":"AUTO",
                           "use_dis_max":false,
                           "fields":[  
                              "name*"
                           ]
                        }
                     },
                     {  
                        "type":{  
                           "value":"C"
                        }
                     }
                  ]
               }
            },
            {  
               "bool":{  
                  "boost":5,
                  "must":[  
                     {  
                        "type":{  
                           "value":"D"
                        }
                     },
                     {  
                        "multi_match":{  
                           "query":"....",
                           "analyzer":"simple",
                           "fuzziness":0,
                           "use_dis_max":false,
                           "fields":[  
                              "name*"
                           ]
                        }
                     },
                     {  
                        "multi_match":{  
                           "query":"....",
                           "analyzer":"simple",
                           "fuzziness":3,
                           "fields":[  
                              "name*"
                           ]
                        }
                     }
                  ]
               }
            }
         ]
      }
   }
}

如果有帮助请告诉我!