我正在使用带有ElasticSearchJavaAPI的日期直方图聚合,它非常适合简单的聚合,例如每小时/天/月/年的命中视频数(想象一系列文档,其中日期直方图聚合是在“indexed_date”字段中进行的)。
但是,我可以通过一个查询,相对于另一个字段进行多字段日期聚合吗?就像Kibana对图表所做的那样。
我想实现的一个例子:
我有一系列文档,其中每一个都是一个“事件”,有它的时间戳。这些文档有一系列字段,如“状态”、“版本”等。
我可以根据日期直方图、时间戳字段和其他字段的所有值进行聚合吗?
间隔一小时的聚合结果示例:
H: 12状态-{活动:34暂停:12}
H: 13状态-{活动:10}
编辑:
一些示例数据:
"doc1" - { timestamp: "2014-12-23 12:01", status: "ACTIVE", version: 1 }
"doc2" - { timestamp: "2014-12-23 12.15", status: "PAUSED", version: 1 }
"doc3" - { timestamp: "2014-12-23 13.55", status: "ACTIVE", version: 2 }
(and so on..)
使用前面回答中使用的相同聚合名称,我将执行以下操作:
public void yourSearch(String indexName, String typeName) {
SearchResponse sr = client.prepareSearch(indexName)
.setTypes(typeName)
.addAggregation(AggregationBuilders.dateHistogram("date_hist_agg")
.field("timestamp")
.interval(DateHistogram.Interval.hours((1)))
.minDocCount(0)
.subAggregation(AggregationBuilders.terms("status_agg").field("status")))
.execute().actionGet();
DateHistogram componentsAgg = sr.getAggregations().get("date_hist_agg");
for (DateHistogram.Bucket entry : componentsAgg.getBuckets()) {
Terms statusAgg = entry.getAggregations().get("status_agg");
for (Terms.Bucket entry2 : statusAgg.getBuckets()) {
String key = entry2.getKey();
long cnt = entry2.getDocCount();
// use the key,cnt
}
}
}
}
我会在日期柱状图中进行术语聚合。
在以下示例中,您可以看到针对每个不同状态类型返回的文档计数:
curl -XGET 'http://localhost:9200/myindex/mydata/_search?search_type=count&pretty' -d '
> {
> "query" : {
> "match_all" : { }
> },
> "aggs" : {
> "date_hist_agg" : {
> "date_histogram" : {"field" : "timestamp", "interval" : "hour"},
> "aggs" : {
> "status_agg" : {
> "terms" : { "field" : "status" }
> }
> }
> }
> }
> }'
{
"took" : 213,
"timed_out" : false,
"_shards" : {
"total" : 5,
"successful" : 5,
"failed" : 0
},
"hits" : {
"total" : 3,
"max_score" : 0.0,
"hits" : [ ]
},
"aggregations" : {
"date_hist_agg" : {
"buckets" : [ {
"key_as_string" : "2014-12-23T17:00:00.000Z",
"key" : 1419354000000,
"doc_count" : 2,
"status_agg" : {
"doc_count_error_upper_bound" : 0,
"sum_other_doc_count" : 0,
"buckets" : [ {
"key" : "active",
"doc_count" : 1
}, {
"key" : "paused",
"doc_count" : 1
} ]
}
}, {
"key_as_string" : "2014-12-23T18:00:00.000Z",
"key" : 1419357600000,
"doc_count" : 1,
"status_agg" : {
"doc_count_error_upper_bound" : 0,
"sum_other_doc_count" : 0,
"buckets" : [ {
"key" : "active",
"doc_count" : 1
} ]
}
} ]
}
}
}
我想做一个字段折叠热门点击聚合,正如这里所记录的: https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-metrics-top-hits-aggregation.html#_field_collapse_example 特别是,这一部分是一个问题: 因为生产环境配置有: 这意味着我不
弹性搜索不推荐使用方面,建议使用聚合(http://www.Elastic.co/guide/en/elasticsearch/reference/1.x/search-aggregations.html)。 Spring数据弹性搜索目前支持这个吗? 如果有,有样品吗?
我使用的是spring data elasticsearch,当我使用@query注释时,将代码与实际的JSON elasticsearch查询关联起来要容易得多,如本链接参考中的示例所示: https://www.programcreek.com/java-api-examples/index.php?api=org.springframework.data.elasticsearch.anno
我使用Elasticsearch允许用户输入要搜索的术语。例如,我要搜索以下属性'name': 如果使用以下代码搜索或,我希望返回此文档。 我尝试过做一个bool must和做多个术语,但它似乎只有在整个字符串都匹配的情况下才起作用。 所以我真正想做的是,这个词是否以任何顺序包含两个词。 有人能帮我走上正轨吗?我已经在这上面砸了一段时间了。
基数聚合计算不同值的近似计数。但是,为什么即使对于存储在单个碎片中的索引,它也显示不正确的值呢?
有没有办法将弹性搜索GeoHash转换为具有适当缩放级别的bing地图图钉? https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-geohashgrid-aggregation.html