Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Elasticsearch上使用嵌套聚合?_Java_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch_Aggregation_Facets - Fatal编程技术网 elasticsearch,aggregation,facets,Java,elasticsearch,Aggregation,Facets" /> elasticsearch,aggregation,facets,Java,elasticsearch,Aggregation,Facets" />

Java 如何在Elasticsearch上使用嵌套聚合?

Java 如何在Elasticsearch上使用嵌套聚合?,java,elasticsearch,aggregation,facets,Java,elasticsearch,Aggregation,Facets,我对elasticsearch很陌生。 我正在使用聚合编写嵌套dsl 输入文档的结构如下所示: { "_source": { "id": 1234, "oid": 6, "education": [ { "school_name": "Harvard", "city" : "Boston",

我对elasticsearch很陌生。 我正在使用聚合编写嵌套dsl

输入文档的结构如下所示:

   {
        "_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你能给我一些见解吗?