Elasticsearch通过聚合过滤动态嵌套字段

时间:2019-04-24 21:53:53

标签: elasticsearch

我有带有动态属性(过滤器)的产品。我需要根据搜索查询动态获取过滤器每个值的计数。

我对产品索引有以下映射:

{  
   "products":{  
      "mappings":{  
         "properties":{  
            ...
            "dynamicFilters":{  
               "type":"nested",
               "properties":{  
                  "name":{  
                     "type":"keyword"
                  },
                  "value":{  
                     "type":"keyword"
                  }
               }
            },
            ...
         }
      }
   }
}

以及以下汇总请求:

'size': 0,
'query': {
    'bool': {
        'must': {
            'match': {
                'category': 'Notebooks'
            }
        },
        'filter': {
            {'nested': {
                'path': 'dynamicFilters',
                'query': {
                    'bool': {
                        'filter': {
                            {'term': {'dynamicFilters.name': 'processor'}},
                            {'terms': {'dynamicFilters.value': {'Ryzen 7'}}},
                        },
                    }
                }
            },
        }
    }
},

'aggs': {
    //'dynamicFilters': {
        //'global': {},   <-- global type commented here
        //'aggs': {
            'dynamicFilters': {
                'nested': {
                    'path': 'dynamicFilters',
                },
                'aggs': {
                    'name': {
                        'terms': {
                            'field': dynamicFilters.name',
                            'size': 20
                        },
                        'aggs': {
                            'value': {
                                'terms': {
                                    'field': 'dynamicFilters.value',
                                    'size': 20
                                }
                            }
                        }
                    },
                }
            },
        //}
    //}
},

问题是在搜索查询中何时启用过滤器,例如值为“ Ryzen 7”的“ procesor”-作为响应,除“ Ryzen 7”以外,所有“处理器”值都不会汇总。 / p>

我尝试使用global type进行此操作,但是在这种情况下aggs停止使用搜索查询并返回所有现有的值计数。

任何帮助将不胜感激,谢谢!

0 个答案:

没有答案