微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在Elasticsearch中对结果分组?

如何解决如何在Elasticsearch中对结果分组?

在Elasticsearch中无法找到您想要的东西,至少在当前版本(1.1)中无法实现。

对于此功能,还有很长的悬而未决的问题,其背后有很多+1和需求。

至于声明:Simon说,这需要大量的重构,尽管它是计划中的,但没有办法说它何时实施甚至交付。

克林顿·戈姆利Clinton Gormley)在他的网络研讨会上也发表了类似的观点,即领域分组需要付出很多努力才能正确完成,尤其是因为Elasticsearch本质上是一个分片的分布式环境。如果您不考虑分片,那没什么大不了的,但是Elasticsearch只希望提供功能,这些功能可以与整个系统一起扩展,并且可以像在一个盒子上一样在数百台机器上正常工作。

如果您不依赖Elasticsearch,Solr会提供这样的功能

否则,目前最好的解决方案是在客户端进行此操作。也就是说,查询一些文档,在客户端上进行分组,如果需要,获取更多结果以满足所需的组大小(据我所知,这是Solr在幕后所做的事情)。

不完全是您想要的,但是您也可以进行汇总;为您创建一个存储桶,title并在id现场进行子聚合。您将不会获得store与此相关的值,但是一旦有了ID,就可以从数据存储中检索它们。

{
    "aggs" : {
        "titles" : {
            "terms" : { "field" : "title" },
            "aggs": {
                "ids": {
                    "terms": { "field" : "id" }
                }
            }
        }
    }
}

:似乎,与top_hits聚合,结果分组可以很快实现。

解决方法

我将书名存储在elasticsearch中,它们都属于许多商店。像这样:

{
    "books": [
        {
            "id": 1,"title": "Title 1","store": "store1" 
        },{             
            "id": 2,"store": "store2" 
        },{             
            "id": 3,"store": "store3" 
        },{             
            "id": 4,"title": "Title 2",{             
            "id": 5,"store": "store3" 
        }
    ]
}

如何获取所有书籍并按标题分组…以及每组一个结果(一组具有相同标题的行,这样我就可以获得所有ID和存储)?

基于上面的数据,我想获得两个具有所有ID的结果并将其存储在其中。

预期成绩:

{
"hits":{
    "total" : 2,"hits" : [
        {                
            "0" : {
                "title" : "Title 1","group": [
                     {
                         "id": 1,"store": "store1"
                     },{
                         "id": 2,"store": "store2"
                     },{
                         "id": 3,"store": "store3"
                     },]
            }
        },{                
            "1" : {
                "title" : "Title 2","group": [
                     {
                         "id": 4,{
                         "id": 5,"store": "store3"
                     }
                ]
            }
        }
    ]
}
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。