登录
注册
开源
企业版
高校版
搜索
帮助中心
使用条款
关于我们
开源
企业版
高校版
私有云
模力方舟
AI 队友
登录
注册
6 月10 日(下周三晚 19:00)直播预告:龙虾还活着吗?来看 PocketClaw 上市两个月后对 AI 硬件的真实复盘,点击预约,开播有提醒~
代码拉取完成,页面将自动刷新
开源项目
>
建站系统
>
BBS论坛/问答
&&
捐赠
捐赠前请先登录
取消
前往登录
扫描微信二维码支付
取消
支付完成
支付提示
将跳转至支付宝完成支付
确定
取消
Watch
不关注
关注所有动态
仅关注版本发行动态
关注但不提醒动态
902
Star
3.8K
Fork
1.5K
Discuz
/
DiscuzX
代码
Issues
116
Pull Requests
0
Wiki
统计
流水线
服务
PHPDoc
质量分析
Jenkins for Gitee
腾讯云托管
腾讯云 Serverless
悬镜安全
阿里云 SAE
Codeblitz
SBOM
开发画像分析
我知道了,不再自动展开
更新失败,请稍后重试!
移除标识
内容风险标识
本任务被
标识为内容中包含有代码安全 Bug 、隐私泄露等敏感信息,仓库外成员不可访问
Sphinx 全文搜索的相关研究
进行中
#I3RE2H
zh99998
创建于
2021-05-15 00:03
* 这不是一个报错也不是一个需求,只是整理一下研究结果,给后人参考。 我上一次试图折腾 Sphinx 没成功,挂念了很久,前几天在首页看到有人留言询问全文搜索的事情,某 maintainer 甩了一个很容易搜到并且不好用的教程并且附带了一句“毕竟这个功能的用户量比较少”。 嗯 行吧 即使实际上每个人都需要,只要没有教程没人弄得起来,用户量都会很少的。 就像是中国人不需要用 Google 是一样的道理。 反正就下决心把这个东西研究清楚了 正文: 1. 网上能搜到的大部分文章都是过期和不正确的,用的是很老版本的 Sphinx + Coreseek 插件。 老版本的 Sphinx 不支持中文分词,于是有国人做了一个插件来支持,这个方案主要问题在于,coreseek 已经凉了很久了 某份fork的最后更新是 7 years ago, 至于上游是什么年代的我已经找不到了,官网也早就挂了。 而且早期版本的 Sphinx 的 bug 和性能也不太好。 另外,流传最广的那篇教程似乎也不正确,它的 cron 里引用了 threads_merge 和 posts_merge 的索引,但是给的配置文件里没有定义这俩。即使你搭起来了旧版本的sphinx和coreseek,他也是没办法正常工作的。 2. Sphinx 后来的版本增加了原生的中文支持,但是做的比较一般,只支持 ngram 模式,就是单字拆分,而不是基于词典。Sphinx 新版本的配置文件区别不大。 3. Discuz 用的驱动 Sphinx 也已经过期了,搭起来新版本 Sphinx 之后搜不到任何东西,抓包看提示发现返回了一个 Client too old。不过好在这很容易解决,把 Sphinx 服务器包里附送的 php 驱动,改名字替换进 Discuz 里面就好了。 不过最新版本废弃掉了 SetMatchMode() 函数,好在服务器端依然支持,对照老版本驱动把 这个函数以及用到了的 _mode 变量抄过来,就能正常工作。 4. 这样子能搭起来个能用的全文搜索,但是如之前所说,Sphinx 的中文分词做的不好,会有例如搜索 “论坛”,而出来的结果中,因为在不同的句子里分别包含了“论”字和“坛”字,而被加入搜索结果。如果你能忍这一点。到这里就已经能用了。 5. Sphinx3 转为闭源了,有一些开发者不满而 Fork 了一份叫做 Manticore,粗看了一下这个做的比 Sphinx 好,专门为中文分词做了不少支持 https://manual.manticoresearch.com/Creating_an_index/NLP_and_tokenization/CJK 而且因为是基于 Sphinx 改的,大致上还是兼容的,我还没部署上不过粗看了一眼 php 驱动,类名和函数名都跟原本的类似,可能只要把服务器搭建起来,对接 dz 的部分也能够丢进来直接用。 6. 我正在研究如何搭建 Manticore,如果有成果会继续分享 看起来跟 Sphinx 差不多 7. Discuz 里全文搜索的调用非常集中,只有 search_forum.php:204 这几行,这意味着如果你熟悉任何其他的全文索索引擎,例如 elasticsearch 或者随便什么,把 Discuz 的调用接过来是很容易的,只需要改这一处把他对 Sphinx 的调用接过去就好了,也不一定非要撞死在 Sphinx 这一棵树上。 8. MySQL 也自带了全文搜索功能,中文分词同样是基于 ngram 机制,跟 Sphinx 一样差。 但是用它来做一个不需要外置依赖的默认全文搜索机制似乎总比没有好。
* 这不是一个报错也不是一个需求,只是整理一下研究结果,给后人参考。 我上一次试图折腾 Sphinx 没成功,挂念了很久,前几天在首页看到有人留言询问全文搜索的事情,某 maintainer 甩了一个很容易搜到并且不好用的教程并且附带了一句“毕竟这个功能的用户量比较少”。 嗯 行吧 即使实际上每个人都需要,只要没有教程没人弄得起来,用户量都会很少的。 就像是中国人不需要用 Google 是一样的道理。 反正就下决心把这个东西研究清楚了 正文: 1. 网上能搜到的大部分文章都是过期和不正确的,用的是很老版本的 Sphinx + Coreseek 插件。 老版本的 Sphinx 不支持中文分词,于是有国人做了一个插件来支持,这个方案主要问题在于,coreseek 已经凉了很久了 某份fork的最后更新是 7 years ago, 至于上游是什么年代的我已经找不到了,官网也早就挂了。 而且早期版本的 Sphinx 的 bug 和性能也不太好。 另外,流传最广的那篇教程似乎也不正确,它的 cron 里引用了 threads_merge 和 posts_merge 的索引,但是给的配置文件里没有定义这俩。即使你搭起来了旧版本的sphinx和coreseek,他也是没办法正常工作的。 2. Sphinx 后来的版本增加了原生的中文支持,但是做的比较一般,只支持 ngram 模式,就是单字拆分,而不是基于词典。Sphinx 新版本的配置文件区别不大。 3. Discuz 用的驱动 Sphinx 也已经过期了,搭起来新版本 Sphinx 之后搜不到任何东西,抓包看提示发现返回了一个 Client too old。不过好在这很容易解决,把 Sphinx 服务器包里附送的 php 驱动,改名字替换进 Discuz 里面就好了。 不过最新版本废弃掉了 SetMatchMode() 函数,好在服务器端依然支持,对照老版本驱动把 这个函数以及用到了的 _mode 变量抄过来,就能正常工作。 4. 这样子能搭起来个能用的全文搜索,但是如之前所说,Sphinx 的中文分词做的不好,会有例如搜索 “论坛”,而出来的结果中,因为在不同的句子里分别包含了“论”字和“坛”字,而被加入搜索结果。如果你能忍这一点。到这里就已经能用了。 5. Sphinx3 转为闭源了,有一些开发者不满而 Fork 了一份叫做 Manticore,粗看了一下这个做的比 Sphinx 好,专门为中文分词做了不少支持 https://manual.manticoresearch.com/Creating_an_index/NLP_and_tokenization/CJK 而且因为是基于 Sphinx 改的,大致上还是兼容的,我还没部署上不过粗看了一眼 php 驱动,类名和函数名都跟原本的类似,可能只要把服务器搭建起来,对接 dz 的部分也能够丢进来直接用。 6. 我正在研究如何搭建 Manticore,如果有成果会继续分享 看起来跟 Sphinx 差不多 7. Discuz 里全文搜索的调用非常集中,只有 search_forum.php:204 这几行,这意味着如果你熟悉任何其他的全文索索引擎,例如 elasticsearch 或者随便什么,把 Discuz 的调用接过来是很容易的,只需要改这一处把他对 Sphinx 的调用接过去就好了,也不一定非要撞死在 Sphinx 这一棵树上。 8. MySQL 也自带了全文搜索功能,中文分词同样是基于 ngram 机制,跟 Sphinx 一样差。 但是用它来做一个不需要外置依赖的默认全文搜索机制似乎总比没有好。
评论 (
55
)
登录
后才可以发表评论
状态
进行中
待办的
进行中
已完成
已关闭
负责人
未设置
标签
未设置
标签管理
里程碑
未关联里程碑
未关联里程碑
Pull Requests
未关联
未关联
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
未关联
分支 (
-
)
标签 (
-
)
开始日期   -   截止日期
-
置顶选项
不置顶
置顶等级:高
置顶等级:中
置顶等级:低
优先级
不指定
严重
主要
次要
不重要
参与者(7)
PHP
1
https://gitee.com/Discuz/DiscuzX.git
git@gitee.com:Discuz/DiscuzX.git
Discuz
DiscuzX
DiscuzX
点此查找更多帮助
搜索帮助
Git 命令在线学习
如何在 Gitee 导入 GitHub 仓库
Git 仓库基础操作
企业版和社区版功能对比
SSH 公钥设置
如何处理代码冲突
仓库体积过大,如何减小?
如何找回被删除的仓库数据
Gitee 产品配额说明
GitHub仓库快速导入Gitee及同步更新
什么是 Release(发行版)
将 PHP 项目自动发布到 packagist.org
评论
仓库举报
回到顶部
登录提示
该操作需登录 Gitee 帐号,请先登录后再操作。
立即登录
没有帐号,去注册