弹性搜索可以通过字段的X次出现创建直方图吗?

时间:2012-05-03 22:17:36

标签: elasticsearch

我没有看到如何做到这一点,但是有可能有一个方面使用一个间隔来给出每X次出现次数的统计数据吗?例如,如果net是按日期排序的数字序列,如:

1,2,3,4,5,6,7

我将间隔设置为2,我想找回像:

这样的直方图
count: 2
value: 3,

count: 2,
value: 7,

count: 2,
value: 11,

...

1 个答案:

答案 0 :(得分:3)

Elasticsearch不支持开箱即用的此类操作。编写这样的方面是可能的,但它不是很实用,因为它需要编写相当复杂的自定义facet处理器并且可选地控制记录被分成碎片的方式(所谓的路由)。

在elasticsearch中,从架构的角度来看,任何依赖于元素的全局顺序的操作都有些问题。 Elasticsearch将记录拆分为分片,大多数操作(包括搜索和分面计算)都在分片上进行,然后收集这些分片级操作的结果并将其合并到全局结果中。这基本上是map / reduce架构,它是elasticsearch的水平可伸缩性的关键。您的方面的最佳实现将需要更改路由,以便记录根据其顺序而不是ID的哈希代码分割为分片。或者,可以通过将分片级相位限制为仅提取字段值并在合并阶段中执行构面的实际计算来完成。后一种方法似乎更实用,但同时它与简单地提取所有记录的字段值并在客户端进行计算没有太大区别,这正是我建议在这里做的。只需使用所需的排序顺序提取所有值,并计算客户端上的所有统计数据。如果索引中的记录数很大,则可以使用Scroll API使用多个请求检索所有记录。