#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"
}
]
}
]