怎样为 MediaWiki 网站安装高级搜索拓展 CirrusSearch

From 清冽之泉
Jump to navigation Jump to search

MediaWiki 原生的站内检索能力略有欠缺,但安装拓展 CirrusSearch 之后,站内检索能力则近乎完美。CirrusSearch 的检索能力主要来自 Elasticsearch 这款外部软件。据笔者实践,2G 小内存的机器就不要折腾了,运行几秒就耗干净内存了。但是对于内存稍强的机器,体验非常棒。

安装依赖

以下软件要看准与 Mediawiki 版本兼容的相应版本。一般其实就是 Linux 发行版 stable 源中的相应版本。

  1. 外部安装并开启 elasticsearch 的服务
  2. apt 安装 php
  3. apt 安装 curl
  4. apt 安装 openjdk
  5. apt 安装 composer

详述一下 elasticsearch 的安装及运行:

1wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.10.2-amd64.deb
2wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.10.2-amd64.deb.sha512
3shasum -a 512 -c elasticsearch-7.10.2-amd64.deb.sha512 
4sudo dpkg -i elasticsearch-7.10.2-amd64.deb
5
6sudo /bin/systemctl daemon-reload
7sudo /bin/systemctl enable elasticsearch.service
8
9sudo systemctl start elasticsearch.service

安装拓展

所谓拓展,即 Mediawiki 的 Extension,均在 Mediawiki 官网 下载即可。

安装 Elastica

  1. 下载 Elastica 拓展,并解压至 extensions/ 文件夹
  2. 在 Elastica 文件夹内,执行 sudo composer install --no-dev --no-plugins --no-scripts。用 sudo 不完美但目前我没找到更完美方法
  3. 在 LocalSettings.php 中添加 wfLoadExtension( 'Elastica' );

安装 CirrusSearch

  1. 下载 CirrusSearch 拓展,并解压至 extensions/ 文件夹
  2. 在 CirrusSearch 文件夹内,执行 sudo composer install --no-dev --no-plugins --no-scripts。用 sudo 不完美但目前我没找到更完美方法
  3. 在 LocalSettings.php 中添加 wfLoadExtension( 'CirrusSearch' );

生成索引

这里其实就是配置 CirrusSearch。

改下配置

首先,确保 Elasticsearch 按上文所说已安装并开启开机自动启用。确保你的 LocalSettings.php 里有这三行,其实就是加了第三行:

1wfLoadExtension( 'Elastica' );
2wfLoadExtension( 'CirrusSearch' );
3$wgDisableSearchUpdate = true;

生成索引

其次,生成 Elasticsearch 索引:

1sudo php $MW_INSTALL_PATH/extensions/CirrusSearch/maintenance/UpdateSearchIndexConfig.php
 1# 成功状态如下
 2Updating cluster ...
 3indexing namespaces...
 4	Indexing namespaces...done
 5content index...
 6	Fetching Elasticsearch version...7.10.2...ok
 7	Scanning available plugins...none
 8	Validating mappings...
 9		Validating mapping...ok
10	Validating aliases...
11		Validating some_your-wiki_content alias...ok
12		Validating some_your-wiki alias...ok
13		Updating tracking indexes...done
14general index...
15	Fetching Elasticsearch version...7.10.2...ok
16	Scanning available plugins...none
17	Validating aliases...
18		Validating some_your-wiki_general alias...ok
19		Validating some_your-wiki alias...ok
20		Updating tracking indexes...done

再改配置

其次,从 LocalSettings.php 移除刚才添加的这行:

1$wgDisableSearchUpdate = true

调整索引

再次,调整索引:

1sudo php $MW_INSTALL_PATH/extensions/CirrusSearch/maintenance/ForceSearchIndex.php --skipLinks --indexOnSkip
2sudo php $MW_INSTALL_PATH/extensions/CirrusSearch/maintenance/ForceSearchIndex.php --skipParse
1# 第一条命令成功状态如下
2[            some_your-wiki] Indexed 10 pages ending at 13 at 146/second
3[            some_your-wiki] Indexed 10 pages ending at 25 at 235/second
4[            some_your-wiki] Indexed 10 pages ending at 331 at 437/second
5[            some_your-wiki] Indexed 10 pages ending at 341 at 440/second
6[            some_your-wiki] Indexed 4 pages ending at 347 at 439/second
7Indexed a total of 324 pages at 439/second
1# 第二条命令成功状态如下
2[            some_your-wiki] Indexed 10 pages ending at 25 at 235/second
3[            some_your-wiki] Indexed 10 pages ending at 39 at 284/second
4[            some_your-wiki] Indexed 10 pages ending at 331 at 437/second
5[            some_your-wiki] Indexed 10 pages ending at 341 at 440/second
6[            some_your-wiki] Indexed 4 pages ending at 347 at 439/second
7Indexed a total of 324 pages at 439/second

再改配置

最后,在 LocalSettings.php 中添加:

1$wgSearchType = 'CirrusSearch';

这样,你就成功实现了 Mediawiki 网站的站内搜索,例如搜索“清冽之泉”,则网站内所有包含“清冽之泉”四字的页面和标题,都会即刻出现。