Java 如何在Elasticsearch上使用嵌套聚合?
我对elasticsearch很陌生。 我正在使用聚合编写嵌套dsl 输入文档的结构如下所示:Java 如何在Elasticsearch上使用嵌套聚合?,java,
elasticsearch,aggregation,facets,Java,
elasticsearch,Aggregation,Facets,我对elasticsearch很陌生。 我正在使用聚合编写嵌套dsl 输入文档的结构如下所示: { "_source": { "id": 1234, "oid": 6, "education": [ { "school_name": "Harvard", "city" : "Boston",
{
"_source": {
"id": 1234,
"oid": 6,
"education": [
{
"school_name": "Harvard",
"city" : "Boston",
"year": 1965,
"degree": "Undergrad"
},
{
"school_name": "Harvard",
"city" : "Boston",
"year": 1975,
"degree": "Masters"
},
{
"school_name": "Harvard",
"city" : "Boston",
"year": 1958,
"degree": "BA"
}
],
}
},
----另一张唱片。。。等等
*上述文件符合一项记录
目标:我试图找出所有在波士顿学习的学生。
所以,理想情况下,如果我只有上述文件,那么我应该只有1条记录
使用我在下面编写的嵌套聚合查询,波士顿的计数是3
GET cluster_test/index_test/_search
{
"query": {
"bool": {
"must": [
{
"term": {
"oid": {
"value": "6"
}
}
}
]
}
},
"aggs": {
"education": {
"nested": {
"path": "education"
},
"aggs": {
"edu": {
"terms": {
"field": "education.city",
"size": 0
}
}
}
}
}
}
如果有人能指出我哪里出了问题,或者有什么更好的方法来处理这些类型的查询。
感谢您的帮助。您不应该使用聚合,因为您希望筛选在所需城市学习的学生。使用下面这样的过滤器应该会有所帮助
GET cluster_test/index_test/students/_search
{
"filtered" : {
"query" : { "match_all" : {} },
"filter" : {
"nested" : {
"path" : "education",
"filter" : {
"bool" : {
"must" : [
{
"term" : {"education.city" : "Boston"}
}
]
}
}
}
}
}
@javanna你能给我一些见解吗?