mediawikiの検索精度が悪く目的のものに辿り着かない。
Elasticsearch
を使ったExtension:CirrusSearch
という拡張があるようなので導入してみる。
インストール
環境
[code lang=bash]
cat /etc/issue.net
Ubuntu 14.04.2 LTS
uname -a
Linux ws2 3.13.0-46-generic #79-Ubuntu SMP Tue Mar 10 20:06:50 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
[/code]
php-curl
がインストールされてない場合
[code lang=bash]
sudo apt-get install php5-curl
[/code]
add-apt-repository
がインストールされてない場合
[code lang=bash]
sudo apt-get install -y software-properties-common
[/code]
Oracle Javaインストール
ここ見るとJava 8 update 20 or later, or Java 7 update 55 or late
との事なのでjava8を入れる
[code lang=bash]
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install -y oracle-java8-installer
java -version
java version "1.8.0_51"
Java(TM) SE Runtime Environment (build 1.8.0_51-b16)
Java HotSpot(TM) 64-Bit Server VM (build 25.51-b03, mixed mode)
[/code]
Elasticsearchインストール
ここを参照
[code lang=bash]
wget -qO – https://packages.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add –
echo "deb http://packages.elastic.co/elasticsearch/1.7/debian stable main" | sudo tee -a /etc/apt/sources.list.d/elasticsearch-1.7.list
sudo apt-get update && sudo apt-get install elasticsearch
sudo update-rc.d elasticsearch defaults 95 10
[/code]
Elasticsearch起動確認
[code lang=bash]
sudo /etc/init.d/elasticsearch start
* Starting Elasticsearch Server
ps -Cjava ufww
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
elastic+ 5612 35.7 12.3 4053440 253992 ? Sl 19:20 0:10 /usr/lib/jvm/java-8-oracle//bin/java -Xms256m -Xmx1g -Djava.awt.headless=true -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -XX:+HeapDumpOnOutOfMemoryError -XX:+DisableExplicitGC -Dfile.encoding=UTF-8 -Delasticsearch -Des.pidfile=/var/run/elasticsearch/elasticsearch.pid -Des.path.home=/usr/share/elasticsearch -cp :/usr/share/elasticsearch/lib/elasticsearch-1.7.1.jar:/usr/share/elasticsearch/lib/*:/usr/share/elasticsearch/lib/sigar/* -Des.default.config=/etc/elasticsearch/elasticsearch.yml -Des.default.path.home=/usr/share/elasticsearch -Des.default.path.logs=/var/log/elasticsearch -Des.default.path.data=/var/lib/elasticsearch -Des.default.path.work=/tmp/elasticsearch -Des.default.path.conf=/etc/elasticsearch org.elasticsearch.bootstrap.Elasticsearch
[/code]
mediawiki設定
mediawikiを最新にしておく(v1.25)
参照
[code lang=bash]
cd /path/to/mediawiki
git submodule add https://git.wikimedia.org/git/mediawiki/extensions/Elastica.git extensions/Elastica
[/code]
Extension:CirrusSearchの設定
[code lang=bash]
git submodule add https://git.wikimedia.org/git/mediawiki/extensions/CirrusSearch.git extensions/CirrusSearch
[/code]
composerで依存パッケージを入れる
これとかが必要らしい
mediawiki projectにcomposer.phar
がある場合
[code lang=bash]
cd extensions/Elastica
php ../../composer.phar update
[/code]
LocalSettings.php編集
[code lang=bash]
cat <> LocalSettings.php
require_once "$IP/extensions/Elastica/Elastica.php";
require_once "$IP/extensions/CirrusSearch/CirrusSearch.php";
$wgDisableSearchUpdate = true;
$wgCirrusSearchServers = array( 'localhost' );
EOF
[/code]
index生成
[code lang=bash]
php extensions/CirrusSearch/maintenance/updateSearchIndexConfig.php
[/code]
LocalSettings.phpから$wgDisableSearchUpdate = true;
を削除する
準備
一回目php extensions/CirrusSearch/maintenance/forceSearchIndex.php --skipLinks --indexOnSkip
が失敗するがもう一度実行すると通る(要確認)
[code lang=bash]
php extensions/CirrusSearch/maintenance/forceSearchIndex.php –skipLinks –indexOnSkip
php extensions/CirrusSearch/maintenance/forceSearchIndex.php –skipParse
[/code]
LocalSettings.php編集
[code lang=bash]
cat <> LocalSettings.php
$wgSearchType = 'CirrusSearch';
EOF
[/code]
動作確認
DEBUG LOG出力をenable
[code lang=php]
$wgDebugLogFile = "/var/tmp/mw.log";
[/code]
ログ
[code lang=log]
[CirrusSearchRequests] full_text search for 'aws' against rubyjoe_content took 78 millis and 66 Elasticsearch millis. Found 42 total results and returned 20 of them starting at 0. Requested via web for 55af6ada74498665b9ed9d31013b278f by executor 429345900
[/code]
所感
体感、精度ともに向上。導入も比較的容易
細々した設定は必要に迫られたら実施。デフォルトのままでも以前に比べたらかなり改善されている。
コメント