Rails 使用 PostgreSQL + pg_search 进行中文全文检索

samport · 发布于 2016年6月03日 · 最后由 themadeknight 回复于 2016年9月13日 · 1776 次阅读
26232

在小型Rails项目中不借助Elasticsearch等专业的第三方搜索引擎,只使用pg_search进行全文检索其实是能够满足一般应用场景的。

但是由于postgresql默认不支持中文分词的功能,所以需要额外为数据库配置一个中文分词的扩展。一个比较简单的中文分词的方案是采用scws+中文字典库+zhparser组合。另外,在pg_search调用时,需要指定在数据库设置的中文检索配置。除此以外就没有什么特别之处了。

详细的安装过程请参照: PostgreSQL + SCWS + zhparser + Rails4 + pg_search 实现中文全文检索

在线演示:Full-text Searching Demo [Chinese/English/Japanese]

注:不管是Rails还是Github,我都是初学者,难免有错误,欢迎大家指正。例如我还是搞不定那个application_helper里面的link_activate方法。如果项目不是放在子目录的话,就没问题,现在布置到子目录里面,菜单链接就没法显示active了。

共收到 5 条回复
11794

效果不佳,搜索“三十”找不打,但下文有包含。 如图

16154

之前我的网站 http://www.rails365.net 也是使用postgresql本身的全文检索,也安装了中文支持的插件。

这里我也写过一篇文章来介绍它的使用 http://www.rails365.net/articles/postgresql-quan-wen-jian-suo-xi-tong-pg-search-shi-xian-xian-si

不过我以PostgreSQL的全文检索的使用者来看,它的速度并不快,创建一篇文章,要建立好多索引,这个时候后台就在慢慢创建,要等待一些时间,它查询起来,也是时快时慢的,慢的时候要等上几秒,所以还不如使用elasticsearch来搜索,我的网站最后换上了它,不仅功能强大了许多,而且速度更快,毕竟它是号称接近实时的。

所以建议不使用它。当然得看你的应用场景和数据量。

26232

这种方式本身对小系统来说应该够用了。确实我也发现有些分词查询效果不太好。是scws的算法问题还是词典问题我也不清楚。

另外,我发现日文的mecab引擎的分词性能和效果都很好,页面上输入一些日文测试后完全达到使用实用水平。当然性能上需要进一步的测试。

国内也有人拿mecab引擎做中文分词的,但是不知道中文词典做的怎么样。

2880

其实现在机器处理数据能力很强, 小系统可以不分词, 只拆字, 然后自己调整匹配度就行了

26054

在实现过程中,我新建了3个文本搜索配置,但是只能用1个,而且删除之后,还可以用,楼主有遇到吗? 查看所有的文本搜索配置: \dF 我感觉只要是出现的配置,那就应该是可用的。 但实际好像不是这样的

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册