ElasticSearch – 返回唯一值

我将如何从logging中获取所有languages的值,并使其具有唯一性。

logging

 PUT items/1 { "language" : 10 } PUT items/2 { "language" : 11 } PUT items/3 { "language" : 10 } 

询问

 GET items/_search { ... } # => Expected Response [10, 11] 

任何帮助将是伟大的。 提前致谢。

您可以使用术语聚合 。

 { "size": 0, "aggs" : { "langs" : { "terms" : { "field" : "language", "size" : 0 } } }} 

search将返回类似于:

 { "took" : 16, "timed_out" : false, "_shards" : { "total" : 2, "successful" : 2, "failed" : 0 }, "hits" : { "total" : 1000000, "max_score" : 0.0, "hits" : [ ] }, "aggregations" : { "langs" : { "buckets" : [ { "key" : "10", "doc_count" : 244812 }, { "key" : "11", "doc_count" : 136794 }, { "key" : "12", "doc_count" : 32312 } ] } } } 

Elasticsearch 1.1+有基数聚合 ,这将给你一个独特的计数

请注意,这实际上是一个近似值,准确性可能会随着高基数数据集的减less而降低,但是在我的testing中,它通常是相当准确的。

您还可以使用precision_threshold参数调整精度。 权衡,或者课程,是内存使用。

文档中的这张图显示了更高的precision_threshold如何产生更准确的结果。


相对误差vs阈值