Полнотекстовый поиск (FTS)
Новый движок полнотекстового поиска
С января 2025 года Solr был заменен на Flatcurve. Все существующие индексы FTS в связи с этим считаются устаревшими и могут быть удалены.
animails ссылается на старый том solr-vol-1 и при каждом процессе обновления предлагает удалить его, если он все еще существует.
Flatcurve — это новый движок полнотекстового поиска, который работает лучше даже на менее мощных системах. Кроме того, ожидается, что в долгосрочной перспективе он станет движком полнотекстового поиска по умолчанию для Dovecot.
В отличие от Solr, Flatcurve не требует дополнительного Docker-тома. Flatcurve хранит свои базы данных FTS в томе vmail-index, что приводит к структуре папок, аналогичной следующей:
/var/vmail_index/tester@develcow.de/.INBOX/
├── dovecot.index
├── dovecot.index.cache
├── dovecot.index.log
└── fts-flatcurve
└── index.814
├── flintlock
├── iamglass
├── postlist.glass
└── termlist.glass
Таким образом, каждая подпапка на IMAP-сервере получает собственную папку fts-flatcurve с соответствующими индексами электронных писем этой папки.
Важно
Если вы использовали Solr, требуется полное переиндексирование, так как эти два движка FTS несовместимы друг с другом.
Автоматическое индексирование почтового ящика активируется, как только получено 20 или более электронных писем или выполнен полнотекстовый поиск.
Мы рекомендуем выполнять ручное переиндексирование только под присмотром, так как нельзя исключать чрезмерную нагрузку на систему, несмотря на низкие системные требования.
Узнайте больше о том, как запустить переиндексирование ниже.
Команды Dovecot, связанные с FTS¶
Проверка и исправление ошибок в базе данных FTS¶
# Один пользователь
docker compose exec dovecot-animails doveadm fts rescan -u user@domain
# Все пользователи
docker compose exec dovecot-animails doveadm fts rescan -A
# Один пользователь
docker-compose exec dovecot-animails doveadm fts rescan -u user@domain
# Все пользователи
docker-compose exec dovecot-animails doveadm fts rescan -A
Wiki Dovecot: "Сканирует, какие электронные письма присутствуют в индексе полнотекстового поиска, и сравнивает их с письмами, фактически присутствующими в почтовых ящиках. Это удаляет из индекса уже удаленные письма и гарантирует, что следующая индексация doveadm проиндексирует все недостающие письма (если таковые имеются)".
Это не переиндексирует почтовый ящик, а лишь восстанавливает существующий индекс.
Переиндексирование базы данных FTS¶
Если вы хотите немедленно переиндексировать данные, вы можете использовать следующую команду, где * также может быть маской почтового ящика, например 'Sent'. Эти команды необязательны, но могут ускорить процесс:
# Один пользователь
docker compose exec dovecot-animails doveadm index -u user@domain '*'
# Все пользователи, медленнее и рискованнее
docker compose exec dovecot-animails doveadm index -A '*'
# Один пользователь
docker-compose exec dovecot-animails doveadm index -u user@domain '*'
# Все пользователи, медленнее и рискованнее
docker-compose exec dovecot-animails doveadm index -A '*'
Примечание
Индексирование займет некоторое время.
Возможна чрезмерная нагрузка на систему, вплоть до сбоев в редких случаях. Внимательно следите за процессом индексации и нагрузкой на систему!
Поскольку переиндексирование может быть ресурсоемким, оно не было интегрировано в интерфейс animails.
Вы должны вручную устранять любые ошибки во время переиндексирования через CLI.
Удаление базы данных FTS¶
animails автоматически удаляет индексные данные пользователя при удалении соответствующего почтового ящика.
Кроме того, вы можете вручную удалить индекс для Flatcurve через CLI:
# Один пользователь
docker compose exec dovecot-animails doveadm fts-flatcurve remove -u user@domain '*'
# Все пользователи
docker compose exec dovecot-animails doveadm fts-flatcurve remove -A '*'
# Один пользователь
docker-compose exec dovecot-animails doveadm fts-flatcurve remove -u user@domain '*'
# Все пользователи
docker-compose exec dovecot-animails doveadm fts-flatcurve remove -A '*'
Специфические опции FTS в animails.conf¶
animails предоставляет низкие настройки по умолчанию для нового движка FTS, чтобы обеспечить функциональность даже на менее мощных системах.
Для более мощных систем вы можете настроить некоторые параметры, чтобы включить более эффективное индексирование.
SKIP_FTS (Отключить полнотекстовый поиск)¶
В animails.conf вы можете полностью отключить полнотекстовый поиск. Это по-прежнему рекомендуется для систем начального уровня, которые с трудом справляются с одновременным запуском animails и процессов индексации.
Flatcurve менее ресурсоемкий, чем Solr, но требует больше места для хранения и, возможно, больше мощности процессора (в зависимости от настроек).
Значение animails по умолчанию
По умолчанию этот параметр установлен в значение n, что означает, что полнотекстовый поиск включен.
Рекомендация
Сначала оставьте индексирование включенным. Если новый движок FTS потребляет слишком много ресурсов, вы сможете изменить настройку позже.
FTS_PROCS (Количество процессов индексации)¶
С помощью переменной FTS_PROCS в animails.conf вы можете настроить количество процессов индексации, которые могут выполняться одновременно.
Значение animails по умолчанию
По умолчанию это значение ограничено 1 потоком.
ПРЕДОСТЕРЕЖЕНИЕ
Процессы индексации — это однопоточные приложения, которые полностью загружают поток процессора. Системы с небольшим количеством ядер должны использовать меньшее число, чтобы избежать перегрузки системы.
Рекомендация
Выделите около половины потоков процессора вашей системы для процессов индексации. Для нечетного количества потоков используйте меньшее значение, чтобы оставить достаточно ресурсов для основной системы.
На двухъядерных или одноядерных системах следует отключить полнотекстовый поиск.
FTS_HEAP (Максимальный объем памяти на процесс индексации)¶
С помощью FTS_HEAP в animails.conf вы можете установить объем памяти, выделяемый на один процесс индексации.
Значение animails по умолчанию
По умолчанию это значение ограничено 128 МБ на процесс.
Рекомендация
В идеале выделите 512 МБ памяти на процесс. Системы с оперативной памятью менее 8 ГБ должны придерживаться 128 МБ или увеличить до 256 МБ, но сократить количество процессов, чтобы избежать ошибок нехватки памяти (OOM).
Хотя Dovecot продолжает работать при исчерпании оперативной памяти на воркер, он может стать значительно медленнее.
Расширенные параметры конфигурации¶
Интеграция Flatcurve позволяет настраивать параметры FTS по мере необходимости.
Примечание
Каждая конфигурация уникальна, поэтому не существует универсально «правильной» или «неправильной» настройки.
Опыт работы с движком варьируется в зависимости от системы.
Например, вы можете включить более детальный полнотекстовый поиск (поиск по подстроке), который обеспечивает более точные результаты, но требует больше места для хранения и более длительного времени индексации.
Включить поиск по подстроке (более детальный полнотекстовый поиск)¶
Отредактируйте файл data/conf/dovecot/conf.d/fts.conf:
plugin {
[...]
fts_flatcurve_substring_search=yes # Может быть yes или no
}
Перезапустите Dovecot, чтобы применить изменения:
docker compose restart dovecot-animails
docker-compose restart dovecot-animails
Дополнительные настройки¶
Мы приветствуем вклад сообщества в полезные настройки с течением времени.
А пока вы можете обратиться к официальной документации Dovecot и Flatcurve для обзора доступных параметров: