Быстрый файловый поиск

Создание файлового индекса

Самый простой способ - воспользоваться мастером создания индексов. Вызов мастера подробно описан на соответствующей странице. На странице типовых сценариев надо выбрать 'Мои файлы', все остальное произойдет автоматически:

создание файлового индекса

Использование файлового индекса

Единственная хитрость в использовании файлового индекса - отличие поиска по начальному фрагменту имени и по любой части имени файла.

По умолчанию, когда введена просто текстовая строка, программа будет искать файлы с именами, начинающимися с такой строки:

файловый поиск

Если же требуется найти файлы, имена которых содержат заданную строку в любой позиции, то следует окружить строку двумя символами звездочки *, как показано далее:

файловый поиск

В некоторых случаях полезной может оказаться возможность отфильтровать находимые файлы по расширениям. Удобнее всего использовать для этого поле задания масок файлов под полем ввода текста запроса:

поиск файлов с фильтрацией по расширению

Технические особенности реализации

Алгоритм построения индексной базы для файлового поиска использует ряд приемов для максимально эффективного использования аппаратной и программной составляющих дисковой подсистемы. В некоторых случаях эти приемы могут быть видны пользователю по влиянию на общую производительность системы.

Дело в том, что для ускорения обходя файловой системы программа запускает параллельно несколько потоков индексирования. Их число зависит от двух факторов - числа ядер процессора и числа физических жестких дисков (не путать с разделами на диске).

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

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

Другой важный аспект реализации - временные файлы, создаваемые при индексировании. Их размещение определяется системными параметрами и обычно по-умолчанию настроено на специальную папку в профиле текущего пользователя. После завершения индексирования программа удаляет эти временные файлы. Тем не менее их создание может повлиять на работу системы из-за размера, который может достигать пары гигабайт для сильно заполненных файловых систем.

Устойчивость файлового индекса к сбоям

Допустим, с помощью мастера индексирования был создан индекс по сценарию 'Мои файлы'. Это как раз индекс для быстрого файлового поиска, в индексной базы при этом сохраняются только имена файлов. Поисковая система будет периодически перестраивать этот индекс, чтобы синхронизировать индекс и файловую систему. Кстати, фоновое обновление можно запретить временно - через меню программы в трее, или через конфигурацию. Выбор момента начала обновления лежит на операционной системе - как только она фиксирует достаточно длительный простой, Integra рассматривает необходимость обновления. Соответствующие настройки можно даже найти в Планировщике Задач (Панель Управления-Администрирование-Планировщик Заданий), там присутствует задание с названием 'Integra_desktop_search'.

Обновление файлового индекса занимает немало времени, в зависимости от заполненности дисков это может быть и десятки минут. К слову, индексатор построен таким образом, что при первом создании файлового индекса он в полную силу использует многопоточность - для каждого физического жесткого диска запускается два потока индексирования. Это может серьезно загрузить систему, так как целиком полагается на способность дисковой подсистемы параллельно обрабатывать множество запросов к дискам. Особо неудачные конфигурации аппаратуры могут при этом ощутимо подтормаживать работу всех приложений, особую пикантность ситуации при этом демонстрирует Диспетчер задач, который оптимистично рапортует о 1-2 % загрузке процессора.

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

Новая версия движка работает более хитроумно, реализуя стандартный для баз данных механизм атомарности операции. После такого неудачного прерывания процесса обновления движок автоматически откатится к предыдущей версии индекса. Более того, файлы поврежденной версии индексной базы будут автоматически удалены в ходе очередного обновления.

Из практических соображений транзакционность вышеописанного алгоритма имеет ограничение. Движок не предпринимает никаких специальных мер, чтобы заставить операционную систему сбросить буфера записи формируемой индексной базы, поэтому теоретически возможна ситуация, когда движок считает обновление файлового индекса завершенным и делает соответствующую пометку в своих таблицах, а на самом деле ОС еще не закончила запись данных на диск. Если в этот момент случится перезагрузка - индексная база будет разрушена, и ее придется обновлять вручную. Это безусловно не полное соответствие определению A.C.I.D , но усложнять алгоритм смысла нет, так как индексную базу можно достаточно легко восстановить в любой момент.

Где скачать поисковую систему и SDK

Скачать SDK поисковой системы с примерами и другие компоненты можно здесь поисковая система

  © Mental Computing 2010
изменено 04-Jun-10