我正在将Tomcat访问日志数据索引到Elasticsearch(1.7.3)中。 我处理的文件有持续时间的概念,表示为以毫秒为单位的结束时间和持续时间 (开始时间可以计算,但我可以存储它,如果它有助于解决我的问题)。 例如:
{
ztime: "10-17-2015T04:05:00.000+02:00",
duration: 4500,
thred: "http-nio-8080-exec-14"
},
{
ztime: "10-17-2015T04:07:42.227+02:00",
duration: 3100,
thred: "http-nio-8080-exec-25"
}
我的目标是生成一个直方图,我每秒都会显示有多少线程存在。
我想过使用date_histogram将我的文档聚合成1秒的桶。
GET /mindex/mtype/_search?search_type=count
{
"aggs": {
"threads_per_hr": {
"date_histogram": {
"field": "ztime",
"interval": "1s",
"min_doc_count": 1
},
"aggs": {
"per_hr_threads": {
"cardinality": {
"field": "thread"
}
}
}
}
}
}
然而,因此每个线程只会被bucketized一次。
我需要的是将每个文档分成几个桶。 例如,我需要将第一个文件文本化为04:05:00.000,04:05:01.000,04:05:02.000,04:05:03.000桶。
什么样的查询(Java API和/或REST API)可以帮助我实现这一目标?
答案 0 :(得分:0)
您需要在此处使用cardinality聚合。它给出了该字段的唯一值的数量。
GET /{index}/{type}/_search?search_type=count
{
"aggs": {
"threads_per_hr": {
"date_histogram": {
"field": "ztime",
"interval": "1s",
"min_doc_count": 0
},
"aggs": {
"per_hr_threads": {
"cardinality": {
"field": "thread"
}
}
}
}
}
}