Lucene: загрузка файлов индекса при поиске? - PullRequest
2 голосов
/ 08 февраля 2012

Кто-нибудь может объяснить, как индексные файлы загружаются в память при поиске?

Загружается ли весь файл (fnm, tis, fdt и т. Д.) За один раз или по частям?

Как отдельные сегментызагружены и в каком порядке?

Как зашифровать индекс Lucene?

1 Ответ

2 голосов
/ 10 февраля 2012

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

Самое важное ограничение, которое учитывается при разработке формата индекса, заключается в том, что время поиска дискаотносительно длинные (на жестких дисках с пластинчатым основанием, которые до сих пор наиболее широко используются).Хорошая оценка состоит в том, что время передачи на байт составляет от 0,01 до 0,02 мкс, а среднее время поиска головки диска составляет около 5 мс!

Таким образом, часть, которая хранится в памяти, обычно используется только словарем.узнать начальный блок списка рассылок на диске *.Другие части загружаются только по требованию, а затем удаляются из памяти, чтобы освободить место для других поисков.

Что касается шифрования, то это зависит от того, нужно ли сохранять индекс зашифрованным все время (даже когда впамяти) или, если достаточно, шифровать только индексные файлы.Что касается последнего, я думаю, что зашифрованной файловой системы будет достаточно.Что касается первого, это также, безусловно, возможно, поскольку различные методы сжатия индекса уже существуют.Однако я не думаю, что он широко используется, так как первое и главное требование для полнотекстового движка - это скорость.

[*] Это не так просто, поскольку мы выполняем двоичный поиск по словарю., поэтому мы должны убедиться, что все записи в первой структуре имеют одинаковую длину.Поскольку это не совсем так, как в обычных словах в словаре, а применение отступов обходится слишком дорого (подумайте о длине слова для некоторых химических веществ), мы фактически поддерживаем два уровня словаря, первый (который должен уместиться в памяти ихранится в .tii файлах) сохраняет отсортированный список начальных позиций терминов во втором индексе (.tis файлов).Затем второй индекс представляет собой объединенный массив всех терминов в возрастающем порядке вместе с указателем на сектор в файле .frq.Второй индекс часто помещается в память и загружается в начале, но это может быть невозможно, например, для биграмных индексов.Также обратите внимание, что в течение некоторого времени Lucene по умолчанию не использует отдельные файлы, а так называемые составные файлы (с расширением .cfs), чтобы сократить количество открытых файлов.

...