运营着自己的MediaWiki网站的人可以使用CirrusSearch来改善日文全文搜索
我会解释一下CirrusSearch扩展的安装方法,这对于在社团等地方自行运营MediaWiki的人很有用。
背景情况
MediaWiki的默认全文搜索不太适合日语。
另外,由于日语的文章没有按单词间隔空格,标准的全文检索会出现漏检问题。例如,在以下图片中,对于关键词“写生”,只显示了一篇文章,但当关键词变为“写生帖”时,却出现了多篇文章。这可能是因为单词没有正确分割造成的漏检情况。
尽管我们花了那么多时间整理维基百科,但如果需要的信息无法在搜索中找到,就会感到困扰。因此,我们引入了名为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
安装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';
确认搜索结果
如果没有出现错误,那么安装就完成了!如果出现错误,可以通过消息进行搜索,重新处理可能出现问题的部分等来尝试解决。
以下是“写生”搜索结果的图表。现在我们可以找到以前未曾涉及到的文章。
附录:压缩Elasticsearch的堆大小。
默认情况下,Elasticsearch会保留2GB的堆内存。
如果在廉价的托管服务器或VPS上运行Wiki,并且内存不足的情况下,需要限制可用的堆内存。
这样不好,我们应该在限制内存后重新启动。我们会参考以下文章进行修正。
- 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