MediaWikiの検索機能をElasticsearcを使った検索に変更したときの手順
環境
- MediaWiki1.35
- Elasticsearc 6.8 (ローカルサーバ)
Elasticsearch
MediaWikiのバージョンに対応している Elasticsearchを使用すること、プラグイン「analysis-icu」,「kuromoji」がインストールされていることを確認。
MediaWiki1.35では Elasticsearch 6.5.x – 6.8.x のバージョンが必要 (ハマりやすいので注意)
ここでは Elasticsearc 6.8 (localhost) を用意した。
MediaWiki 1.33.x – 1.36.x require Elasticsearch 6.5.x – 6.8.x (6.5.4 recommended)
Extension:CirrusSearch – MediaWiki
Elasticsearcのインストールについては割愛
SaaS(Elastic Cloud、Bonsai)を使うのは、CirrusSearchが使用しているライブラリの関係で「X-Pack」が使えない「Easticsearc」バージョンの制約があるので難しいかも…
MediaWiki
CirrusSearcとElasticaの2つの拡張をダウンロードしextensionsに展開する
Elasticaに含まれているライブラリのバージョンが古いのでcomposerで依存するライブラリをダウンロードします
./Elastica
composer install --no-dev
LocalSettings.phpの下部に次のコードを追加します。 Extensionを読み込ませ、 Elasticsearc のサーバを指定(ここではlocalhost)、$wgDisableSearchUpdate = true;
を追加
wfLoadExtension( 'Elastica' );
wfLoadExtension( 'CirrusSearch' );
$wgCirrusSearchServers = [ 'localhost' ];
$wgDisableSearchUpdate = true; //後で消す
プラグインをスキャン、インデックスを作成
php extensions/CirrusSearch/maintenance/UpdateSearchIndexConfig.php
完了後 $wgDisableSearchUpdate = true;
を削除
コンテンツを流し込みむ(wikiの規模によって時間がかかります)
php extensions/CirrusSearch/maintenance/ForceSearchIndex.php --skipLinks --indexOnSkip
php extensions/CirrusSearch/maintenance/ForceSearchIndex.php --skipParse
完了したらSearchTypeをCirrusSearchに変更
$wgSearchType = 'CirrusSearch';
これで検索がElasticsearchを使用した検索となる。
下記のページに検索で使用できる構文が載っている
検索に含まれないようにする
独自にナビゲーションメニューなど作成している場合検索に含まれないようにするため 要素のclass名に navigation-not-searchable
の指定が必要
mediawiki/WikiTextStructure.php at master · wikimedia/mediawiki
関連する拡張
CirrusSearchをインストールした際に使いたい拡張
AdvancedSearch 高度な検索を提供する
Extension:AdvancedSearch – MediaWiki
カテゴリ内検索、ファイル検索では画像サイズによるフィルタなど高度な検索をフォームで使うことができる
wfLoadExtension( 'AdvancedSearch' );
RelatedArticles 関連する記事を表示
Extension:RelatedArticles – MediaWiki
$wgRelatedArticlesUseCirrusSearch = true;
を追加する事によりCirrusSearchを使って関連記事を表示する事ができる
wfLoadExtension( 'RelatedArticles' );
$wgRelatedArticlesFooterWhitelistedSkin = ['minerva','vector'];
$wgRelatedArticlesUseCirrusSearch = true;
elasticsearch/elasticsearch のバージョンに違いによるエラー
Semantic MediaWiki を使っているとインストール時にエラーが出る場合がある その場合CirrusSearchが対応していないバージョン(elasticsearch/elasticsearch 6.8)がダウンロードされている可能性が高い
- Elastica elasticsearch/elasticsearch〜6.5.1 || 〜6.7.2
- SemanticMediaWiki elasticsearch/elasticsearch ^5.3|^6.0,
上記のバージョンを要求しているので composer.local.json にElastica の composer.json を指定することにより composer-merge-plugin を使って適切なバージョンを使ってくれる