Elasticsearch-在查询中包含给定术语以使其包含在聚合结果中

时间:2018-07-10 10:31:54

标签: elasticsearch aggregation elasticsearch-aggregation

我有一个非常简单的查询,该查询获取关键字“ iphone x”的结果,然后根据热门歌曲查找前五个类别(level2),然后查找每个level2类别的后续六个子类别(level3)。

{
  "size": 0,
  "aggs": {
    "categoryId": {
      "filter": {
        "bool": {
          "filter": [
            {
              "term": {
                "title.list": "iphone"
              }
            },
            {
              "term": {
                "title.list": "x"
              }
            }
          ]
        }
      },
      "aggs": {
        "results": {
          "terms": {
            "field": "category.l2.id",
            "size": 5
          },
          "aggs": {
            "categoryName": {
              "terms": {
                "field": "category.l2.id.keyword",
                "size": 1
              }
            },
            "subCategoryName": {
              "terms": {
                "field": "category.l3.id",
                "size": 6
              }
            }
          }
        }
      }
    }
  }
}

此查询产生结果

"results": {
    "buckets": [{
            "key": 9394,
            "categoryName": { ... },
            "subCategoryName": { ... }
        },
        {
            "key": 176970,
            "categoryName": { ... },
            "subCategoryName": { ... }
        },
        {
            "key": 43304,
            "categoryName": { ... },
            "subCategoryName": { ... }
        },
        {
            "key": 63,
            "categoryName": { ... },
            "subCategoryName": { ... }
        },
        {
            "key": 15052,
            "categoryName": { ... },
            "subCategoryName": { ... }
        }
    ]
}

现在我面临的问题是,尽管这个结果很好,但我想在这个结果中再显示一个level2类别。即。类别“ 9355”。 我想查询一个包含上述结果中的9355类别的查询。所以我尝试了include过滤器

"terms": {
            "field": "category.l2.id",
            "size": 5,
            "include": [
              9355
            ]
          }

但是我只得到了9355分类结果

{
    "key": 9355,   
    "categoryName": {...},
    "subCategoryName": { ... }
}

include过滤器无法正常工作。假设我想在聚合结果中实际包含给定的术语,我该怎么做? 因此结果应返回5 + 1 = 6个level2类别及其子类别。

0 个答案:

没有答案