目前在心百科的网站上,绝大多数的条目都是图书,而且在设计之初,我就将所有图书条目均放入了名为图书的命名空间中。但是这样一来,要想搜索一本书的时候就变得很麻烦,每次要么只能进入到搜索页面中,然后通过高级搜索功能来找寻,而且因为设置的权重不一样,需要的结果也可能会被排在后面。
search-result_in_mindseed.png
要么就在输入框中先键入命名空间前缀,比如“图书:”然后再输入关键词,如下图所示:
PrefixSearch.png
可是在MediaWiki的官网中,如果你输入某些关键词,比如page form,排在前面的将是Extension:Page Forms,如下图所示:
search-suggester_in_mediawiki.png
很显然自动填充的内容不仅仅是返回主条目中的结果,而是连同其他命名空间中的结果也一起返回了。那心百科是否也可以这么做呢?
在网上搜索了一圈,给出的答案之一是设置$wgNamespacesToBeSearchedDefault参数

$wgNamespacesToBeSearchedDefault = [
    NS_MAIN => true,
    NS_BOOK => true
    NS_JOURNAL => true
];

问题是,该选项我早在启用CirrusSearch扩展时就设置过了,否则也不会在高级搜索中默认为三个命名空间了(见上图搜索选项的最后一行,默认为主、图书和期刊三项)。
最终还是从CirrusSearch扩展的设置文档中找到了解决办法。打开LocalSettings.php文件,加入如下代码:

$wgCirrusSearchUseCompletionSuggester = 'build'; //Allow building the index from UpdateSuggesterIndex.php

默认是不开启推荐的,如果改成yes的话,只会推荐主命名空间中的内容却不会显示其他前缀(我最开始一直使用的是yes选项)。
如果建议索引比较少的话,可以打开控制台,先进入维护脚本(maintenance)目录,并执行以下代码:

$ php updateSearchIndex.php

同时,也可以进入CirrusSearch扩展的维护脚本(maintenance)目录,并执行以下代码:

$ php UpdateSuggesterIndex.php

好了,这下在输入框中在搜索内容的话就会连同其他命名空间的一起显示了。
search-suggester_in_mindseed.png
当然,MediaWiki的高级搜索功能目前还是有一定的缺陷,就如上面的方法,即便是能够显示出其他命名空间中的内容,也只能实现以关键词开头的,也就是说,如果你只记得位于中间的关键词,那么它是不会在输入框中返回任何结果的。所以聊胜于无吧。

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