2021/08/20 平見知久
OTOBO10.0.12とElasticSearchの連携
OTOBOでは標準機能でElasticSearchを使って全文検索を行うことができます。連携しない場合は基本的にDBのLIKEでの検索ですので、速度や検索精度の面でかなり差が出ます。それなりの規模での利用となった場合はElasticSearchとの連携を検討したいところですが、現時点(2021年8月)の最新版である10.0.11までですと日本語での検索精度が今ひとつでした。今後出る予定の10.0.12では日本語での検索精度を上げるための設定ができます!というおはなしです。
ElasticSearchを多少触ったことがある方ですと、日本語環境ではanalysis-kuromoji というプラグインを導入することがほとんどだと思います。知らない方のためにざっくり言うとこのプラグインは検索対象の文章に対して辞書などを活用して単語ごとに分かち書きを行い、それをElasticSearchのインデックスに登録するものです。
例えば文章中に「東京都特許許可局の東側」といった語があった場合、ElasticSearch単体の場合設定にもよりますが2文字ずつで切って、「東京」「京都」「都特」「特許」「許可」「可局」「局の」「の東」「東側」のように分割してそれぞれをインデックスに対して登録してしまいます。kuromojiを利用した場合、辞書や動詞・助詞・形容詞などの情報も使って「東京」「東京都」「特許」「許可」「許可局」「東」「東側」のように自然な単語に分割して登録するといったイメージです(あくまで例ですので実際にこの通りになるわけではありません)。結果ノイズが減って検索の精度が上がります。
analysis-kuromojiを利用する設定はElastiSearchにインデックスを作成する際に設定をしてあげる必要があるのですが、OTOBO 10.0.11まではこの設定を追加する機能がありませんでした。英語(というかアルファベット)圏では単語はスペースで切ればほとんど問題にならないのですが、日本を含むアジア圏ではそうはいきません。なんとかここは設定しておきたいところです。
OTOBOのコードを修正してElasticSearchインデックス作成時の細かい設定が追加できるようにしたものを作成。pullリクエストを行ってOTOBO開発チームの方と相談・仕様を議論し、最終的に本家に取り込んで頂きました。githubの10.0の開発ブランチにはすでに取り込まれていますので、順当に行けば次の10.0.12では新機能として利用できるようになるかと思います。
注意点としては取り込まれた機能は「設定が可能になる」という機能です。入れただけで日本語をよろしくやってくれるわけではなく、別途OTOBOで設定が必要となります。その代わり中国や韓国等、他の国の方も同様のメリットが得られるところに落とし込んだ感じです。日本語での設定詳細は必要があればまた別の記事にしたいと思います。
OTOBOというより一般的な話ですが、日本固有の事情などはリクエストしてもなかなか取り込んでもらえないケースも結構あります。一方で広域に渡る機能についてはコミュニティ全体の利益となります。弊社にしても維持のリソースを考えると差分はなるべく持ちたくありません。機能や本家の方向性を見据えてコントリビュートするのか自社で維持するのかを判断し、共通のものはなるべくコントリビュート、固有のものについては((いつくしま))として維持していくというのが基本的な考え方となります。
ElasticSearchとの連携を考えられている方はOTOBO 10.0.12にするとちょっといいことがありますよ、というお話でした。