Elasticsearch documentation 建议 *他们的代码
*文档已修复
GET /cars/transactions/_search?search_type=count
{
"aggs": {
"distinct_colors": {
"cardinality": {
"field": "color"
}
}
}
}
对应于sql查询
SELECT DISTINCT(color) FROM cars
但实际上它对应于
SELECT COUNT(DISTINCT(color)) FROM cars
我不想知道我有多少不同的值,但有什么不同的值。任何人都知道如何实现这一目标?
答案 0 :(得分:30)
在color
字段上使用terms aggregation。并且您需要注意如何分析您希望获得不同值的字段,这意味着您需要确保在索引时不对其进行标记,否则聚合中的每个条目都将是一个不同的术语,即部分内容。
如果您仍然想要标记化AND并使用terms
聚合,您可能希望查看该字段的not_analyzed
索引类型,并使用multi fields。
汽车条款汇总:
GET /cars/transactions/_search?search_type=count
{
"aggs": {
"distinct_colors": {
"terms": {
"field": "color",
"size": 1000
}
}
}
}
答案 1 :(得分:22)
要更新Andrei Stefan的优秀答案,我们需要说Elasticsearch 5不再支持查询参数search_type=count
。这样做的新方法是在正文中添加"size" : 0
如:
GET /cars/transactions/_search
{
"size": 0,
"aggs": {
"distinct_colors": {
"terms": {
"field": "color",
"size": 1000
}
}
}
}
答案 2 :(得分:1)
就我个人而言,这两个答案对我来说都是莫名其妙的,当我想添加多个过滤器时,这是毫无希望的。
对我来说,有意义的是转到“发现”选项卡并应用所需的过滤器。然后,我保存了搜索。
然后,我使用保存的搜索创建了新的条形图可视化。然后,我修改了X轴以根据感兴趣的字段(在我的情况下为用户名)使用术语汇总,然后按计数排序。确保大小较大,例如500。
您应该能够在表格下方以表格形式获取结果。简单,无需复杂的JSON编程。只需一系列的点击。您甚至可以保存可视化以供以后使用。
答案 3 :(得分:0)
虽然我很欣赏利用Kibana回答这个问题的想法,但我无法完全按照described by @Phlucious的方式来完成它。这是我的工作方式(Kibana和Elasticsearch 7.8.1):
在Kibana的可用字段侧面菜单中,左键单击要提取不同值的字段(在我的示例中为 data.vulnerability.package.condition < / em>):
这将打开一个菜单,其中包含该字段的前5个值,后跟一个标有 Visualize 的按钮。点击可视化以打开您的字段的最高值的可视化:
在此子屏幕的右上角,找到一个标记为 View:Data 的链接。左键单击以选择 Requests 。在出现的新子屏幕的标题中,您可以单击请求以访问用于生成图形和图表的Elasticsearch查询Kibana:
请注意,如上图所示,我的请求中的 size 值为100;最初是20,这是Kibana的条款数量的默认设置。我在Kibana的高级设置屏幕中将其更改为100: