中文搜索对于任意程序来说,分词都是一个重大挑战,flarum 对中文搜索的官方支持目前处于to-do阶段,依据各位大佬的尝试,目前支持中文搜索的方案大体有以下几种, 1、Sonic 2、Meilisearch 3、Algolia 4、Elasticsearch
性能、部署难度、数据规模、分词能力 1、从安装使用难度如下: Algolia < Sonic < Meilisearch < Elasticsearch
2、服务器性能占用大小 Algolia < Sonic < Meilisearch < Elasticsearch
3、功能、数据规模和分词能力 Sonic < Algolia < Meilisearch < Elasticsearch
Algolia (www.algolia.com)不需要在自己服务器部署,不用担心影响服务器的性能,只需从 Algolia 官网申请一个API ,然后在 Flarum 安装一个Scout Search 扩展,启用后,填写Algolia API 即可。
Algolia 免费方案仅可使用 10,000 次/月的查询量,超出的量可以查阅官方价格 https://www.algolia.com/pricing/ ,假如你的论坛使用量不多,可以试试这个。
但这里更推荐将 flarum 的搜索页面自动跳转到公共搜索引擎(谷歌,Bing,百度)。
进入编辑:后台 > 外观 > 自定义页脚 添加 script 标签,在标签里面添加 redirect.js 文件里面的代码,保存
<script>
// code ...
</script>
刷新页面,完毕
redirect.js 如下:
(function () {
function redirectSearch(search) {
const href =
[
"https://www.google.com/search?q=",
"https://www.bing.com/search?q=",
"https://www.baidu.com/s?wd=",
][0] +
"site%3A" +
location.hostname +
"/d/" +
"+" +
search.replace(/.*[\?&]q=/, "");
// window.open(href, "_blank");
location.href = href;
}
const _pushState = history.pushState;
const _replaceState = history.replaceState;
history.pushState = function (o, a, u) {
if (/\?q=/.test(u)) {
return redirectSearch(u);
}
_pushState.call(history, o, a, u);
};
history.replaceState = function (o, a, u) {
if (/\?q=/.test(u)) {
return redirectSearch(u);
}
_replaceState.call(history, o, a, u);
};
if (/[\?&]q=/.test(location.search)) {
redirectSearch(location.search);
}
})();