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

标签 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个单独的查询并处理结果,但结果很麻烦,而且花费时间更长。是否可以将这三个查询组合为一个查询,并说映射/类型AB使用第一个多重匹配,C使用第二个匹配,D使用第三个多重匹配。

最佳答案

我使用Type Query在下面想出了。

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

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

您可以根据自己的要求进行更改。

询问

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

让我知道这是否有帮助!

关于elasticsearch - 一个查询中每个映射的不同多重匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53410488/

相关文章:

docker - 如何在单独的外壳中打开docker-compose服务

amazon-web-services - AWS ElasticSearch即服务无法通过独立的KIBANA连接

elasticsearch - 从s3存储库还原时快照不存在错误

elasticsearch - Spring Data ElasticSearch内置IN查询返回部分匹配

spring-boot - 如何在 Spring Project 中使用 ElasticSearch 的 NativeSearchQueryBuilder 返回单个对象?

python - 使用 elasticsearch-dsl-py 索引和渗透文档

elasticsearch - 高亮对象字段,获取该对象的相关字段

elasticsearch - 带有字符串和对象的json数组在Elasticsearch中的设置映射内

elasticsearch - 如何使用CLI标志配置Elasticsearch 5.0的发布地址?

elasticsearch - java.lang.NoSuchMethodError : org. elasticsearch.action.admin.indices.mapping.put.PutMappingRequestBuilder.setSource