根据数组类型字段的大小对ElasticSearch进行排序

时间:2014-08-11 07:59:49

标签: indexing elasticsearch

我有一个ElasticSearch集群,我必须根据对象数组字段'内容的大小执行排序查询。

到目前为止,我已经尝试过,

{
    "size": 10,
    "from": 0,
    "fields" : ['name'],
    "query": {
        "match_all": {} 
    },
    "sort" : {
        "script" : {
        "script" : "doc['contents'].values.length",
        "order": "desc"
        }
    }
}

上面的查询给了我SearchPhaseExecutionException。 ES查询是使用elasticsearch.angular.js从客户端进行的。

任何形式的帮助都会受到欢迎。

1 个答案:

答案 0 :(得分:3)

版本1.2.x中的脚本的安全性已更改。在ES_HOME/config/scripts中创建名为script_score.mvel的文件并添加脚本:

doc.containsKey('content') == false ? 0 : doc['content'].values.size() 

重新启动Elasticsearch并将您的查询更改为:

{
    "size": 10,
    "from": 0,
    "query": {
        "match_all": {}
    },
    "sort": {
        "_script": {
            "script": "script_score",
            "order": "desc",
            "type" : "string"
        }
    }
}

有关详细信息,请查看此处:

http://www.elasticsearch.org/blog/scripting-security/