Relevanssi试用:对中文搜索有问题,附临时解决方法

最近试用了一下Relevanssi,是一个wordpress搜索插件。因为wp搜索一直比较慢,而且相当耗资源。一般小站几下F5就挂了,我想尝试一下有关搜索的插件。找了一下,貌似Relevanssi用户量最多。但是很可惜,试用结果是,Relevanssi对中文搜索是有问题的。

请注意,本文写作时间为2017年,此插件已经经历较大幅度的更新,本文仅供参考。

-2019年12月

Relevanssi貌似原理是这样的,首先可以在控制台设置索引范围,比如哪个类目,哪个自定义类型需要索引。之后,它把可能的搜索字段做一个翻转的拓展。比如英文search,翻转为hcraes。随后单独建立一个表存索引数据,这两个词都存进去,还可以设置黑名单之类的。首先进行精确查询,如果精确查询查不到数据,再进行模糊查询。

其实这样做本身是没什么问题的,我在实际测试的时候,发现搜索英文完全正常,搜索中文就不好使,让我很疑惑。仔细研究以后,发现它的搜索语句有一些蹊跷。按理来说,模糊搜索直接就是 term LIKE %sea% 对吧,但是它写的是 term LIKE '%sea' OR term LIKE 'sea%'。如果这么查询的话,英文是可以成功匹配到的,但是中文不行。

不清楚为什么Relevanssi采取这种方式查询,可能比较匹配英语吧。如果想解决的话,咱们要改一下插件源码了。

/wp-content/relevanssi/lib/search.php 第665行左右:原语句类似为

$o_term_cond = "(term LIKE '%#term#' OR term LIKE '#term#%') ";

修改为

if ("sometimes" == $fuzzy) {
	$search_again = true;
	$o_term_cond = "(term LIKE '%#term#%') ";
}

P.S. 这插件功能不错,还可以记录用户的搜索日志,很强大。

点赞