elasticsearch多字段排序脚本

时间:2015-06-21 01:27:43

标签: sorting elasticsearch

我在弹性搜索中执行多字段排序脚本时遇到问题,例如我想按字段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
                        }

                }
            ]

1 个答案:

答案 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来对结果进行排序。

所以你必须以某种方式将这两者合二为一。