Какую пользу получает задача агрегации от инвертированного индекса в Elasticsearch - PullRequest
0 голосов
/ 11 февраля 2019

Я понимаю, что задача поиска может получить выгоду от инвертированного индекса в Elasticsearch.

Но я не понимаю, как задача агрегации извлекает выгоду из инвертированного индекса.Например, если у нас есть документы ниже

id, name,   gender, age, weight
1,  Tom,    m,      29,  100
2,  James,  m,      28,  120
3,  Lucy,   f,      27,  80
4,  Kevin,  m,      28,  150
5,  Jessica,f,      22,  100
....

Если я хочу получить средний вес для возраста = 28, с использованием перевернутого индекса упругого поиска шаги должны быть такими:

1. get the doc list of age = 28 which may looks like [id=2, id=4 ...]
2. Read each doc to get the weight
3. Add the weight and divide by the number of records

Этоне кажется эффективным, особенно для этапа 2. Поскольку расположение документа на диске не является смежным, поэтому Elasticsearch не может загрузить данные за одно чтение, его нужно читать много раз.

Так почему же Elasticsearch может иметь такую ​​хорошую производительность при агрегации?Использует ли он какую-то другую структуру данных помимо инвертированного индекса для агрегирования?Мое понимание неправильно для шагов агрегации?

1 Ответ

0 голосов
/ 11 февраля 2019

Здесь необходимо понять, что инвертированный индекс и другие соответствующие файлы Lucene не доступны на диске, но отображается в память (а не в кучу!) Lucene.

Таким образом, не вдаваясь в подробности, именно в этом случае ES обеспечивает отличную производительность как для поиска, так и для агрегирования.

...