Индексированный полнотекстовый поиск с использованием SQLite

Индексированный поиск почты CommuniGate Pro
bbm
Grey Eminence
Сообщения: 46
Зарегистрирован: 13:0, 30 июл 2015

Индексированный полнотекстовый поиск с использованием SQLite

Непрочитанное сообщение bbm » 12:0, 27 окт 2015

Поиск реализован на основе модуля FTS3 встраиваемой базы данных SQLite и может использоваться на серверах с UNIX-подобными операционными системами. Порядок настройки следующий:

1) убедиться, что в системе установлены следующие Perl-модули:
- CLI;
- DBI;
- DBD::SQLite;
- Email::MIME;
- Mail::IMAPClient;
- LWP::UserAgent;
- JSON;
- CGI;
- Encode;
- File::Path;
если какой-либо из них не установлен, установить их с использованием CPAN:

Код: Выделить всё

$ perl -MCPAN -e shell
> install <module_name>

CLI нужно скачать по ссылке на странице http://www.communigate.com/CGPerl/ и скопировать в одну из @INC директорий (например, /usr/share/perl5);
версия SQLite должна быть не ниже 3;

2) отредактировать файлы:
- в файле accountIndex.pm указать актуальную базовую директорию, порт для доступа по протоколу PWD, логин и пароль пользователя postmaster;
- в файле accountIndex.txt перечислить в столбик имена пользователей, почтовые ящики которых должны быть проиндексированы;

3) скопировать в базовую директорию CGPro файлы:
- accountIndex.pm;
- accountIndex.pl;
- accountIndex.txt;
убедиться, что файл accountIndex.pl имеет право на исполнение;

4) скопировать в директорию cgi файл mmindex.pl, убедиться, что файл имеет право на исполнение;

5) создать серверный именованый скин Crystal и загрузить в него файлы:
- mailbox.wssp;
- mmsearch.js;

6) в серверное PBX-окружение загрузить файл multimailboxsearch.sppr;

7) запланировать в crontab запуск accountIndex.pl для переиндексации почты, а также для оптимизации и сжатия индексов, например:

Код: Выделить всё

$ crontab -e
# индексация раз в час (кроме 00:00)
0 1-23 * * * cd /var/CommuniGate/ && ./accountIndex.pl 2> ./accountIndex.log
# оптимизация/сжатие раз в сутки
0 0 * * * cd /var/CommuniGate/ && ./accountIndex.pl --clean 2> ./accountIndex.log


Скрипт accountIndex.pl можно запускать для индексации почты отдельного аккаунта:

Код: Выделить всё

$ cd /var/CommuniGate/
$ ./accountIndex.pl user1@domain1.com
$ ./accountIndex.pl --clean user2@domain2.com


Также можно использовать для всего домена:

Код: Выделить всё

$ cd /var/CommuniGate/
$ ./accountIndex.pl --d domain3.com


При запуске accountIndex.pl с ключом --d без указания имени домена, будут проиндексированы домены, перечисленные в файле accountIndex.txt в столбик.

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

Код: Выделить всё

$ cd /var/CommuniGate/
$ ./accountIndex.pl --reindex user3@domain3.com


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

В поисковых запросах можно использовать специальные символы:

* - любое окончание слова (например, по запросу "раздел*" будут найдены письма, в которых встречаются слова "разделы", "разделить" и т.д.);
^ - слово расположено в начале (например, по запросу "^договор" будут найдены письма, которые начинаются со слова "договор");
"" - точное совпадение фразы (например, "договор раздел", в случае, когда двойные кавычки не используются, будут найдены письма, в которых между словами "договор" и "раздел" могут находится другие слова);
- - слово не встречается (например, по запросу "договор -раздел" будут найдены письма, в которых встречается "договор", но не встречается "раздел").

Специальные символы в запросах можно комбинировать, например:

^договор* -раздел

При условии того, что почта размещена в локальном хранилище, а ее объем составляет 10 ГБ (включая вложения), переиндексация занимает в среднем 10-15 секунд, а итоговый размер индекса не превышает 200 МБ.
БД помещается в локальное хранилище аккаунта private/index.db, логи индексирования записываются в файл private/index.log.
Вложения
accountIndex.zip
(19.13 КБ) 58 скачиваний
Последний раз редактировалось bbm 19:0, 30 окт 2015, всего редактировалось 2 раза.
С уважением,
Борис

bbm
Grey Eminence
Сообщения: 46
Зарегистрирован: 13:0, 30 июл 2015

Re: Индексированный полнотекстовый поиск с использованием SQLite

Непрочитанное сообщение bbm » 16:0, 20 сен 2016

Новый индексированный поиск, а также его описание доступны по ссылке:

http://www.communigate.com/ru/main/solu ... earch.html
С уважением,
Борис


Вернуться в «Индексированный поиск»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость