上文中,添加了6个电影的document,接下来做这些document的聚合分析,统计等.
上文添加的6个电影数据中都包含有genres 的一个数组
统计每个genres下的电影数量
1 | GET /movies/movie/_search |
运行一下,会发现报错 如下:
1 | { |
错误原因是:
默认情况下,在文本字段上禁用Fielddata。在[genres]上设置fielddata=true,以便通过反转索引来加载内存中的fielddata。请注意,这可能会占用大量内存
这里我们需要将文本field的fielddata属性设置为true,具体原因之后再说.
1 | PUT /movies/_mapping/movie |
然后再执行上面的查询, 返回结果为:
1 | { |
具体的聚合结果返回到了 aggregations 下的 buckets 下, key为每个genres下的元素, doc_count 是包含该key的电影数量.
对名称中包含kill的电影,计算每个genres下的电影数量
1 | GET /movies/movie/_search |
其实就是在上个查询的基础上加了一个query条件,先查询query,将返回的结果再进行聚合分析
先按genres分组,然后计算每个genres下的电影的年份的平均值
1 | GET movies/movie/_search |
平均值计算是按照每组里面的数据进行平均
计算每个genres下的电影的平均年份,并且按照平均年份降序排序
1 | GET movies/movie/_search |
在上一个分组计算平均值的基础上 在上层的terms里面加一个order 要排序的字段就是下面一层聚合计算平均值的名称”avg_year”
按照指定的年份范围区间进行分组,然后在每组内再按照genres进行分组,最后再计算每组的平均年份
上文中添加的数据 电影年份有 1962 1972 1979 2007 2003, 用range来进行分组 分为1960-1970 1970-1980 2000-2010 三组
1 | GET /movies/movie/_search |
三组年份的电影分好以后,再往下一层按genres分一层,分好之后再往下聚合,用来计算平均值
1 | GET /movies/movie/_search |