Короткий ответ :
Вам не нужно загружать все в память, поскольку этот процесс может быть особенно медленным для больших коллекций документов (что еще хуже, инвертированный индекс может даже не помещаться в память).
Длинный ответ :
Инвертированный индекс обычно хранится на диске и загружается на основе динамического c в зависимости от запроса ... например, если запрос «переполнение стека», вы попадаете в отдельные списки, соответствующие терминам «стек» и «переполнение» ...
Структура файла для инвертированного списка представляет собой сочетание обеих фиксированных длин. и компоненты переменной длины. Информация переменной длины хранится как указатели .
Поскольку члены (в основном, строки) имеют переменную длину, они преобразуются в целые числа (фиксированная длина 4/8 байтов). Отображение обычно хранится в памяти как таблица ha sh (#terms обычно не так велика, порядка 100 КБ, что легко помещается в памяти).
Учитывая термин, вы должны посмотреть его в хэш-таблице in-mem и получите ее id . Затем вы используете id для прямого перехода ( произвольный доступ со смещением ) к его местоположению на диске. Это местоположение содержит указатель на список документов, содержащих этот термин (этот список имеет переменную длину), который необходимо загрузить в память.
После загрузки сообщений для всех условий запроса (обычно это не большое число ), вы можете агрегировать оценки для всех документов, просматривая эти списки (обычно эти списки сортируются по идентификаторам документов).
Схема c Диаграмма приведенного выше описания: