Настройка 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 "*"

Можно пробовать выполнить поиск.

# Ubuntu # Почта # Серверы
Дмитрий Моск — частный мастер
Была ли полезна вам эта инструкция?

Да            Нет