我有一个ElasticSearch集群,我必须根据对象数组字段'内容的大小执行排序查询。
到目前为止,我已经尝试过,
{
"size": 10,
"from": 0,
"fields" : ['name'],
"query": {
"match_all": {}
},
"sort" : {
"script" : {
"script" : "doc['contents'].values.length",
"order": "desc"
}
}
}
上面的查询给了我SearchPhaseExecutionException。 ES查询是使用elasticsearch.angular.js从客户端进行的。
任何形式的帮助都会受到欢迎。
答案 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"
}
}
}
有关详细信息,请查看此处: