user icon

Dovecotの全文検索FTSを使ってみる

前回は通知を扱いましたが、今回はFTSを扱ってみます。
環境は引き続き、CentOS Stream 9でソースからビルドしたDovecotを使っています。
FTSのバックエンドは、以前はSquatLuceneといった選択肢が有ったんですが、現在は非推奨となり、残ったのはSolrだけのようですのでSolrを使います。
※Solrは全文検索を行うため、システム負荷が増加するので、サーバを分けた方が良いかも知れません。

Solr

SolrはJavaで動いているのでまずはJavaをインストール。
dnf install java-11-openjdk
Solrも7.7.0で作成されていて、9.x系では動かないという報告が有ったので、まずは7.x系で動かしてみます。
wget https://archive.apache.org/dist/lucene/solr/7.7.3/solr-7.7.3.tgz
tar xzf solr-7.7.3.tgz solr-7.7.3/bin/install_solr_service.sh --strip-components=2
sudo bash ./install_solr_service.sh solr-7.7.3.tgz
ちょっと古くてsystemdでは動かないようなので、調整します。
cp -p /etc/default/solr.in.sh /opt/solr/bin/
chmod +x /opt/solr/bin/solr.in.sh
  • /etc/systemd/system/solr.service
[Unit]
Description=Apache Solr Service
[Service]
Type=forking
User=solr
EnvironmentFile=/opt/solr/bin/solr.in.sh
ExecStart=/opt/solr/bin/solr start
ExecStop=/opt/solr/bin/solr stop
LimitNOFILE=65000
[Install]
WantedBy=multi-user.target
システムリソースでファイル接続数を拡張しないと起動しなかったので、LimitNOFILE=65000を指定しました。 これでようやく起動。
systemctl daemon-reload
systemctl start solr
起動後はsolr内にdovecotを作成。
sudo -u solr /opt/solr/bin/solr create -c dovecot
デフォルトの設定を削除し、Dovecot用のものをコピーします。
rm -f /var/solr/data/dovecot/conf/schema.xml
rm -f /var/solr/data/dovecot/conf/managed-schema
rm -f /var/solr/data/dovecot/conf/solrconfig.xml
cp /usr/share/doc/dovecot/solr-config-7.7.0.xml /var/solr/data/dovecot/conf/solrconfig.xml
cp /usr/share/doc/dovecot/solr-schema-7.7.0.xml /var/solr/data/dovecot/conf/schema.xml 
chown solr.solr /var/solr/data/dovecot/conf/*.xml
その後、solrconfig.xmlのバージョンを7.7.3へ変更します。
<luceneMatchVersion>7.7.3</luceneMatchVersion>

Dovecot

  • /usr/local/etc/dovecot/conf.d/10-mail.conf
mail_plugins = $mail_plugins fts fts_solr
  • /usr/local/etc/dovecot/conf.d/90-plugin.conf
plugin {
  fts = solr
  fts_solr = url=http://localhost:8983/solr/dovecot/
}
今回DovecotとSolrは同じサーバ上で動かしたので、localhostを指定しています。 dovecotをリロードして、まずはテストでインデックスを作成してみます(それよりもメールを送ってみる方が早いかも)。
dovecot reload
doveadm fts rescan -u aikawa@virtual.localdomain
doveadm index -u aikawa@virtual.localdomain INBOX

検索

RoundCubeで検索オプションをメッセージ全体にして検索して、/var/solr/logs/solr.logにINFOとしてエラーが出ずにログが出て検索がされていれば動作している筈です。
INFO  (qtp949684105-21) [   x:dovecot] o.a.s.c.S.Request [dovecot]  webapp=/solr path=/select params={q={!lucene+q.op%3DAND}subject:テスト+OR+from:テスト&fl=uid,score&sort=uid+asc&fq=%2Bbox:138bd6114ae2b463040c0000d09efc50+%2Buser:aikawa@virtual.localdomain&rows=10&wt=xml} hits=3 status=0 QTime=0
時間が取れれば、今度はファイル検索やSolrのバージョンを上げてみたいと思います。
Facebooktwitterlinkedintumblrmail
名前
E-mail
URL
コメント

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)