В давние времена я работал IT-специалистом в одной компании и в какой-то момент возникла задача поиска локального хранилища документов.
Желательно было искать не только по названию файла, но и по содержимому.
В то время еще были популярны локальные поисковые системы, такие как Архивариус, и даже у Яндекса была отдельная поисковая система.
Но это не были корпоративные решения; их нельзя было централизованно развернуть для совместного использования.
Яндекс, ради честности, начал делать что-то похожее , но потом отказался от этого.
Но во всех этих решениях не было того, что мне нужно:
- Централизованная установка
- Результаты поиска с учетом прав доступа
- Поиск по содержимому документа
- Морфология
Я объясню по пунктам, что я имею в виду, чтобы избежать различных интерпретаций и недоразумений.
Централизованная установка – клиент-серверное исполнение.
У всех перечисленных выше решений есть одна принципиальная проблема — каждый пользователь создает свой локальный поисковый индекс, что в случае больших объемов хранения задерживает индексацию, увеличивает профиль пользователя на машине и вообще неудобно в случае прихода нового сотрудника или переезд на новую машину.
Результаты поиска с учетом прав – здесь все просто – результаты должны соответствовать правам сотрудника на файловый ресурс.
В противном случае получается, что даже если у сотрудника нет прав на ресурс, он может прочитать всё из кэша поиска.
Это будет неловко, вы согласны? Поиск по содержимому документа - поиск по тексту документа, здесь все очевидно, как мне кажется, и никаких расхождений быть не может. Морфология еще проще.
Мы указали в запросе «нож» и получили и «нож», и «ножи», «нож» и «нож».
Хотелось бы, чтобы это работало на русском и английском языках.
С постановкой задачи определились, можно переходить к реализации.
В качестве поисковой системы я выбрал систему Sphinx, а языком разработки интерфейса — C# и .
net, в результате проект получил название Vidocq в честь французского сыщика.
Ну типа он все найдет и все.
Архитектурно приложение выглядит так: Поисковый робот рекурсивно обходит файловый ресурс и обрабатывает файлы в соответствии с заданным списком расширений.
Обработка заключается в получении содержимого файла, сжатии текста – из текста удаляются кавычки, запятые, лишние пробелы и т.п.
, затем содержимое помещается в базу данных (MS SQL), делается пометка о дате размещение, и робот движется дальше.
Индексатор Sphins работает напрямую с полученной базой данных, формируя собственный индекс и возвращая в ответ указатель на найденный файл и фрагмент найденного фрагмента текста.
На C# была разработана форма, которая взаимодействовала со Sphinx через соединитель MySQL. Sphinx предоставляет массив файлов в соответствии с запросом, затем массив фильтруется по правам доступа пользователя, выполняющего поиск, вывод форматируется и показывается пользователю.
Нам понадобится сохранить следующую информацию о файле:
- Идентификатор файла
- Имя файла
- Путь к файлу
- Содержимое файла
- Расширение
- Дата добавления в базу данных
Далее настройте саму поисковую систему.
Весь конфиг я описывать не буду, он будет доступен в архиве проекта, а осветлю лишь основные моменты.
Основной запрос, формирующий базу данных исходные документы: document_base
Теги: #.{
NET #Ненормальное программирование #поиск #сфинкс #Я сделал
-
Вайцзеккер, Карл Фридрих Фон
19 Oct, 24 -
Управление Демонами Или Автозапуск В Linux
19 Oct, 24 -
Колония. Глава 2: Ответ На Сигнал Бедствия
19 Oct, 24 -
Простая Наука - Дайджест Экспериментов №41
19 Oct, 24 -
10 Интересных Интернет-Сервисов
19 Oct, 24