設定手順
以下の記述は、Dovecot-2.3.4 および Debian10 (Buster) を前提としている。
必要なパッケージをインストールする。
apt install solr-jetty dovecot-solr poppler-utils catdoc
以前の jetty パッケージとは異なり、Buster の jetty9 パッケージは /etc/default/jetty9
を編集しなくても、標準で jetty が立ち上がるらしい。ポートは一般的な 8080/tcp なので、他と衝突する場合には変更が必要そう。
$ ps ax | grep jetty
7406 ? Ssl 1:59 /usr/bin/java -Djetty.home=/usr/share/jetty9 -Djetty.base=/usr/share/jetty9 -Djava.io.tmpdir=/tmp -jar /usr/share/jetty9/start.jar jetty.state=/var/lib/jetty9/jetty.state jetty-started.xml
$ sudo netstat -nap | grep 7406
tcp6 0 0 :::8080 :::* LISTEN 7406/java
tcp6 0 0 ::1:8080 ::1:48790 ESTABLISHED 7406/java
/etc/solr/conf/schmea.xml
を以下のように編集して、メールの検索のために必要な属性を索引付けするように追加する。
--- a/solr/conf/schema.xml
+++ b/solr/conf/schema.xml
@@ -893,7 +893,18 @@
when adding a document.
-->
- <field name="id" type="string" indexed="true" stored="true" required="true" />
+ <field name="id" type="string" indexed="true" stored="true" required="true" />
+ <field name="uid" type="long" indexed="true" stored="true" required="true" />
+ <field name="box" type="string" indexed="true" stored="true" required="true" />
+ <field name="user" type="string" indexed="true" stored="true" required="true" />
+ <field name="hdr" type="text_cjk" indexed="true" stored="false" />
+ <field name="body" type="text_cjk" indexed="true" stored="false" />
+ <field name="from" type="text_general" indexed="true" stored="false" />
+ <field name="to" type="text_general" indexed="true" stored="false" />
+ <field name="cc" type="text_general" indexed="true" stored="false" />
+ <field name="bcc" type="text_general" indexed="true" stored="false" />
+ <field name="subject" type="text_cjk" indexed="true" stored="false" />
+
<field name="sku" type="text_en_splitting_tight" indexed="true" stored="true" omitNorms="true"/>
<field name="name" type="text_general" indexed="true" stored="true"/>
<field name="alphaNameSort" type="alphaOnlySort" indexed="true" stored="false"/>
@@ -919,7 +930,7 @@
multiple values for them.
-->
<field name="title" type="text_general" indexed="true" stored="true" multiValued="true"/>
- <field name="subject" type="text_general" indexed="true" stored="true"/>
+ <!-- <field name="subject" type="text_general" indexed="true" stored="true"/> -->
<field name="description" type="text_general" indexed="true" stored="true"/>
<field name="comments" type="text_general" indexed="true" stored="true"/>
<field name="author" type="text_general" indexed="true" stored="true"/>
メールの添付ファイルを読み込んで検索対象となる平文テキストを取り出すためのスクリプト decode2text.sh を /etc/dovecot/
以下に配置しておく。
fts プラグインの設定を、以下のように行う。
plugin {
#setting_name = value
fts = solr
fts_solr = url=http://localhost:8080/solr/
fts_decoder = decode2text
fts_autoindex = yes
}
service decode2text {
executable = script /etc/dovecot/decode2text.sh
user = nobody
unix_listener decode2text {
mode = 0666
}
}
後半部分が、平文テキストを取り出すための設定である。このように設定すると、Dovecot は /var/run/dovecot/decode2text
で待ち受ける decode2text サービスを用意する。fts は、到着したメールを decode2text に投入して平文テキストを抽出し、solr に渡して索引化することになる。
/etc/dovecot/conf.d/10-mail.conf
を編集して、fts プラグインを有効化する。
mail_plugin_dir = /usr/lib/dovecot/modules
mail_plugins = fts fts_solr
最後に、dovecot および jetty を適宜に再起動する。
インデックスの再作成
既存のインデックスを破棄する。
# doveadm fts rescan -u username
その上で、インデックスを再作成する。
# doveadm index -u username INBOX