【问题标题】:Different multi match for each mapping in one query一个查询中每个映射的不同多重匹配
【发布时间】:2019-04-23 22:18:17
【问题描述】:

我有 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 使用第三个。

【问题讨论】:

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


    【解决方案1】:

    我想出了下面使用Type Query

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

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

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

    查询

    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*"
                               ]
                            }
                         }
                      ]
                   }
                }
             ]
          }
       }
    }
    

    如果这有帮助,请告诉我!

    【讨论】:

    • 你好,上述解决方案有帮助吗?您还在寻找其他东西吗?
    • 嗨,是的,它确实有帮助,非常感谢,我只是忘了投票/接受它。
    猜你喜欢
    • 1970-01-01
    • 2021-01-18
    • 1970-01-01
    • 1970-01-01
    • 2020-08-25
    • 1970-01-01
    • 1970-01-01
    • 2019-12-02
    • 2014-11-26
    相关资源
    最近更新 更多