我有以下形式的弹性搜索群集:
{
"_id":"xxxx"
"contents":[
{
"name":"abc",
"age":"24"
}
]
},
{
"_id":"yyyy"
"contents":[
{
"name":"xyz",
"age":"25"
},
{
"name":"pqr",
"age":"29"
},
]
}
我必须对对象数组字段'contents'的大小执行基于排序的查询。
我试过了:
{
"size": 10,
"from": 0,
"query": {
"match_all": {}
},
"sort" : {
"_script" : {
"script": "doc['contents.name'].values.size()",
"order": "desc",
"type" : "string",
}
}
}
上述查询有时会给我正确的结果,但大多数时候它无法按排序顺序给出结果。
答案 0 :(得分:1)
您的contents
字段是数组,而不是对象。因此,当您尝试访问脚本中的contents.name时,它是未定义的。你应该得到contents
数组的大小:
{
"size": 10,
"from": 0,
"query": {
"match_all": {}
},
"sort" : {
"_script" : {
"script": "doc['contents'].values.size()",
"order": "desc",
"type" : "string",
}
}
}