MediaWiki に CirrusSearch を導入して日本語の全文検索精度を上げる

Linux
記事内に広告が含まれています。
スポンサーリンク

MediaWiki はイントラでの情報共有にも有用なツールですが、日本語での全文検索がうまくできない点がネックでした。

本家ウィキペディアでも採用されている CirrusSearch(シーラスサーチ)でこの問題を解決できるようなので、トライしてみました。

環境

  • AlmaLinux release 9.4
  • PHP 8.2
  • MediaWiki 1.39.8

CirrusSearch を動かすために Elasticsearch が必要ですが、MediaWiki のバージョンに対応した Elasticsearch をインストールする必要があります。

MediaWiki 1.39 以上の環境では、Elasticsearch 7.10.2(バージョン固定?)が必要とのこと。

Extension:CirrusSearch - MediaWiki

Wikipedia(日本語版)のバージョン情報を確認したところ、MediaWiki 1.43 でも Elasticsearch 7.10.2 を使用していました。拡張機能は CirrusSearch と Elastica、AdvancedSearch を導入しているようです。

バージョン情報 - Wikipedia

インストール手順

Elasticsearch は Java で動くプログラムなので、Elasticsearch 6 以前は OpenJDK を別途インストールする必要があったようですが、Elasticsearch 7 以降は AdoptOpenJDK が同梱されているため不要です。

Elasticsearch 7.10.2 のインストール

公式サイトの手順通り にリポジトリを追加してインストールを試みたところ、バージョン 7.17.22-1 をインストールされそうになりました。

バージョン 7.10.2 をインストールしたいので、RPM を直接指定してインストールします。

Elasticsearch 7.10.2 | Elastic

指示通り /usr/lib/tmpfiles.d/elasticsearch.conf を修正します。

サービスを起動して、動作確認を行います。

昔は Java のバージョンとの相性問題で大変だったようですが、何事もなく導入できました。

Elasticsearch のプラグインをインストール

日本語の検索を正しく行うため、形態素解析を行ってくれる kuromoji をインストールします。

また、Unicode の国際化サポートをしてくれる ICU(International Components for Unicode)もインストールします。

プラグインをインストールした後は、Elasticsearch を再起動しておいたほうが良さそうです。

MediaWiki 拡張機能のインストール

続いて MediaWiki の拡張機能を導入していきます。

拡張機能のインストールには、パッケージ管理ツールの composer が必要になりますので、事前にインストールしておきます。

Elastica のインストール

まずは、MediaWiki と Elasticsearch がやり取りするために必要な Elastica をインストールします。

Extension:Elastica - MediaWiki

MediaWiki のバージョン(1.39)に合わせたファイルをダウンロードして、extensions ディレクトリに解凍します。

Download MediaWiki extension - MediaWiki

解凍したディレクトリ(/path/to/mediawiki/extensions/Elastica)に移動し、composer install --no-dev でパッケージをインストールします。

MediaWiki の LocalSettings.php に Elastica を読み込む設定を追記します。

CirrusSearch のインストール

ここで本題の CirrusSearch をインストールします。

Extension:CirrusSearch - MediaWiki

先程と同じ要領でインストールしていきます。

Download MediaWiki extension - MediaWiki

MediaWiki の LocalSettings.php に CirusSearch を読み込む設定を追記します。

AdvancedSearch のインストール

MediaWiki の検索機能を拡張する AdvancedSearch もインストールします。

Extension:AdvancedSearch - MediaWiki

同じ要領でインストールしていきます。

Download MediaWiki extension - MediaWiki

MediaWiki の LocalSettings.php に AdvancedSearch を読み込む設定を追記します。

MediaWiki の特別ページにアクセスして、バージョン情報を開きます。

インストール済みソフトウェアに「Elasticsearch」、拡張機能がインストールされたか確認します。

とりあえず全ての拡張機能をインストールすることができました。

インデックスの作成

必要な環境が構築できたので、検索のインデックスを作成していきます。

README - mediawiki/extensions/CirrusSearch - Gitiles

最初のインデックスを作成する前に MediaWiki の LocalSetting.php を編集して、検索を一時的に無効にします。

また、AdvancedSearch も CirrusSearch に依存する機能なので、インデックスの作成が終わるまでコメントアウトしておきます。

検索を無効にしたら、Elasticsearch のインデックスを作成します。

Elasticsearch のインデックスを作成したら、LocalSetting.php で検索を有効に戻します。

続いて、検索インデックスを作成します。

検索インデックスを作成したら、検索方法を CirrusSearch に切り替えます。

また、コメントアウトしていた AdvancedSearch も有効化します。

以上で MediaWiki の検索を CirrusSearch に切り替えることができました!

少し長かったですが、手順通り進めれば割とスムーズに導入することができると思います。

ただし、自分の管理している Wiki では参照読み込みを多用しているせいもあって、検索インデックスが作成されるまで数日かかりました。すぐに検索結果に反映されないからと言って焦らないようにしましょう。

日本語の全文検索の精度も改善されてとても満足です。

参考にしたサイト

【MediaWiki】Wikipediaと同様に日本語全文検索機能を強化する【CirrusSearch】 – 対象S連体W
Wikipediaでも利用されているウィキソフトウェア「MediaWiki」。標準の構成では日本語の検索に十分に対応できていません。日本語版Wikipediaと同様に、拡張機能...
MediaWikiを自前で運用している人はCirrusSearchで日本語全文検索を改善しよう - Qiita
サークルなどで独自にMediaWikiを運用している方向けに、検索を改善するExtensionであるCirrusSearchの導入方法を解説します。背景MediaWikiのデフォルト全文検索は日…

追記

しばらく運用したところ、Elasticsearch が落ちて検索できなくなる状況がありました。ステータスを確認すると、メモリ不足でプロセスが強制終了された様子です。

検索できなくなってしまっては本末転倒なので、Elasticsearch が落ちたら自動的に再起動する事で対処しました。

systemd に反映して、Elasticsearch を起動します。

本来ならメモリを増やすなり、チューニングを施した方が良いのですが、暫くこれで様子を見てみます。

コメント

タイトルとURLをコピーしました