我正在使用Kibana来可视化一些(Elasticsearch)数据,但我想过滤掉所有的结果,即“Count” 小于小于1000(X)。
我在Y轴上使用“计数汇总”,这是我要过滤的计数。我尝试根据一些在线资源的建议添加min_document_count,但这没有任何改变。任何帮助将不胜感激。
我的整个Kibana的“数据”标签:
最佳答案
除了将min_doc_count
与order: ascending
一起使用外,其他方法均无效。
TL; DR:增加shard_size
和/或shard_min_doc_count
应该可以解决问题。
为什么聚合为空
如documentation所述:
这意味着当您使用带有参数大小和min_doc_count并以降序排列的术语聚合时,Elasticsearch会检索数据集中频率较小的术语,并过滤此列表以仅保留doc_count> min_doc_count的术语。
如果要举个例子,给定这个数据集:
terms | doc_count
----------------
lorem | 3315
ipsum | 2487
olor | 1484
sit | 1057
amet | 875
conse | 684
adip | 124
elit | 86
如果您使用
size=3
和min_doc_count=100
执行聚合,Elasticsearch将首先计算3个不那么频繁的术语:conse: 684
adip : 124
elit : 86
然后过滤
doc_count>100
,因此最终结果将是:conse: 684
adip : 124
即使您希望“amet”(doc_count = 875)出现在列表中。 Elasticsearch在计算结果时会松开该字段,并且最终无法检索到它。
如果您遇到这种情况,那么您有很多doc_count
为什么Elasticsearch的行为如此?
每个人都想应用过滤器,然后对结果进行排序。我们可以使用较旧的数据存储来做到这一点,这很好。但是Elasticsearch是按比例缩放的,因此默认情况下它会关闭一些以前使用的魔术。
为什么?因为对于大型数据集,它会中断。
例如,假设您的索引中有800,000个不同的术语,数据分布在不同的分片上(默认为4个),这些分片可以分布在其他计算机上(每个分片最多1台计算机)。
当请求doc_count> 1000的术语时,每台计算机必须计算成千上万的计数器(因为一个术语的某些出现可以在一个分片中,而另一个在另一个分片中,则需要200,000个计数器)。而且,即使一个碎片仅看到一次结果,其他碎片也可能看到该结果999次,因此在合并结果之前,它无法删除信息。因此,我们需要通过网络发送超过一百万个计数器。因此,它非常繁重,尤其是经常执行时。
因此,默认情况下,Elasticsearch将:
doc_count
。 shard_min_doc_count
。 size * 1.5 + 10
(shard_size
)术语发送到节点。如果顺序升序,它将是频率较低的术语,否则是频率最高的术语。 min_doc_count
过滤器。 size
最频繁/最不频繁的结果。 一次简单吗?
是的,可以肯定,我说过这种行为是默认的。如果您没有庞大的数据集,则可以调整这些参数:)
解
如果您不是,则可以,但会损失一些准确性:
shard_size
参数增大为大于[your number of terms with a doc_count below your threshold]
+ [the number of values you want if you want exact results]
。如果您希望所有结果都带有
doc_count>=1000
,请将其设置为字段的基数(不同术语的数量),但是我看不到order: ascending
的意义。如果您使用多个术语,则会对内存产生巨大影响;如果您具有多个ES节点,则会对网络产生巨大影响。
如果是,则可以,但会损失一些准确性(通常是次要的)
shard_size
之间设置[the number of values you want if you want exact results]
。如果您想提高速度或没有足够的RAM来执行准确的计算,这将很有用。这个值的高低取决于您的数据集。 您也可以将数据放在一个分片中。准确性方面没有损失,但对性能和扩展性不利。但是,如果您的数据集很小,则可能不需要ES的全部功能。
注意:已弃用术语聚合的降序(因为要花费大量时间和硬件才能保证准确性),将来很有可能将其删除。
PS:您应该添加Kibana生成的Elasticsearch请求,这在Kibana返回数据而不是您想要的数据时通常很有用?单击屏幕快照中图形下方的箭头时,可以在“请求”选项卡中找到它(例如:http://imgur.com/a/dMCWE)。