我使用Kibana来显示一些(Elasticsearch)数据,但我想用" Count"来过滤掉所有结果。 少而不是1000(X)。
我正在使用带有"计数聚合"的Y轴,这是我想要过滤的计数。我尝试按照几个在线资源的建议添加min_document_count,但这并没有改变任何东西。任何帮助将不胜感激。
我的整个Kibana"数据"标签:
答案 0 :(得分:6)
将min_doc_count
与order: ascending
一起使用不会像您一样工作。
TL; DR:增加shard_size
和/或shard_min_doc_count
应该可以解决问题。
正如documentation所说:
min_doc_count标准仅在合并本地术语后应用 所有分片的统计数据。
这意味着当您使用带参数 size 和 min_doc_count 的术语聚合和降序时,Elasticsearch将检索 size 不太频繁的术语在您的数据集中并过滤此列表,仅保留 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< 1000 的条款很多,以至于它们填满了您的列表,然后,在过滤阶段之后,您就没有结果。
每个人都想应用过滤器然后对结果进行排序。我们能够使用较旧的数据存储区来实现这一点,这很不错。但Elasticsearch旨在扩展,因此它默认关闭之前使用的一些魔法。
为什么呢?因为对于大型数据集,它会破坏。
例如,假设您的索引中有800,000个不同的术语,数据分布在不同的分片上(默认为4),可以分布在其他机器上(每个分片最多1台机器)。
在请求带有doc_count> 1000的条款时,每台计算机必须计算数十万个计数器(超过200,000个,因为某个术语的某些出现可能在一个分片中,其他的可能在另一个分片中,等等)。而且,即使分片只看到一次结果,其他分片可能已经看到了999次,但在合并结果之前它不能丢弃信息。所以我们需要通过网络发送超过100万个计数器。所以它很重,特别是如果经常这样做的话。
因此,默认情况下,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来执行精确计算,这将非常有用。这个的好价值取决于您的数据集。
使用术语聚合的shard_min_doc_count parameter来部分预过滤较不频繁的值。这是一种过滤数据的有效方法,特别是如果它们在您的分片之间随机分布(默认)和/或您没有大量分片。
您还可以将数据放在一个分片中。在准确度方面没有任何损失,但它对性能和扩展性有害。但是如果你有一个小数据集,你可能不需要ES的全部功能。
NB:不推荐使用降级条款聚合的顺序(因为它在时间和硬件方面要花费很多精确),将来很可能会被删除。
PS:您应该添加Kibana生成的Elasticsearch请求,当Kibana返回数据而不是您想要的数据时,它通常很有用吗?您可以在"请求"中找到它。单击屏幕截图中应位于图表下方的箭头时的标签(例如:http://imgur.com/a/dMCWE)。