【MediaWiki】Wikipediaと同様に日本語全文検索機能を強化する【CirrusSearch】

インターネット

 Wikipediaでも利用されているウィキソフトウェア「MediaWiki」。標準の構成では日本語の検索に十分に対応できていません。日本語版Wikipediaと同様に、拡張機能「CirrusSearch」をインストールして日本語全文検索機能を強化します。加えて、高度な検索機能も利用できるようにします。

 MediaWiki拡張機能「CirrusSearch」を動作させるためにはJavaで動く「Elasticsearch」が必要です。Javaが利用できる共用レンタルサーバーはほとんど存在しないため、VPSやクラウドの利用が必要だと思います。
 また、Elasticsearch(またはMediaWiki拡張機能「CirrusSearch」)が大文字のDB名に対応していないようでしたので小文字のDB名でデータベースを作り直しました。
 セットアップ前に以上の2点を確認しておく必要があると思います。
 また、あらかじめMediaWikiをセットアップします。

参考にしたサイト様

環境

  • CentOS 8 Stream
  • nginx 1.2.1
  • PHP 7.4
  • MariaDB 10.5
  • MediaWiki 1.38

Javaのインストール

 まずはOpenJDKをインストールします。
 当初、最新バージョンのJavaをインストールしたところElasticsearchが動きませんでしたので、バージョン8(1.8.0)をインストールし直しました。

sudo dnf -y install java-1.8.0-openjdk

 後に必要になるパッケージ管理ツール「Composer」もインストールしておきます。

sudo dnf -y install --enablerepo=epel composer

Elasticsearchのインストール

 続いて「Elasticsearch」をインストールします。MediaWikiのバージョンによって動作するバージョンが異なります。MediaWiki 1.33以上はElasticsearchのバージョン6.8をインストールします。
 インストール方法はこちらのページが参考になります。
 https://www.elastic.co/guide/en/elasticsearch/reference/6.8/rpm.html

 パッケージ署名の確認に必要な公開鍵をインポートします。

sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

 RPMリポジトリを追加します。同時にインストールするバージョンも指定します。

sudo vi /etc/yum.repos.d/elasticsearch.repo

 こちらのコードを追記します。

[elasticsearch-6.x]
name=Elasticsearch repository for 6.x packages
baseurl=https://artifacts.elastic.co/packages/6.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md

 Elasticsearchをインストールします。

sudo dnf -y install elasticsearch

 サーバー起動時にElasticsearchサービスを自動で起動するように設定します。

sudo systemctl enable elasticsearch

 ここでサーバーを再起動しておきます。

sudo reboot

 TCPポート9200を開きます。最後にElasticsearchが正常に稼働しているか確認します。

sudo firewall-cmd --add-port=9200/tcp --permanent
sudo firewall-cmd --reload
curl http://127.0.0.1:9200

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

 次に必要なElasticsearchのプラグインをインストールします。
 形態素解析のためのanalysis-kuromojiと、拡張Unicodeサポートを追加する為のanalysis-icuが必要なようです。

sudo /usr/share/elasticsearch/bin/elasticsearch-plugin install analysis-kuromoji
sudo /usr/share/elasticsearch/bin/elasticsearch-plugin install analysis-icu

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

 次に、必要な拡張機能をMediaWikiにインストールします。Elasticsearchを呼び出す「Elastica」、本体の「CirrusSearch」、高度な検索機能を利用できるようにする「AdvancedSearch」の3つをインストールします。

cd /(MediaWikiのあるディレクトリ)/extensions
wget https://extdist.wmflabs.org/dist/extensions/Elastica-REL1_38-1604ca1.tar.gz
wget https://extdist.wmflabs.org/dist/extensions/CirrusSearch-REL1_38-a858f57.tar.gz
wget https://extdist.wmflabs.org/dist/extensions/AdvancedSearch-REL1_38-67ae216.tar.gz

 それぞれの最新バージョンはこちらでご確認ください。
 https://www.mediawiki.org/wiki/Extension:Elastica/
 https://www.mediawiki.org/wiki/Extension:CirrusSearch/
 https://www.mediawiki.org/wiki/Extension:AdvancedSearch/

 展開し、元ファイルは削除しておきます。

tar xvfz ./Elastica-REL1_38-1604ca1.tar.gz
tar xvfz ./CirrusSearch-REL1_38-a858f57.tar.gz
tar xvfz ./AdvancedSearch-REL1_38-67ae216.tar.gz
rm -f Elastica-REL1_38-1604ca1.tar.gz
rm -f CirrusSearch-REL1_38-a858f57.tar.gz
rm -f AdvancedSearch-REL1_38-67ae216.tar.gz

 Composerを使ってパッケージをインストールします。

cd /(MediaWikiのあるディレクトリ)/Elastica
composer install --no-dev
cd /(MediaWikiのあるディレクトリ)/CirrusSearch
composer install --no-dev
cd /(MediaWikiのあるディレクトリ)/AdvancedSearch
composer install --no-dev

 この先はCirrusSearchのREADMEファイルが参考になります。
 https://gerrit.wikimedia.org/g/mediawiki/extensions/CirrusSearch/%2B/HEAD/README

 LocalSettings.phpを編集して拡張機能を有効にします。

vi /(MediaWikiのあるディレクトリ)/LocalSettings.php

 ひとまず、こちらのコードを追記します。

wfLoadExtension( 'Elastica' );
wfLoadExtension( 'CirrusSearch' );
$wgDisableSearchUpdate = true;

インデックスを作成

 最初にElasticsearchのインデックス設定を生成します。

cd /(MediaWikiのあるディレクトリ)/extensions/CirrusSearch/maintenance
php UpdateSearchIndexConfig.php

 Linuxでは大文字と小文字を区別しますので、ディレクトリ名・ファイル名は正確に入力する必要があります。初歩で申し訳ないのですが、私はここでつまずきました。

 続いてLocalSettings.phpを編集して$wgDisableSearchUpdate = true;をコメントアウトし、テーブルの更新を有効にします。

vi /(MediaWikiのあるディレクトリ)/LocalSettings.php

 このようにコメントアウト(または削除)します。

#$wgDisableSearchUpdate = true;

 そしてインデックスを作成します。

php ForceSearchIndex.php --skipLinks --indexOnSkip
php ForceSearchIndex.php --skipParse

 最後にLocalSettings.phpを編集してCirrusSearchを検索システムに設定し、AdvancedSearchも有効にします。

vi /(MediaWikiのあるディレクトリ)/LocalSettings.php

 下記のコードを追記します。

$wgSearchType = 'CirrusSearch';
wfLoadExtension( 'AdvancedSearch' );

 以上でセットアップはすべて終了です。実際に検索を行ってみて不具合がないことを確かめます。

追加の設定

 ElasticsearchのRAMのヒープサイズを設定しなおした方が良いようです。こちらを参考にしてください。
 https://www.elastic.co/guide/en/elasticsearch/reference/6.8/heap-size.html

sudo vi /etc/elasticsearch/jvm.options

 ファイルを開くとファイルの上の方に記述がありますので、値を調整します。
 Xms○○○Xmx○○○の値を、運用しているサーバーのRAMの容量の50%以下の値に制限します。○○○の部分は、例えば1GBなら「1g」、500MBなら「500m」とします。最小および最大ヒープサイズは同一の値に設定する必要があります