2015-06-21 2 views
0

У меня возникли проблемы с созданием многопоточного скрипта сортировки в elasticsearch, например, я хочу сортировать по полю A desc, field B desc. Когда я делаю сценарий с двумя типами, он выполняет сортировку только по полю B desc.elasticsearch multi field sort script

  '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 бы lõoke так:

'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, чтобы отсортировать результат.

Таким образом, вы должны как-то объединить эти два в одно.