是否有可能对弹性搜索中的热门命中结果进行聚合?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了是否有可能对弹性搜索中的热门命中结果进行聚合?相关的知识,希望对你有一定的参考价值。

我基本上需要根据orderId对结果进行分组,并根据修改的时间获取每个订单的最新记录。我使用热门命中并将大小限制为1来完成此操作,我能够获得最新修改时间的记录。我无法做的是:我想根据订单状态(如已处理,已发货等)对此热门点击聚合的结果进行分组,并获取每个州的计数。

所以我期待这样的事情:State:Processed,count:2 状态:InProcess,count:4

我的聚合是:

   "aggregations":
  "aggs": 
    "terms": 
            "field": "orderId"
        ,

    "aggs": 
            "top_hits_modifiedTime": 
                "top_hits": 
                    "sort": [
                        
                            "modifiedTime": 
                                "order": "desc"
                            
                        
                    ],
                "size" : 1
                
            
        

答案

是的,有可能因为我遇到了同样的问题,然后我在嵌套聚合中提供了一个解决方案。在这里我们可以在modifiedTime上添加一个带有max聚合的并行聚合。然后根据您添加的最大聚合对其进行排序。您只需根据第一级聚合调整订单声明。

通过这种方法,您将获得modifiedTime的最高命中顺序。在热门命中后,你将根据与max聚合平行的top_hits聚合对所有桶进行排序

请查看以下查询:


    "aggregations": 
        "aggs": 
            "terms": 
                "field": "orderId",
                "order": 
                    "max_modifiedTime": "asc"
                
            ,
            "aggs": 
                "top_hits_modifiedTime": 
                    "top_hits": 
                        "sort": [
                            
                                "modifiedTime": 
                                    "order": "desc"
                                
                            
                        ],
                        "size": 1
                    
                ,
                "max_modifiedTime": 
                    "max": 
                        "field": "modifiedTime"
                    
                
            
        
    

希望这能解决你的问题。如果它对你来说很好,请试着让我知道。

以上是关于是否有可能对弹性搜索中的热门命中结果进行聚合?的主要内容,如果未能解决你的问题,请参考以下文章

应用聚合后过滤掉弹性搜索中的术语聚合桶

除了依靠弹性搜索聚合之外,如何获取其他数据?

elasticsearch 聚合对存储桶键进行排序

在弹性搜索中聚合值数组

弹性搜索桶过滤

如何在弹性搜索的过滤器聚合中引用多个嵌套级别?