Лучшая практика для создания настраиваемого сопоставления в агрегации Elasticsearch
Я хочу выполнить индивидуальную агрегацию путем сопоставления определенного поля в документе ES.
Я стараюсь использовать сценарий агрегирования терминов . Существуют сотни сопоставлений, поэтому я должен поместить их все в HashMap:
GET /myindex/_search
{
"query": {
"match_all": {}
},
"aggs": {
"myagg": {
"terms": {
"script": {
"source": "Map m = new HashMap(); m.put('a', 'A'); m.put('b', 'A'); m.put('bb', 'CC'); ... return m.get(doc['foo.keyword'].value)",
"lang": "painless"
}
}
}
},
"size": 0
}
Это уродливо, и производительность настолько плохая, хотя я использую сохраненный скрипт. Понятия не имею, почему в моем сценарии выполнение занимает так много времени.
Я также пробовал агрегировать метрики по сценарию . Это лучше, но все же медленнее по сравнению с обычным агрегированием терминов.
Есть ли способ ускорить отображение? (кроме полей времени выполнения, поскольку моя версия ES не поддерживает его)
1 ответ
tldr, вы можете попробовать поля времени выполнения, если они у вас есть, но есть вероятность, что они также не будут быстрыми. это неудачная природа сценариев в Elasticsearch на данный момент
лучше всего будет то, что ExplodZe говорит выше, и проделайте эту работу до процесса загрузки, чтобы ускорить время запроса