本文介绍了ElasticSearch:在 _score 字段上聚合?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想使用 统计数据_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 字段上聚合?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-26 06:18