我想在字段上使用stats或extended_stats聚合,_score但是找不到完成此操作的任何示例(即,似乎只能将聚合与实际文档字段一起使用)。
_score
是否有可能计算出“元数据”在ElasticSearch查询响应每个命中字段请求集合(例如,_score,_type,_shard,等等)?
_type
_shard
我假设答案是“否”,因为未对类似字段_score进行索引…
注意:就最新版本的Elasticsearch而言,原始答案现在已过时。使用Groovy脚本编写的等效脚本为:
{ ..., "aggregations" : { "grades_stats" : { "stats" : { "script" : "_score" } } } }
为了使此工作有效,您将需要启用动态脚本,或者甚至更好的方法是,存储基于文件的脚本并按名称执行(通过不启用动态脚本来增加安全性)!
您可以使用脚本,并使用doc.score引用分数。更多详细信息,请参见ElasticSearch的脚本文档。
统计汇总示例如下:
{ ..., "aggregations" : { "grades_stats" : { "stats" : { "script" : "doc.score" } } } }
结果看起来像:
"aggregations": { "grades_stats": { "count": 165, "min": 0.46667441725730896, "max": 3.1525731086730957, "avg": 0.8296855776598959, "sum": 136.89812031388283 } }
甲直方图也可以是有用的聚合:
"aggs": { "grades_histogram": { "histogram": { "script": "doc.score * 10", "interval": 3 } } }
直方图结果:
"aggregations": { "grades_histogram": { "buckets": [ { "key": 3, "doc_count": 15 }, { "key": 6, "doc_count": 103 }, { "key": 9, "doc_count": 46 }, { "key": 30, "doc_count": 1 } ] } }