我在弹性搜索中执行多字段排序脚本时遇到问题,例如我想按字段A desc,字段B desc排序。当我用两种方式编写脚本时,它只按字段B desc进行排序。
'sort': [
{
'_script' : {
'script' : 'if (doc['+'\''+sortColumn1+'\''+'].value==null) {return '+'\''+'\''+'} else {return doc['+'\''+sortColumn1+'\''+'].value} ',
'type' : sortType1,
'order' : sortOrder1,
},
'_script' : {
'script' : 'if (doc['+'\''+sortColumn2+'\''+'].value==null) {return '+'\''+'\''+'} else {return doc['+'\''+sortColumn2+'\''+'].value} ',
'type' : sortType2,
'order' : sortOrder2
}
}
]
答案 0 :(得分:0)
根据the official documentation for script sorting你的JSON必须像这样说:
'sort': {
'_script' : {
'script' : 'if (doc['+'\''+sortColumn1+'\''+'].value==null) {return '+'\''+'\''+'} else {return doc['+'\''+sortColumn1+'\''+'].value} ',
'type' : sortType1,
'order' : sortOrder1,
},
'_script' : {
'script' : 'if (doc['+'\''+sortColumn2+'\''+'].value==null) {return '+'\''+'\''+'} else {return doc['+'\''+sortColumn2+'\''+'].value} ',
'type' : sortType2,
'order' : sortOrder2
}
}
并且很清楚为什么排序仅适用于字段B.因为您覆盖了键_script
而最后一个是生效的键。因此,您只能定义一个_script
来对结果进行排序。
所以你必须以某种方式将这两者合二为一。