我试图在ElasticSearch文档中对类似于the example的聚合进行分区,但没有得到该示例的工作。分组聚合与组
该指数是填充了事件类型:
public class Event
{
public int EventId { get; set; }
public string SegmentId { get; set; }
public DateTime Timestamp { get; set; }
}
的EventId
是唯一的,并且每个事件属于特定SegmentId
。每个SegmentId可以与零到多个事件相关联。
的问题是: 如何获得每个SegmentId
最新EventId
?
我期望独特的片段的数量在1000万的范围内,而独特的事件的数量大一个或两个量级。这就是为什么我认为使用top_hits
本身并不合适,因为suggested here。因此,分区。
实施例:
我已经设置了一个演示索引填入1313个文档(独特EventId
),属于101不同SegmentId
(即13个每段事件)。我希望下面的查询能够正常工作,但是无论我指定哪个partition
数字,都会返回完全相同的结果。
POST /demo/_search
{
"size": 0,
"aggs": {
"segments": {
"terms": {
"field": "segmentId",
"size": 15, <-- I want 15 segments from each query
"include": {
"partition": 0, <-- Trying to retrieve the first partition
"num_partitions": 7 <-- Expecting 7 partitions (7*15 > 101 segments)
}
},
"aggs": {
"latest": {
"top_hits": {
"size": 1,
"_source": [
"timestamp",
"eventId",
"segmentId"
],
"sort": {
"timestamp": "desc"
}
}
}
}
}
}
}
如果我删除include
并设置size
大于101的值,我为每一个细分的最新事件。然而,我怀疑这是一个百万桶的好方法...
你是正确的,我想要的是聚合上的滚动,这是不支持的。不过,我用分区解决了它(请参阅我接受的答案)。不过谢谢你的建议!他们可能在另一种情况下派上用场! (: – Reyhn