Настройка Apache Solr на Debian/Ubuntu для индексации почты в Dovecot
Опубликовано:
Для больших почтовых ящиков поиск по письмам может работать очень долго или выдавать ошибку. Для решения проблемы используется технология индексации содержимого. В данной инструкции будет рассмотрен способ ускорения поиска по почте для ящиков, хранящихся на сервере Dovecot. В качестве платформы полнотекстового поиска будет использоваться Apache Solr. Инструкция применима к системам на базе Deb.
Apache Solr
Выполним установку и запуск платформы, которая обеспечит индексацию и полнотекстовый поиск. Она разработана на Java, поэтому нам понадобится jdk.
Обновляем кэш репозиториев и выполняем установку java-машины:
apt update
apt install default-jdk
Переходимо на официальную страницу для загрузки продукта и смотрим последнюю версию Solr. Создаем переменную, значение которой будет данная версия:
S_VER=9.9.0
* на момент обновления инструкции это была версия 9.9.0.
Скачиваем бинарный файл для запуска сервиса:
wget https://www.apache.org/dyn/closer.lua/solr/solr/${S_VER}/solr-${S_VER}.tgz?action=download -O solr-9.9.0.tgz
Распаковываем его:
tar -zxf solr-${S_VER}.tgz
Запускаем скрипт для установки Solr:
bash solr-${S_VER}/bin/install_solr_service.sh solr-${S_VER}.tgz
* обратите внимание, что скрипту мы в качестве аргумента передаем путь до архива с исходником.
Сервис должен быть установлен и запущен. Проверить его статус можно командой:
systemctl status solr
Также убедимся, что он слушает на нужном порту:
ss -tunlp | grep 8983
* служба solr работает на порту 8983.
Также можно сделать запрос к сервису:
curl http://127.0.0.1:8983/solr/
Мы должны получить html страницы.
Apache Solr готов к работе.
Dovecot
На стороне сервера почтовых ящиков от нас требуется установить и настроить плагин solr.
Выполняем команду:
apt install dovecot-solr
Добавляем использование плагина в конфигурацию dovecot:
vi /etc/dovecot/conf.d/10-mail.conf
mail_plugins = fts fts_solr
* если в вашем случае в mail_plugins уже было что-то добавлено, то данные строки необходимо дописать через пробел.
Также настраиваем плагин:
vi /etc/dovecot/conf.d/90-fts.conf
plugin {
fts = solr
fts_solr = url=http://127.0.0.1:8983/solr/dovecot/
fts_autoindex = yes
}
* где
- fts — Full Text Search или механизм полнотекстового поиска. В нашем случае используется Apache Solr.
- fts_solr — адрес подключения к серверу Solr. В нашем примере он находится на том же сервере, что и Dovecot. Также обратите внимание, что в URL мы делаем запрос к core dovecot (его мы создадим позже).
- fts_autoindex — разрешает или запрещает автоматическую индексацию новых и измененных писем. В нашем случае индексация будет выполняться автоматически.
Перезапускаем dovecot:
systemctl restart dovecot
Все готово для быстрого поиска.
Индексирование
Последнее, что нам осталось, это запустить индексацию уже существующих писем в ящиках.
Сначала создаем core в solr:
sudo -iu solr /opt/solr/bin/solr create_core -c dovecot -n dovecot
* Core в Solr — это отдельный поисковый индекс со своей конфигурацией. В нашем примере будет создано ядро с именем dovecot (-c) и одноименным конфигурационным набором (-n),
Предположим, мы хотим проиндексировать ящик info@dmosk.ru. Указываем на необходимость принудительной переиндексации для ящика:
doveadm fts rescan -u info@dmosk.ru
И запускаем создание индекса:
doveadm -vvvvv index -u info@dmosk.ru "*"
* операция может занять много времени, в зависимости от объема ящика.
Для запуска индексации всех ящиков выполняем команду:
doveadm -v index -A "*"
Можно пробовать выполнить поиск.