Сортировка документа на основе родительских вложенных полей без использования скрипта

#elasticsearch #kibana

Вопрос:

У меня есть требование сортировать документы на основе оценки родителей и детей. Я могу сделать это с помощью безболезненного сценария, но это очень медленно. Есть ли какой — либо другой способ добиться этого без безболезненного сценария?

 {
 "query": {
   "match_all": {}
 },
"sort": [
 {
  "_script": {
    "type": "number",
    "script": {
      "lang": "painless",
      "source": "for (int i = 0; i < params._source['customers'].length;   i) { if(params._source['customers'][i].customerNumber == params.customerNumber amp;amp; params._source['customers'][i].score != null) { return params._source['customers'][i].score; } } return (params._source['score'] != null) ? params._source['score'] : -10",
      "params": {
        "customerNumber": "S1"
      }
    },
    "order": "desc"
  }
 }
],
"from": 0,
"size": 10
}
 

и мои данные будут выглядеть так , как вы можете заметить, что у fiedl на самом деле вообще нет атрибута score.

 [
 {
  "score": 1,
   "customers": [
    {
      "customerNumber": "S1",
      "score": 2
    },
   {
    "customerNumber": "S2",
    "score": 3
   }
 ]
 },
 {
  "score": 4,
  "customers": [
    {
     "customerNumber": "S1"
   },
   {
     "customerNumber": "S2"
   }
 ]
},
 {
  "customers": [
   {
      "customerNumber": "S1"
   },
   {
     "customerNumber": "S2"
   }
  ]
 }
]