2015-06-21 50 views
0

我在elasticsearch中做多字段排序脚本时遇到问题,例如我想按字段A desc,字段B desc排序。当我用两种排序的脚本进行排序时,它只按字段B desc进行排序。elasticsearch多字段排序脚本

  '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

根据the official documentation for script sorting您的JSON必须looke这样的:

'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来排序你的结果。

所以你必须以某种方式将这两个结合起来。