终于搞定了Elasticsearch服务,也安装了Elastica扩展和CirrusSearch扩展,满以为会网站搜索会变得更加高大上,结果却出现了“找不到和查询相匹配的结果”的尴尬场面。
mediawiki-search-none-found.png
回忆一下之前的搜索貌似没有这样的问题,之所以出现这样的结果正是因为安装了高级搜索以及变更了一下自定义命名空间(参见本站《MediaWiki 更改命名空间ID后报错,前缀变“特殊:Badtitle/NSXXX:”》。
最初是把问题的焦点放在了CirrusSearch扩展上,一会儿要开启$wgDisableSearchUpdate = true;一会儿又要删掉的,维护脚本和配置文件的设置也是按特定顺序来,很难说在过程中是否有哪一步的顺序给操作反了。
完全按说明操作一遍之后,还是无果。停用Elastica扩展和CirrusSearch扩展,仅保留高级搜索(AdvancedSearch扩展)继续尝试。
这次的重点放在自定义命名空间上,$wgNamespacesToBeSearchedDefault的设置没有更改过,从搜索的结果看也确实自动勾选了我创建的新命名空间(具体操作见本站文章《如何选择MediaWiki搜索的默认命名空间》)。
从命名空间的操作手册中提到过两个脚本,分别为:

# php updateArticleCount.php
# php initSiteStats.php

其实从脚本名中就能看出基本没用,反正试了也没啥关系,事实证明确实如此。
在另外一个问题中也提到一个维护脚本

php rebuildtextindex.php

试了一下,还是老样子!
干脆关闭高级搜索功能,之后就是一通的维护脚本乱试,再次搜索竟然好了!太神奇了!
mediawiki-search-result.png
可究竟是哪一步起了作用呢?还好前两天试验Elasticsearch服务,把网站备份到了本地虚拟机上,两者的问题一模一样。先创建快照,把上述所有的步骤重新操作了一遍,最后找到了具体的方案。
首先,关闭所有高级搜索功能(Elastica扩展、CirrusSearch扩展和AdvancedSearch扩展),然后进入维护脚本目录,执行php rebuildtextindex.php,重新生成文本索引,当然你也可以执行php rebuildall.php来一个彻底地重建。
切记一定要先关掉所有高级搜索功能,否则再怎么执行维护脚本都是没用的!!!
至此,上述问题解决。如果要重新启用高级搜索功能,记得按CirrusSearch扩展的设置要求完整地操作一遍,否则一旦开启仍然会出现“找不到和查询相匹配的结果”的情况。
MediaWiki-CirrusSearch_Result.png
不过用了CirrusSearch之后,结果显示总是怪怪的,不知道是不是中文分词的原因。

参考文章

手册:使用自定义命名空间
Manual:rebuildtextindex.php
Manual:updateSearchIndex.php
Manual:rebuildall.php

最后修改:2024 年 01 月 09 日
如果觉得我的文章对你有用,请随意赞赏