Организации поиска данных с Beagle

14 Янв
2008

Статья напечатана в журнале Хакер

Объемы современных жестких дисков позволяют хранить колоссальное количество самой разнообразной информации. Хотя без определенной систематизации и наличия удобной и главное работающей быстро программы поиска, все может превратиться в бесполезные залежи, занимающие место на диске, не принося ни какой пользы. Пользователи, работающие в Windows, давно уже используют удобные приложения позволяющие найти любую информацию в локальной системе, вроде Google Desktop, Ищейка, AVSearch, Spotlight и многие другие. Теперь приложения с подобной функциональностью и даже лучше, есть и в пингвине.

Что было раньше

Начинающие пользователи Linux обычно теряются, столкнувшись с проблемой поиска нужного файла или отрывка текста. Исторически сложилось так, что во всех Unix системах преобладают текстовые, а не бинарные форматы, для редактирования которых достаточно обычного текстового редактора вроде Блокнота в Windows. Здесь даже в офисных пакетах появившихся несколько позже, используется XML подобный то есть текстовый формат. Для поиска информации в документах LaTeX, веб-файлах html, текстовых, конфигурационных файлах и некоторых других применяются обычные утилиты, алгоритм работы которых оттачивался годами. А поэтому в любой книге, форуме для поиска текстового фрагмента будет предложено попробовать что-то из grep, slocate и find. Используя эти утилиты, можно найти все и вся, в любую погоду, время суток и настроения. Например, чтобы найти все скрипты в /etc/ в которых упоминается утилита iptables вводим:

$ sudo grep -r “iptables” /etc

Или так:

$ sudo find /etc -name ‘*.conf’ -print | xargs grep “iptables” /dev/null

Но так было раньше, пока системой пользовались исключительно профессионалы. Смена ориентировки на обычного пользователя потребовали соответствующих приложений, которые могут найти информацию в документах разного типа, в том числе и популярных в других операционных систем вроде MS Word, внутри архивов, тегах музыкальных файлов и прочее. Все это должно работать быстро, быть удобным и понятным для простого пользователя.

Поисковая машина Beagle

Приложение Beagle (beagle-project.org) это уникальная поисковая машина, написанная на Mono (свободной альтернативе Microsoft .NET для Linux), которая предоставляет пользователям Linux довольно мощную и удобную систему поиска любой информации в свалках каталогов. Его основой послужила free/open source кросплатформенная библиотека Lucene (lucene.apache.org). Первоначально разработанная на Java, а затем перенесенная на другие языки — Perl, PHP, C++, Python, Ruby и C#. Порт для последнего названный Lucene.Net (incubator.apache.org/projects/lucene.net.htm) и используется при индексации. Проект Beagle был назван самым ожидаемым продуктом 2005 года. После того как компания Ximian, которая разрабатывала Beagle, была выкуплена Novell, проект получил значительную, в том числе и финансовую поддержку и стал развиваться не в пример быстрее. И хотя в настоящий момент разработки еще далеки от финального релиза, включение пакетов Mono и приложений на них вроде Beagle, в такие дистрибутивы как Fedora Core и openSUSE вселяет надежду, что проект будет развиваться и дальше. При этом Beagle умеет индексировать и искать данные в:

1. Документах офисных пакетов OpenOffice.org, MS Office, AbiWord, RTF, Adobe PDF;
2. В графических файлах (png, jpg, tiff, gif, svg) и тегах музыкальных файлов (mp3, ogg и flac);
3. В почте Kmail и Thunderbird, Evolution (включая контакты и календарь);
4. В журналах IM клиентов Gaim и Kopete, и агрегаторах новостных лент Liferea, Akregator и Blam;
5. В истории web-браузеров Firefox, Epiphany и Konqueror;
6. В документации Texinfo, Man, Docbook, Monodoc;
7. В исходных кодах C, C++, C#, Fortran, Java, JavaScript, Lisp, Matlab, Pascal, Perl, PHP, Python, Ruby, Scilab, скриптах shell;
8. Архивах (zip, tar, gzip, bzip2);
9. И естественно и в обычных текстовых файлах.

И это далеко не весь список. Большинство сегодняшних приложений для поиска информации в локальной системе, сначала перебирают все файлы в указанном пользователем каталоге и индексируют информацию. При этом создается база данных, которая и используется в дальнейшем при поиске. Естественно в такой базе данных информация может устареть, поэтому периодически необходимо повторять индексирование каталогов, для ее обновления. В Beagle для создания и обновления информации в базе данных используется демон beagled, который постоянно находится в оперативной памяти и отслеживает все изменения в файлах, автоматически поправляя индекс.

Установка Beagle.

Не смотря на то, что Beagle по умолчанию не входит в большинство дистрибутивов, но он как правило доступен в репозитариях. Можно конечно попробовать собрать его самому с помощью исходных текстов, последние версии собираются гораздо лучше первых. При наличии всех библиотек (beagle-project.org/Installing_prerequisites) достаточно ввести стандартные: “./configure; make; su -c «make install». В ASPLinux и других дистрибутивах использующих YUM, команда будет такой:

# yum install beagle.

Beagle по умолчанию устанавливается в Ubuntu начиная с версии 6.10, но в Kubuntu его нет даже в 7.04. В официальном репозитарии Ubuntu, Beagle естественно есть, но далеко не самая последняя версия. Поэтому лучше подключить альтернативный репозитарий. Для этого добавляем в /etc/apt/sources.list такую строку:

deb http://beagle-project.org/files/ubuntu/dapper/ ./

Пользователи версии 6.10, должны заменить dapper на edgy. Теперь смотрим, что есть по Beagle в KUbuntu:

$ sudo apt-get update
$ sudo apt-cache search beagle
beagle-dev — library for accessing beagle (development files)
libbeagle0 — library for accessing beagle (development files)
beagle — indexing and search tool for your personal data
beagle-backend-evolution — evolution data backend for beagle
kerry — a KDE frontend for the Beagle desktop search daemon
kio-beagle — beagle kio-slave
python-beagle — python bindings for beagle

То есть кроме самого beagle нам, очевидно, может понадобиться kerry, который является интерфейсом к демону для среды KDE, и kio-beagle который позволяет интегрировать функциональность beagle файловому менеджеру Konqueror, реализуя протокол beagle:/.
Хотя впрочем, это и необязательно. Ставим:

$ sudo apt-get install beagle kio-beagle kerry

В процессе установки будет создан пользователь beagleindex, который добавлен в группу nogroup с домашним каталогом /var/cache/beagle.
После установки в системе появится ряд утилит, найти которые можно, набрав в консоли beagle и нажав на табуляцию. Демон beagled помещается в автозагрузку, но после установки автоматически не запускается. Почему так сделано, однозначно сказать тяжело, может потому, что сразу после запуска демон попытается прочитать свои конфигурационные файлы, которые находятся в подкаталоге ~/.beagle/ пользователя запустившего его. По умолчанию таких файлов естественно нет, а в этом случае будут проиндексированы все каталоги на всех смонтированных разделах, что займет много времени, но как раз в этом и нет необходимости. Конфигурационные файлы beagle имеют понятный XML формат, но вручную создавать их стоит, только в целях тренировки. Для автоматического их создания в комплекте имеется утилита beagle-config с большим количеством параметров. Один из них —list-sections, который позволяет просмотреть все возможные настройки:

$ beagle-config —list-sections
Available configuration sections:
- daemon
- webservices
- indexing
- networking
- searching

Чтобы подробнее просмотреть возможности каждой секции, достаточно набрать ее без параметров:

$ beagle-config indexing
Available options for section ‘indexing’:
- DelRoot (Remove an indexing root)
- ListExcludes (List user-specified resources to be excluded from indexing)
- ListRoots (List the indexing roots)
- IndexHome (Toggles whether your home directory is to be indexed as a root)
- AddExclude (Add a resource to exclude from indexing)
- AddRoot (Add a root path to be indexed)
- DelExclude (Remove an excluded resource)

В принципе утилита очень проста в использовании. Опции, начинающиеся на Add, что-то добавляют в параметр поиска, Del – удаляют, List – выводят. Там где в опции стоит Root это означает каталог, который будет включен в поиск, Excludes – то, что будет пропущено при поиске. Например, просмотрим, что делает IndexHome:

$ beagle-config indexing IndexHome
Your home directory will not be indexed.

Только что индексация домашнего каталога пользователя была отключена. Повторим еще раз:

$ beagle-config indexing IndexHome
Your home directory will be indexed.

Теперь все нормально. На одном каталоге у меня полно документации, добавим его в список:

$ beagle-config indexing AddRoot /media/win_e/documentation
Root added.

Теперь просмотрим, список каталогов, которые будет индексировать демон beagled:

$ beagle-config indexing ListRoots
Current roots:
- Your home directory
- /home/grinder/.kde/share/applications
- /media/win_e/documentation
- /usr/local/share/applications
- /usr/share/applications

Теперь можно запускать демон, для этого просто вводим в консоли beagled, никаких прав суперпользователя для этого не надо. Демон будет работать с правами пользователя запустившего его, по умолчанию он запускается в фоне, освобождая консоль. Вся информация об его работе будет занесена в журнал ~/.beagle/Log/current-Beagle. При необходимости, можно запустить процесс в переднем плане. Например, так:

$ beagled —fg —debug

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

$ beagle-config –beagled-reload-config

Если сейчас заглянуть в домашний каталог, то можно заметить появление скрытого каталога .beagle, внутри которого находится еще несколько вложенных подкаталогов. Все настройки сохраняются в файлах подкаталога config. Например, если внутри файла indexing.xml, можно обнаружить все произведенные ранее настройки:

$ cat ~/.beagle/config/indexing.xml
<?xml version=»1.0″ encoding=»UTF-8″?>
<IndexingConfig xmlns:xsd=»http://www.w3.org/2001/XMLSchema» xmlns:xsi=»http://www.w3.org/2001/XMLSchema-instance» >
<Roots>
<Root>/home/grinder/.kde/share/applications</Root>
<Root>/media/win_e/documentation</Root>
<Root>/usr/local/share/applications</Root>
<Root>/usr/share/applications</Root>
</Roots>
<IndexHomeDir>true</IndexHomeDir>
<Excludes/>
</IndexingConfig>

Для того чтобы найти нужную информацию, набираем в консоли beagle-query с параметром поиска:

$ beagle-query linux

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

поиск в консоли

Чтобы просмотреть, чем сейчас занимается демон (если есть подозрение, что он откровенно сачкует) вводим:

$ beagle-status

И в режиме реального времени будем получать всю информацию об его работе. Для нормальной остановки процесса beagled, следует использовать утилиту beagle-shutdown.

Создание статического индекса

Beagled динамически обновляет индексы, в процессе работы с файлами или изменения состава каталогов, это может вызвать проблемы при работе со смонтированными сетевыми ресурсами. Ничего страшного, Beagle умеет создавать статические индексы, которые затем обновляются вручную по мере необходимости. Для примера создадим статический индекс ресурса смонтированного в /mnt, при этом будут проиндексированы все файлы за исключением имеющих расширение mp3. Результат будет сохранен в /home/grinder/.beagle-static

$ beagle-build-index —recursive —deny-pattern .mp3 —target /home/grinder/.beagle-static /mnt

И даем указание демону beagled, чтобы он использовал статический индекс при поисковых запросах.

$ beagle-config daemon AddStaticQueryable /home/grinder/.beagle-static

Графические фронт-енды

Все, что было сказано раннее, касается поклонников консоли. Для тех же, кто предпочитает пользоваться мышкой, имеются несколько графических фронт-ендов к beagle-query. Кроме того, некоторые программы (Nautilus, Yelp, Brasero и другие) используют beagle при поиске информации. В первую очередь это beagle-search построенный на гномьих библиотеках, устанавливаемый вместе с основным пакетом, и Kerry написанный специально для среды KDE. В работе эти две утилиты очень похожи, поэтому в дальнейшем буду описывать, как работать с Kerry.

beagle-search

После запуска в панели задач появляется значок, в контекстном меню, вызываемом щелчком правой кнопкой мышки, выбираем пункт Configure Kerry. В окне настройки две вкладки. Если перейти в Indenxing, то увидим все каталоги, добавленные с помощью beagle-config. Естественно можно это сделать и отсюда. Для добавления нового каталога, в котором будет производиться поиск, нажимаем Add и указываем на нужный. Для удаления каталога из индексирования выбираем его и нажимаем Del. Установленный флажок в “Index my home folder” включает индексирование домашнего каталога пользователя. Нажатие на кнопку Application добавит все каталоги, в которых установлены приложения, что позволит производить поиск в .desktop файлах. В поле Privacy, указываются файлы и каталоги, которые надо исключить при индексировании. Вкладка Search позволяет указать общие настройки работы Beagle.

настройка Kerry

Для того чтобы разрешить автоматический запуск демона после регистрации пользователя, устанавливаем флажок “Start search and indexing automatically”. Результат поиска может быть отсортирован по релевантности, имени файлов и дате модификации. Это все задается в выпадающем списке “Default result sort order”. А количество найденных файлов выводимое в одном окне регулируется в “Maximum number of result displayed”. Чуть ниже задаются горячие клавиши для вызова диалогового окна (Show search dialog) и запуск поиска первого слова в истории поисков (Search Primary Selection).
Для поиска слова или словосочетания дважды щелкаем по значку и вызываем окно “Kerry Beagle Search”. Вводим искомое в верхнем окне Search, выбираем категорию, в которой будем искать в списке Within: Everything (все), Applications (приложения), Office Documents (офисные документы), Conversations (почта, IM-клиенты), Images (изображения), Media (музыкальные файлы) и Web Pages (веб-страницы). После выбора нажимаем Find. Результат поиска выводится не сплошным текстом, а удобными для чтения блоками, в которых очень легко найти нужную информацию. Внизу будет показано общее количество документов, в которых будет найдено это слово. Рядом с файлом будет выведена информация о соответствующей релевантности, имя файла, каталог в котором он находится, времени последней модификации, информация, взятая из блока title или аналогичной, количество страниц в документе. Любой документ можно тут же открыть сопоставленной ему программой: просмотреть в текстовом редакторе или веб-браузере, открыть в почтовом клиенте, если это фрагмент разговора ICQ можно сразу же ответить собеседнику.
Фронт-энд использующий веб Peagle (www.psiplus.at) пока тяжело найти в репозитариях пакетов, взять его можно с сайта проекта. Для того чтобы использовать Peagle понадобится установленный и настроенный PHP с GD. В KUbuntu для этого достаточно установить пакеты php5 и php5-gd.

веб-инструмент Peagle

Теперь распаковываем архив, заходим внутрь и запускаем демона ./peagle или ./peagle.php (beagled должен быть запущен):

$ ./peagle.php
Server ready.

Для поиска документов вызываем браузер, заходим по адресу localhost:7324 и набираем запрос в поле Search. Некоторые параметры работы демона Peagle (адрес, порт, кодировка, интеграция в среду и прочие) можно настроить в Settings. Для его остановки перейди в Control или введи в консоли “killall peagle”.
Для серфинга я использую Firefox в котором накопилось уже изрядное количество закладок. Для таких ситуаций очень полезно расширение beagle.xpi для веб-браузеров базирующихся на Mozilla. Скачать его можно со страницы beagle-project.org/Firefox_Extension, устанавливается оно также как и все расширения для Firefox.
Я надеюсь теперь найти любую информацию в пингвине, будет не просто, а очень просто. Успехов.

Поиcк с помощью Beagle

Если при поиске ввести одно слово, то при большом количестве источников можно утонуть в выданном результате. Beagle поддерживает синтаксис поиска принятый в большинстве поисковых машин. Например, если необходимо найти словосочетание, оба слова следует заключить в кавычки “kernel config”. Используй также и регулярные выражения, подставляя символы замены в слова “ black*”. Если при поиске нужно найти документ, в котором должно отсутствовать определенной слово просто поставь перед этим, словом знак минус “kernel -FreeBSD”. Если нужно найти документ, в котором должно быть только одно или оба из указанных слов ставь между ними OR. Чтобы не искать во всех документах можно с помощью параметра ext, указать расширение файла. Например, если нужно найти информацию в pdf документе, используем ext:pdf. Есть и более общая конструкция filetype, например, так ищем информацию в изображениях filetype:image. И еще возможен поиск по описанию (dc). Например, в заголовках документов (dc:title), создателю документа (dc:creator), автору (dc:author), артисту в теге музыкального файла (dc:artist), почтовому адресу отправителя (dc:mailfromaddr). И многим другим параметрам.

3 Комментариев к Организации поиска данных с Beagle

Аватар

Linuxoid - все что знаю о Туксе » Архив блога » Обзор Fedora 9 Sulphur

Сентябрь 13th, 2008 | 20:20

[...] ext3. В ней появились расширенные атрибуты для SElinux, beagle, samba и некоторых других утилит. Во избежание [...]

Аватар

Linuxoid - все что знаю о Туксе » Архив блога » Обзор KUbuntu 7.10

Сентябрь 14th, 2008 | 21:21

[...] сегодня является серьезным конкурентом Beagle. Его отличает быстрота, малая загрузка системы и плюс [...]

Аватар

Linuxoid - все что знаю о Туксе » Архив блога » Обзор openSUSE 11.0

Ноябрь 1st, 2008 | 10:17

[...] мультимедиафайлов и расширение для работы с Beagle. Сейчас почему то решили все это убрать. В GNOME появился [...]

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

Наверх