首页 > 解决方案 > 使用多个应该查询

问题描述

我想获得类似于多个“组”但分开的文档。每个组都有自己的规则(条款)。当我尝试在“布尔”中使用多个应该查询时,我得到的项目是两个应该的术语的混合。例如,我想使用 1 个查询而不是 msearch。

有人可以帮我吗?

{
 "explain": true,
  "query": {
    "filtered": {
      "filter": {
        "bool": {
          "must_not": [
            {
              "term": {
                "p_id": "123"
              }
            },
            {
              "term": {
                "p_id": "124"
              }
            }
          ]
        }
      },
      "query": {
        "bool": {
          "minimum_should_match": 1,
          "should": [
            {
              "bool": {
                "minimum_should_match": 1,
                "should": [
                  {
                    "term": {
                      "cat": "1"
                    }
                  },
                  {
                    "term": {
                      "cat": "2"
                    }
                  },

                  {
                    "term": {
                      "keys": "a"
                    }
                  },
                  {
                    "term": {
                      "keys": "b"
                    }
                  }
                ]
              }
            },
            {
              "bool": {
                "minimum_should_match": 1,
                "should": [
                  {
                    "term": {
                      "cat": "6"
                    }
                  },
                  {
                    "term": {
                      "cat": "7"
                    }
                  },
                  {
                    "term": {
                      "keys": "r"
                    }
                  },

                  {
                    "term": {
                      "keys": "u"
                    }
                  }
                ]
              }
            }
          ]
        }
      }
    }
  },
  "from": 0,
  "size": 3
}

标签: elasticsearch

解决方案


您可以尝试使用脚本在多个字段上使用术语聚合,并将热门点击聚合添加为子聚合。请注意,这将非常缓慢。在查询/过滤器之后添加它并根据需要调整大小参数

 "aggs": {
    "Cat_and_Keys": {
      "terms": {
        "script": "doc['cat'].values + doc['keys'].values"
      }, 
      "aggs":{ "separate_docs": {"top_hits":{"size":1 }} }
   }
 }

推荐阅读