我正在运行一个ElasticSearch集群5.6版本,每天索引大小为70Gb。每天结束时,我们需要对过去7天的每小时进行总结。我们使用的是Java版本的高级Rest客户端,考虑到每个查询返回的文档数量对滚动结果至关重要。
为了充分利用现有的CPU,并减少读取时间,我们考虑使用Scroll Asynchronous版本的搜索,但我们缺少一些示例,至少缺少其中的逻辑。
我们已经检查了弹性相关文档,但它的模糊:
https://www.elastic.co/guide/en/elasticsearch/client/java-rest/5.6/java-rest-high-search-scroll.html#java-rest-high-search-scroll-async
我们也在弹性论坛上问过他们说的话,但看起来没有人能回答:
https://discuss.elastic.co/t/no-code-for-example-of-using-scrollasync-with-the-java-high-level-rest-client/165126
在这方面的任何帮助将非常感谢,并肯定我不是唯一一个有这个要求。
2条答案
按热度按时间a6b3iqyw1#
下面是示例代码:
感谢大卫·皮拉托elastic discussion
cwdobuhd2#
过去7天内每小时的摘要
听起来您似乎希望对数据运行一些聚合,而不是获取原始文档。可能在第一级使用日期直方图,以便以1小时为间隔进行聚合。在该日期直方图内,您需要一个内部聚合来运行您的聚合-根据所需的汇总,可以是指标/桶。
从Elasticsearch v6.1开始,你可以使用Composite Aggregation,以便使用分页来获取所有的结果桶。
复合聚合可用于有效地对来自多级聚合的所有桶分页。此聚合提供了一种方法,以类似于滚动对文档所做的那样,对特定聚合的所有桶进行流处理。
不幸的是,在v6.1之前不存在此选项,因此您要么需要升级ES才能使用它,要么找到另一种方法,如分解为多个查询,这些查询一起将满足7天的要求。