четверг, 1 марта 2012 г.

Полнотекстовый поиск в Ubuntu

Как-то не сложилось в линуксе с поиском по содержимому файлов. Отчасти, потому, что для продвинутых пользователей есть неплохие консольные утилиты типа grep, а для обычных была замечательная программа Google Desktop Search. Как известно, некоторое время назад Google прекратил ее разработку и поддержку для "чужих" операционных систем в связи с продвижением своего Android. Тем не менее Google Desktop по-прежнему мог использоваться в Ubuntu до версии "11.10", в которой эта программа при своей работе стала постоянно загружать процессор на 100%. Теперь ближе к делу.

Судя по отзывам наиболее удобной открытой системой полнотекстового поиска является Recoll. Установить его можно либо через Центр приложений Ubuntu либо в терминале
sudo apt-get install recoll

Настройка Recoll

  1. Основные пользовательские настройки хранятся в ~/.recoll, но можно настроить и через графический интерфейс: Настройки>Настройки индексирования. В индексируемых папках лучше убрать домашний каталог ~ и прописать пути только к нужным директориям, иначе в результатах будет слишком много "мусора" из служебных директорий. Также можно поставить фильтры не только на пути, но и на имена файлов, но это почему-то делается уже на другой вкладке с загадочным названием Частные параметры в ячейке Пропускаемые имена. Recoll понимает значки типа * обозначающие произвольную последовательность символов, так что к игнорируемым именам файлов я добавил  *.JPG *.jpg *.png .~*
  2. Во вкладке Настройки>Настройки индексирования>Частные параметры можно указать кодировку по умолчанию, я указал UTF-8, но некоторые текстовые файлы, в частности тексты программ на python индексировались в неправильной кодировке. С этим удалось справится следующим образом. В Synaptic я просмотрел имена всех файлов, которые создаются при установке Recoll и нашел среди них, тот который судя по названию отвечал за работу с файлами нужного типа. Далее открыл этот файл в графическом редакторе с помощью команды в терминале
     
    sudo gedit /usr/share/recoll/filters/rclpython
    и заменил в том файле все вхождения iso-8859-1 на utf-8. После этого обновил индекс с помощью команды в терминале
    recollindex -z
    (можно также очистить результаты и проиндексировать снова в графической оболочке) и вуаля: все файлы индексируются в правильной кодировке!
  3. Далее можно изменить формат выдачи результатов поиска, я например использую следующую строку форматирования результатов поиска Настройки>Конфигурация>Интерфейс
    <table><tr><td><img src='%I'></td><td><a href="E%N"><b>%T</b></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;%U<br><br>%A %K</td></tr></table>
    В этой строке убрано все лишнее и оставлено только имя файла со ссылкой и вырезка из файла с найденными ключевыми словами. Кроме того, в интерфейсе Recoll есть возможность представления результатов в виде таблицы (иконка с табличкой на верхней панели), если переключить на этот вид, то можно упорядочит результаты не только по релевантности, но и по дате. Замечательно, что Recoll умеет запоминать вид сортировки, я например предпочитаю сортировку по дате как это было по-умолчанию в Google Desktop Search.
  4. Остается только включить регулярное индексирование с помощью утилиты cron, которое запускается ежедневно в 4 часа утра когда компьютер наверняка не занят ничем особо важным. Команда индексирования
    recollindex > ~/tmp/recolltrace 2>&1
    Cron можно настроить с помощью графического интерфейса gnome-schedule.
Таким образом правильно настроенный Recoll даже лучше Google Desktop Search, поскольку не грузит систему когда ему вздумается, не сидит постоянно в оперативной памяти ну и самое главное - не отправляет регулярно данные о вас Большому брату.

Серебряная пуля

Волшебная команда для полнотекстового поиска, когда нужно искать в тех директориях, которые не индексируются Recoll:
find /путь_к_директории_для поиска -name 'маска имени файла' -print0 | xargs -0 grep 'искомый текст'

Литература для дополнительного чтения:

Recoll User Manual

UPD

Для быстрого запуска Recoll можно добавить клавиатурное сочетание, например, Ctrl+Alt+R, однако, запускать лучше не сам Recoll, а специальный скрипт, которые идет в комплекте с Recoll. Называется этот скрипт hotrecoll.py, где он находится можно с помощью следующей команды в терминале:
locate hotrecoll.py

Этот скрипт сам определяет запущен ли уже Recoll и если он запущен, но находится в свернутом состоянии, то скрипт сам его развернет. Это позволяет не плодить множество запущенных окон. Небольшой недостаток этого скрипта в том, что если окно Recoll развернутое, но спрятано за другими окнами, то скрипт не располагает его поверх других окон, а почему-то сворачивает. Но это можно легко исправить, если в hotrecoll.py заменить строчку
win.minimize()

на
recollMain.activate(gtk.get_current_event_time())

Комментариев нет:

Отправить комментарий

Популярные сообщения