【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
」とします。最小および最大ヒープサイズは同一の値に設定する必要があります。
ディスカッション
コメント一覧
まだ、コメントがありません