Я сортирую результаты из Elasticsearch (5.1.1) на основе вычисления значений во вложенных структурах ключ / значение.
Сортировка должна:
- поиск значений по заданным ключам в нескольких вложенных структурах
- умножить эти значения друг на друга
- использовать это умножение как оценку для сортировки
То, что у меня сейчас есть, работает, но оно действительно медленное / неэффективное. Я сделал сценарий Painless из-за расчетов в # 2 выше. Что я делаю, это:
- цикл по всем ключам, чтобы найти их соответствующие значения
- для первого совпадения, сохранить значение в переменной; для последующих совпадений умножьте сохраненное значение на текущее значение и сохраните его в вышеупомянутой переменной
Я думаю, что неэффективность связана с:
- зацикливание всех вложенных элементов (их много на один документ и много документов)
- Я использую
params['_source']
, который имеет репутацию замедления вещей. AFAIK, я должен использовать params['_source']
для адресации вложенных значений в безболезненно
Теперь к вопросу: как я могу решить эту проблему более эффективно? Я иду по этому пути совсем неправильно, или есть способ не использовать params['_source']
?
Мое отображение (вложенная структура "my_ratios"
):
{
"my_index": {
"mappings": {
"my_type": {
"properties": {
"a_value": {
"type": "long"
},
"my_ratios": {
"type": "nested",
"properties": {
"Key": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"Value": {
"type": "float"
}
}
}
}
}
}
}
}
Пример структуры вложенного ключа / значения:
{
{
"Key": "Key1",
"Value": 0.4898
},
{
"Key": "Key2",
"Value": 0.14286
},
{
"Key": "Key3",
"Value": 6.12245
},
...
}