user icon

DovecotのFTSでSolr9の利用(とファイル検索)

前回のFTSでの全文検索から、Solrを9系へアップデートしつつ、ファイル検索も対応してみます。

Solr

まずはSolr9系へのアップデート。アップデートの前に、
  • solrを一旦止めて
  • /var/solr を退避なり削除するなりして
  • /opt/solrをunlinkします。
インストールは7系と同じ手順です。
tar xzf solr-9.1.1.tgz solr-9.1.1/bin/install_solr_service.sh --strip-components=2
./install_solr_service.sh solr-9.1.1.tgz
自動で起動しようとしますが、起動しない場合はsolr.in.sh を/opt/solr/bin/へ。
cp -p /etc/default/solr.in.sh /opt/solr/bin/
chmod +x /opt/solr/bin/solr.in.sh
systemctl start solr
/var/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
  • /var/solr/data/dovecot/conf/solrconfig.xml
LRUCacheが9系から削除されてCaffeineCacheになっているので、solrconfig.xmlのVersionとともに変更します。
<luceneMatchVersion>9.1.1</luceneMatchVersion>
以下のようにLRUCacheが指定された箇所を探して、
   <filterCache class="solr.FastLRUCache"
   <queryResultCache class="solr.LRUCache"
   <documentCache class="solr.LRUCache"
          class="solr.search.LRUCache"
CaffeineCacheに入れ替えます。
   <filterCache class="solr.CaffeineCache"
   <queryResultCache class="solr.CaffeineCache"
   <documentCache class="solr.CaffeineCache"
          class="solr.search.CaffeineCache"
Dovecot側の設定は変更する必要が無いので、設定が終わったら再インデックス化してみてエラーが出なければOKです。
doveadm fts rescan -u aikawa@virtual.localdomain
doveadm index -u aikawa@virtual.localdomain INBOX

ファイル内検索 decode2text.sh

ファイル内検索は、pdf, doc, ppt, xls, docx, pptx, xlsx等が対象となりますが、確実にファイル内の文字を検索できるわけではなく、設定が面倒なので必要無いのであれば、入れなくても良いです。
※旧型のxlsファイルは文字化けして一部しか取れなかったり、pptxでも吹き出し内の文字が取れなかったりと、色々と有るようです。
  • /usr/local/etc/dovecot/conf.d/90-plugin.conf
decode2text用の設定を加えます。
plugin {
  fts_decoder = decode2text
}
service decode2text {
  executable = script /usr/libexec/dovecot/decode2text.sh
  user = vmb
  unix_listener decode2text {
    mode = 0666
  }
}
decode2textで使用するコマンドはcatdoc, catppt, xls2csv, xmlunzip, pdftotextですが、pdftotext以外はCentOS Stream 9には用意されていません。
  • xmlunzip
GNOMEがgithubで公開しているので、それをコピーします。/usr/local/bin/xmlunzip等に設置してchmod +xで実行権限を与えて下さい。
  • catdoc, catppt, xls2csv
CentOS 8まではrpmが用意されていてcatdocを入れれば三つとも入るので、catdocのsrc.rpmをダウンロードして、CentOS Stream 9でビルドし直します。
※ChangeLogを見た感じCentOS 7からはFedora用にビルドする以外何もないようなので、今回はCentOS 7のを使いました。
まずはCentOS 7上でsrc.rpmをダウンロード。
yumdownloader --source catdoc --enablerepo=epel-source
CentOS Stream 9へ持って来て、ビルドします。
dnf install rpm-build yum-utils
yum-builddep catdoc-0.95-1.el7.src.rpm
rpmbuild --rebuild catdoc-0.95-1.el7.src.rpm 
dnf localinstall ~/rpmbuild/RPMS/x86_64/catdoc-0.95-1.el9.x86_64.rpm
catdoc等のコマンドがインストールされた事を確認して、dovecotで再インデックス化。添付ファイルが無い場合は、添付ファイルの有るメールを作成しておきます。
doveadm fts rescan -u aikawa@virtual.localdomain
doveadm index -u aikawa@virtual.localdomain INBOX
RoundCubeでメッセージ全体をオプションで指定して検索してみます。
上で書いたように確実に文字が検索されるわけではないので、出なければ別の文字を入れたりしてみて下さい。
Facebooktwitterlinkedintumblrmail
名前
E-mail
URL
コメント

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