如何从Elasticsearch获得高于平均水平?

时间:2018-01-28 13:17:36

标签: elasticsearch aggregation querydsl

我对Elasticsearch中的QueryDSL有疑问。 这是一个测试查询。

GET index/_search {
    "size": 0,
    "aggs": {
        "groupByClass": {
            "terms": {
                "field": "group"
            },
            "aggs": {
                "avgGroup": {
                    "avg": {
                        "field": "score"
                    }
                }
            }
        }
    }
}

我想获得比avgGroup更大的值,例如

SELECT * 
FROM index
WHERE score > (SELECT AVG(score) FROM index)

1 个答案:

答案 0 :(得分:0)

Elasticsearch不会为您做到这一点。你需要从外部处理这个问题。使用脚本或在应用程序中。

文件样本:

{
    "id": 1,
    "name":"chemistry",
    "score": 15
}

平均查询:

{ 
    "aggs" : {
        "avg_score" : { "avg" : { "field" : "score" } }
    }
}

然后将avg_score值传递给第二个查询:

{
    "query": {
        "range": {
            "score": {
                "gte": //avg_score //avg_score value set here in your application side
            }
        }
    }
}