How to install cirrussearch extension for mediawiki
Jump to navigation
Jump to search
MediaWiki 原生的站内检索能力略有欠缺,但安装拓展 CirrusSearch 之后,站内检索能力则近乎完美。CirrusSearch 的检索能力主要来自 Elasticsearch 这款外部软件。据笔者实践,2G 小内存的机器就不要折腾了,运行几秒就耗干净内存了。但是对于内存稍强的机器,体验非常棒。
安装依赖
以下软件要看准与 Mediawiki 版本兼容的相应版本。一般其实就是 Linux 发行版 stable 源中的相应版本。
- 外部安装并开启 elasticsearch 的服务
- apt 安装 php
- apt 安装 curl
- apt 安装 openjdk
- apt 安装 composer
详述一下 elasticsearch 的安装及运行:
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.10.2-amd64.deb
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.10.2-amd64.deb.sha512
shasum -a 512 -c elasticsearch-7.10.2-amd64.deb.sha512
sudo dpkg -i elasticsearch-7.10.2-amd64.deb
sudo /bin/systemctl daemon-reload
sudo /bin/systemctl enable elasticsearch.service
sudo systemctl start elasticsearch.service
安装拓展
所谓拓展,即 Mediawiki 的 Extension,均在 Mediawiki 官网 下载即可。
安装 Elastica
- 下载 Elastica 拓展,并解压至 extensions/ 文件夹
- 在 Elastica 文件夹内,执行
sudo composer install --no-dev --no-plugins --no-scripts
。用 sudo 不完美但目前我没找到更完美方法 - 在 LocalSettings.php 中添加
wfLoadExtension( 'Elastica' );
安装 CirrusSearch
- 下载 CirrusSearch 拓展,并解压至 extensions/ 文件夹
- 在 CirrusSearch 文件夹内,执行
sudo composer install --no-dev --no-plugins --no-scripts
。用 sudo 不完美但目前我没找到更完美方法 - 在 LocalSettings.php 中添加
wfLoadExtension( 'CirrusSearch' );
生成索引
这里其实就是配置 CirrusSearch。
改下配置
首先,确保 Elasticsearch 按上文所说已安装并开启开机自动启用。确保你的 LocalSettings.php 里有这三行,其实就是加了第三行:
wfLoadExtension( 'Elastica' );
wfLoadExtension( 'CirrusSearch' );
$wgDisableSearchUpdate = true;
生成索引
其次,生成 Elasticsearch 索引:
sudo php $MW_INSTALL_PATH/extensions/CirrusSearch/maintenance/UpdateSearchIndexConfig.php
# 成功状态如下
Updating cluster ...
indexing namespaces...
Indexing namespaces...done
content index...
Fetching Elasticsearch version...7.10.2...ok
Scanning available plugins...none
Validating mappings...
Validating mapping...ok
Validating aliases...
Validating some_your-wiki_content alias...ok
Validating some_your-wiki alias...ok
Updating tracking indexes...done
general index...
Fetching Elasticsearch version...7.10.2...ok
Scanning available plugins...none
Validating aliases...
Validating some_your-wiki_general alias...ok
Validating some_your-wiki alias...ok
Updating tracking indexes...done
再改配置
其次,从 LocalSettings.php 移除刚才添加的这行:
$wgDisableSearchUpdate = true
调整索引
再次,调整索引:
sudo php $MW_INSTALL_PATH/extensions/CirrusSearch/maintenance/ForceSearchIndex.php --skipLinks --indexOnSkip
sudo php $MW_INSTALL_PATH/extensions/CirrusSearch/maintenance/ForceSearchIndex.php --skipParse
# 第一条命令成功状态如下
[ some_your-wiki] Indexed 10 pages ending at 13 at 146/second
[ some_your-wiki] Indexed 10 pages ending at 25 at 235/second
[ some_your-wiki] Indexed 10 pages ending at 331 at 437/second
[ some_your-wiki] Indexed 10 pages ending at 341 at 440/second
[ some_your-wiki] Indexed 4 pages ending at 347 at 439/second
Indexed a total of 324 pages at 439/second
# 第二条命令成功状态如下
[ some_your-wiki] Indexed 10 pages ending at 25 at 235/second
[ some_your-wiki] Indexed 10 pages ending at 39 at 284/second
[ some_your-wiki] Indexed 10 pages ending at 331 at 437/second
[ some_your-wiki] Indexed 10 pages ending at 341 at 440/second
[ some_your-wiki] Indexed 4 pages ending at 347 at 439/second
Indexed a total of 324 pages at 439/second
再改配置
最后,在 LocalSettings.php 中添加:
$wgSearchType = 'CirrusSearch';
这样,你就成功实现了 Mediawiki 网站的站内搜索,例如搜索“清冽之泉”,则网站内所有包含“清冽之泉”四字的页面和标题,都会即刻出现。