カテゴリー
コンピュータ

MediaWikiにElasticsearchを導入する

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 CloudBonsai)を使うのは、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を使用した検索となる。

AdvancedSearch を使用した検索

下記のページに検索で使用できる構文が載っている

Help:CirrusSearch – MediaWiki

検索に含まれないようにする

独自にナビゲーションメニューなど作成している場合検索に含まれないようにするため 要素の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 を使って適切なバージョンを使ってくれる

⚓ T276854 composer update command installs PHP client for Elasticsearch v6.8.0 where some classes were removed

コメントを残す