带有 ElasticSearch 的嵌套树的构面

Posted

技术标签:

【中文标题】带有 ElasticSearch 的嵌套树的构面【英文标题】:Facets for nested tree with ElasticSearch 【发布时间】:2014-08-29 21:55:33 【问题描述】:

我是 ElasticSearch 的新手,所以我需要一些帮助。

我有一个查询要搜索products,它可以属于许多categoriesCategories 组合成一个嵌套树。

示例数据:

categories: [
  
    id: 1,
    name: 'First category',
    categories:[
      
        id: 12,
        name: 'First subcategory'
      ,
      
        id: 13,
        name: 'Second subcategory'
      
    ]
  ,
  
    id: 2,
    name: 'Second category'
  
],
products: [
  
    id: 1,
    name: 'First product',
    categories_ids: [2, 12]
  ,
  
    id: 2,
    name: 'Second product',
    categories_ids: [1]
  
]

除了搜索结果之外,我还需要获取 categories 树,包括每个 category 中的搜索结果数量(不包括没有任何搜索结果的类别)。

对于上面的例子应该是:

第一类 (2) 第一个子类别 (1) 第二类 (1)

有人可以解释如何使用 ElasticSearch 的聚合来做到这一点吗?

谢谢。

【问题讨论】:

你有多少个类别级别? 【参考方案1】:

我有类似的需求并使用了嵌套对象。这是那个线程

How to narrow down the current aggregation context to a specific scope within set of documents returned from Filter Aggregation?

【讨论】:

【参考方案2】:

我认为您正在寻找与此相关的东西:


  "aggs": 
    "category_agg": 
      "terms": 
        "field": "category_name"
      ,
      "aggs": 
        "sub_category_agg": 
          "terms": 
            "field": "sub_category"
          ,
          "filter": 
            "term": 
              "sub_category": "First subcategory"
            
          
        
      
    
  

根据需要应用过滤器(或省略),并确保您进行聚合的字段(本示例中为category_name 和 subcategory_name)未被分析。

【讨论】:

以上是关于带有 ElasticSearch 的嵌套树的构面的主要内容,如果未能解决你的问题,请参考以下文章

ggplot重命名facet_wrap中的构面标签

如何使用 Sunspot 设置具有多对多关系的构面搜索?

在 ggplot2 facet_grid 中旋转切换的构面标签

将空图添加到构面,并与另一个构面结合

Elasticsearch - 通用构面结构 - 计算聚合与过滤器相结合

ggplot2 跨越组中的嵌套构面