问题描述
我想使用 统计数据 或 _score 字段上的 >extended_stats 聚合,但找不到任何完成此操作的示例(即,您似乎只能对实际文档字段使用聚合).
I would like to use the stats or extended_stats aggregation on the _score
field but can't find any examples of this being done (i.e., seems like you can only use aggregations with actual document fields).
是否可以为 ElasticSearch 查询响应(例如,_score
、_type
、_shard
等)?
Is it possible to request aggregations on calculated "metadata" fields for each hit in an ElasticSearch query response (e.g., _score
, _type
, _shard
, etc.)?
我假设答案是否定的,因为像 _score
这样的字段没有被编入索引...
I'm assuming the answer is 'no' since fields like _score
aren't indexed...
推荐答案
注意:就最新版本的 Elasticsearch 而言,原始答案现已过时.使用 Groovy 脚本的等效脚本是:
Note: The original answer is now outdated in terms of the latest version of Elasticsearch. The equivalent script using Groovy scripting would be:
{
...,
"aggregations" : {
"grades_stats" : {
"stats" : {
"script" : "_score"
}
}
}
}
为了使这项工作有效,您需要启用动态脚本,或者更好的是,存储基于文件的脚本并按名称执行它(通过不启用动态脚本来增加安全性)!
In order to make this work, you will need to enable dynamic scripting or, even better, store a file-based script and execute it by name (for added security by not enabling dynamic scripting)!
您可以使用脚本并使用 doc.score 参考分数.ElasticSearch 的脚本文档.
You can use a script and refer to the score using doc.score. More details are available in ElasticSearch's scripting documentation.
示例统计数据聚合可以是:
A sample stats aggregation could be:
{
...,
"aggregations" : {
"grades_stats" : {
"stats" : {
"script" : "doc.score"
}
}
}
}
结果如下:
"aggregations": {
"grades_stats": {
"count": 165,
"min": 0.46667441725730896,
"max": 3.1525731086730957,
"avg": 0.8296855776598959,
"sum": 136.89812031388283
}
}
直方图 也可能是一个有用的聚合:
A histogram may also be a useful aggregation:
"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
}
]
}
}
这篇关于ElasticSearch:在 _score 字段上聚合?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!