我需要同时按父字段和嵌套字段在 Elasticsearch 中排序。我的数据是这样的:
[
{
"id": "1",
"rank": 8,
"price": 12.45,
"offers": [
{
"id": "777",
"rank": 12,
"price": 45.75
}
]
},
{
"id": "2",
"rank": 35,
"price": 5.95,
"offers": null
}
]
我需要对结果进行排序rank
以这样的方式,当offers
不是null
我应该采取嵌套offers.rank
值,否则我应该带父母rank
价值。
我尝试了这个脚本,但它不起作用:
"sort": [
{
"_script": {
"script": {
"source": "doc['offers'].size()==0 ? doc['rank'].value : doc['offers.rank'].value",
"lang": "painless"
},
"type": "number",
"order": "asc"
}
}
]
它不起作用可能是因为offers.rank
来自嵌套offers
对象,该对象不可访问。但我不明白如何处理它 - 如果我为整个脚本添加嵌套条件,那么我的父值doc['rank'].value
将无法再访问。可以同时按父字段和嵌套字段在这里排序吗?