ElasticSearch:_score字段上的聚合?

时间:2014-07-03 15:22:04

标签: elasticsearch

我想在_score字段上使用statsextended_stats聚合,但无法找到任何此类示例(例如,您似乎只能将聚合与实际文档字段一起使用)。

是否可以请求对计算的"元数据进行聚合" ElasticSearch查询响应中每个匹配的字段(例如_score_type_shard等)?

我假设答案是'没有'因为像_score这样的字段没有被编入索引......

2 个答案:

答案 0 :(得分:12)

注意:根据最新版本的Elasticsearch,原始答案现已过时。使用Groovy脚本的等效脚本将是:

{
    ...,
    "aggregations" : {
        "grades_stats" : { 
            "stats" : { 
                "script" : "_score" 
            } 
        }
    }
}

为了实现这一目标,您需要启用动态脚本,或者甚至更好地存储基于文件的脚本并按名称执行(为了通过不启用动态脚本来增加安全性)!


您可以使用脚本并使用doc.score引用分数。 ElasticSearch的脚本documentation中提供了更多详细信息。

样本统计数据聚合可以是:

{
    ...,
    "aggregations" : {
        "grades_stats" : { 
            "stats" : { 
                "script" : "doc.score" 
            } 
        }
    }
}

结果如下:

"aggregations": {
    "grades_stats": {
        "count": 165,
        "min": 0.46667441725730896,
        "max": 3.1525731086730957,
        "avg": 0.8296855776598959,
        "sum": 136.89812031388283
    }
}

histogram也可能是一个有用的聚合:

"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
            }
        ]
    }
}

答案 1 :(得分:6)

<input type="radio" onclick="Element.show('indicator_radio_term_190');render_selected_term('190','1','275464','AQCB Number')" value="190" name="radio_190"/> <input type="radio" onclick="Element.show('indicator_radio_term_179');render_selected_term('179','1','275464','AQCB Number (iLink)')" value="179" name="radio_179"/> <input type="radio" onclick="Element.show('indicator_radio_term_19');render_selected_term('19','1','275464','Acceptance')" value="19" name="radio_19"/> <input type="radio" onclick="Element.show('indicator_radio_term_148');render_selected_term('148','1','275464','Account (iLink)')" value="148" name="radio_148"/> <input type="radio" onclick="Element.show('indicator_radio_term_206');render_selected_term('206','1','275464','Additional Non-standard Terms')" value="206" name="radio_206"/> <input type="radio" onclick="Element.show('indicator_radio_term_220');render_selected_term('220','1','275464','Assigned Contract Manager (iLink)')" value="220" name="radio_220"/> <input type="radio" onclick="Element.show('indicator_radio_term_12');render_selected_term('12','1','275464','Assignment')" value="12" name="radio_12"/> <input type="radio" onclick="Element.show('indicator_radio_term_188');render_selected_term('188','1','275464','Authorized Purchasing Entity(ies)')" value="188" name="radio_188"/> <input type="radio" onclick="Element.show('indicator_radio_term_226');render_selected_term('226','1','275464','Award (iLink)')" value="226" name="radio_226"/> <input type="radio" onclick="Element.show('indicator_radio_term_196');render_selected_term('196','1','275464','Award Amount')" value="196" name="radio_196"/> 似乎不再起作用了。使用doc.score似乎完美无缺。

示例:

_score