运营着自己的MediaWiki网站的人可以使用CirrusSearch来改善日文全文搜索

我会解释一下CirrusSearch扩展的安装方法,这对于在社团等地方自行运营MediaWiki的人很有用。

背景情况

MediaWiki的默认全文搜索不太适合日语。

default-search.png

另外,由于日语的文章没有按单词间隔空格,标准的全文检索会出现漏检问题。例如,在以下图片中,对于关键词“写生”,只显示了一篇文章,但当关键词变为“写生帖”时,却出现了多篇文章。这可能是因为单词没有正确分割造成的漏检情况。

default-search2.png

尽管我们花了那么多时间整理维基百科,但如果需要的信息无法在搜索中找到,就会感到困扰。因此,我们引入了名为CirrusSearch的搜索扩展功能。

循环搜索

CirrusSearch(锐搜)是一个增强MediaWiki搜索功能的扩展插件。维基百科和所有维基媒体项目都使用此扩展。它使用Elasticsearch作为搜索引擎,可以轻松进行全文搜索。

安装步骤如公式的Extension:CirrusSearch所述。然而,实际跟随这些步骤,你需要到处搜索才能了解全部步骤,而且由于多次掉进陷阱,我决定把这些步骤记录下来。

安装的复杂性似乎被开发者所认识到,在扩展功能页面上也写着“希望解决复杂的依赖关系”。将来可能会变得更容易安装。

环境

    • CentOS 7.5

掲載する手順はCentOS7を前提としますが、他OSでも導入の流れは同じです

MediaWiki 1.32.0

Elasticsearch 5.6.14

MediaWiki和CirrusSearch是正在积极开发的项目,以下信息可能不是最新的。
请务必与官方文件或README等一手信息进行对照,并遵循官方指示以解决任何差异。

引入 Elasticsearch

正如前文所述,由于CirrusSearch使用Elasticsearch,因此需要先进行安装。

安装Java(JDK)。

因为Elasticsearch需要Java才能运行,所以我们要安装它。

$ sudo yum -y install java-1.8.0-openjdk-devel

安装Elasticsearch5或6

(过时的信息)在这里有一个陷阱,CirrusSearch目前仅支持Elasticsearch5.x及以下的版本。

根据MediaWiki版本的不同,需要安装的Elasticsearch版本也不同。简单地说,如果是MediaWiki版本1.32之前,则需要5.x版本,而如果是1.33之后的版本,则需要6.x版本。

如果按照普通方式安装,会安装6.x版本,因此根据MediaWiki版本的不同,在启动阶段可能会收到此类错误消息并停止。

`Only Elasticsearch 5.x is supported.  Your version: 6.5.4.`

只要遵循官方流程即可。请不要忘记将版本6.x更新为5.x。

$rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
$ sudo vim /etc/yum.repos.d/elasticsearch.repo

name=Elasticsearch repository for 5.x packages
baseurl=https://artifacts.elastic.co/packages/5.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
$ sudo yum -y install elasticsearch

启动并进行操作确认。

$ sudo systemctl enable elasticsearch
$ sudo systemctl start elasticsearch
$ curl http://127.0.0.1:9200
{
  "name" : "*******",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "**********************",
  "version" : {
    "number" : "5.6.14",
    "build_hash" : "f310fe9",
    "build_date" : "2018-12-05T21:20:16.416Z",
    "build_snapshot" : false,
    "lucene_version" : "6.6.1"
  },
  "tagline" : "You Know, for Search"
}

进行分析-安装kuromoji

分析-Kuromoji是一个用于日语词法分析的插件。如果没有它,日语搜索将是不完整的,因此请安装它。
只要Elasticsearch已经正确安装,就可以很容易地进行安装。

$ sudo /usr/share/elasticsearch/bin/elasticsearch-plugin install analysis-kuromoji
$ sudo /usr/share/elasticsearch/bin/elasticsearch-plugin list
analysis-kuromoji

引入Elastica

这是一个用于MediaWiki和Elasticsearch进行交互的扩展。请从官方页面的“下载”链接中,根据您使用的MediaWiki版本下载适合的扩展。
以下是1.32版本的示例。

$ wget https://extdist.wmflabs.org/dist/extensions/Elastica-REL1_32-9fcf88c.tar.gz
$ tar -xzf Elastica-REL1_32-9fcf88c.tar.gz -C /MediaWikiが/ある/ディレクトリ/extensions

在LocalSettings.php文件中加载。

wfLoadExtension( 'Elastica' );

只有这样还不能算是安装完毕,你还需要使用composer。如果没有composer,请参考官方指南。

$ cd /MediaWikiが/ある/ディレクトリ/extensions/Elastica
$ composer install --no-dev
version-elastica.png

安装CirrusSearch

安装

辛苦了。终于可以开始安装主体了。

只需要一种选择,请原生地用中文释义以下内容:

从公式网站下载并解压到扩展文件夹,与Elastica的安装方法相同。
按照指示在LocalSettings.php文件中添加相应的内容,然后通过版本信息确认是否成功安装。

require_once "$IP/extensions/CirrusSearch/CirrusSearch.php";

创建索引

我会去看一下,因为写着要看README从这里开始。下面将解释工作内容,但由于CirrusSearch可能会有版本更新,所以请同时检查链接内容。有关安装的部分位于第4-31行左右。

按指示,先停止搜索一段时间。

wfLoadExtension( 'Elastica' );
wfLoadExtension( 'CirrusSearch' );
$wgDisableSearchUpdate = true;

我要执行创建索引设置的脚本。

$ php extensions/CirrusSearch/maintenance/updateSearchIndexConfig.php
content index...
        Fetching Elasticsearch version...5.6.14...ok
        Scanning available plugins...none
...
                Updating tracking indexes...done
                Deleting namespaces...done
                Indexing namespaces...done

如果更新SearchIndexConfig.php的执行失败,则可能会发生。虽然修复计划已经安排好了,但如果出现这种情况,似乎可以通过执行metastore.php来避免。

在最新版本中,上述问题已经得到解决。

启用重新搜索。

- $wgDisableSearchUpdate = true;

终于要开始创建索引了。对于规模较大的维基百科,这可能需要相当长的时间,所以可以边喝茶边等待。

$ php extensions/CirrusSearch/maintenance/forceSearchIndex.php --skipLinks --indexOnSkip
[              wikidb] Indexed 10 pages ending at 10 at 13/second
Indexed a total of 10 pages at 13/second

$ php extensions/CirrusSearch/maintenance/forceSearchIndex.php --skipParse
[              wikidb] Indexed 10 pages ending at 10 at 10/second
Indexed a total of 10 pages at 10/second

当到达这一步时,将搜索引擎切换到CirrusSearch即可完成工作。

+ $wgSearchType = 'CirrusSearch';

确认搜索结果

如果没有出现错误,那么安装就完成了!如果出现错误,可以通过消息进行搜索,重新处理可能出现问题的部分等来尝试解决。

以下是“写生”搜索结果的图表。现在我们可以找到以前未曾涉及到的文章。

success.png

附录:压缩Elasticsearch的堆大小。

默认情况下,Elasticsearch会保留2GB的堆内存。

如果在廉价的托管服务器或VPS上运行Wiki,并且内存不足的情况下,需要限制可用的堆内存。

elastic-heavy.png

这样不好,我们应该在限制内存后重新启动。我们会参考以下文章进行修正。

    Elasticsearch Logstash Kibanaの環境構築

打开/etc/elasticsearch/jvm.options文件,并查找Xms(应该在开头)。将Xms和Xmx设置为相同的值。
限制的值需要根据环境进行试验和调整,但一般建议将其设置为物理内存的50%以下。

  # Xms represents the initial size of total heap space
  # Xmx represents the maximum size of total heap space

- -Xms2g
+ -Xms500m
- -Xmx2g
+ -Xmx500m

如果重新启动 Elasticsearch,搜索变得更快,那就可以了。

$ sudo systemctl restart elasticsearch