我有一个像这样的索引(举一个抽象的例子)
{"name": "John", "district": 1, "lastName": "Smith"},
{"name": "Anne", "district": 1, "lastName": "Smith"},
{"name": "Mary", "district": 2, "lastName": "Smith"},
{"name": "Bobby", "district": 2, "lastName": "Smith"},
{"name": "Nick", "district": 1, "lastName": "Smith"},
{"name": "Bob", "district": 3, "lastName": "Smith"},
{"name": "Kenny", "district": 1, "lastName": "Smith"}
我想做一些类似于SQL的GROUP BY name, district, lastName LIMIT 100
,但要进行弹性搜索。
我认为我需要使用嵌套的terms
聚合(术语aggs内的术语aggs内术语aggs内)。
但是我想将所有分组结果限制为100个(而不是每个区100个)
如何实现?有没有一种方法可以执行此操作而无需查询比我们需要更多的内容?
答案 0 :(得分:0)
您可以使用过滤器或在
之类的聚合中定义大小"aggs": {
"NAME": {
"filter": {
"term": {
"ATTRIBUTES.ATTR_TYPE": "EDUCATION_DEGREE"
}
},
"aggs": {
"NAME": {
"terms": {
"field": "ATTRIBUTES.DESCRIPTION",
"size": 100
}
}
}
}
}
}
}
答案 1 :(得分:0)
您可以从Elasticsearch 6.1开始使用composite aggregation。您可以定义size
参数以将存储桶限制为100个。
希望有帮助!