2015-06-21 164 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來排序你的結果。

所以你必須以某種方式將這兩個結合起來。