我需要在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
将无法访问。是否可以同时按父字段和嵌套字段排序?
1条答案
按热度按时间llycmphe1#
你的假设是正确的,父等级将不可访问。现在,你也可以
创建两个单独的排序“对象”,一个用于父对象,一个用于嵌套的报价,然后使用排序模式或
迭代
_source
取而代之的是:请注意,由于我们使用的是“offers”
ArrayList
在这里,你需要某种机制来选择一个等级。这取决于您--我只是访问了第一个报价的排名,您可能需要对数组列表进行排序并选择最高的一个。。。如果你喜欢的话,这里有一行: