`
robbin
  • 浏览: 4798594 次
  • 性别: Icon_minigender_1
  • 来自: 上海
博客专栏
377a9ecd-1ea1-34ac-9530-9daa53bb2a7b
robbin谈管理
浏览量:135713
社区版块
存档分类
最新评论

JavaEye3.0开发手记之三 - 狮身人面

    博客分类:
  • Ruby
阅读更多
Sphinx的含义是“狮身人面像”,是古埃及的金字塔建筑,传说Sphinx是有翼的狮身女怪,她常叫过路行人猜谜, 猜不出者即遭杀害。

但是我这里说的Sphinx是一个高性能的搜索引擎:

http://www.sphinxsearch.com/

Sphinx是一个俄国人开发的搜索引擎,它的主要特点是:

一、性能非常出色
150万条记录一两分钟就索引完毕,2-4GB以内的文本检索速度不到0.1秒钟。ferret也望尘莫及,更不要说lucene了。

二、和数据库集成性很好
Sphinx通过配置文件可以自行读取数据库信息做索引,不依赖任何外部的应用程序,并且可以作为一个daemon进程启动,支持分布式检索,并发响应性能很好。因此很多过去使用ferret的人因为并发检索的问题都改用Sphinx了。

三、可以做MySQL的全文检索
MySQL的数据库引擎是可插拔的结构,Sphinx开发了一个SphinxSE数据库引擎,可以在编译MySQL的时候直接编译到MySQL里面去,这样的话,可以在数据库级别支持高性能的全文检索,那么你可以以如下SQL方式去全文检索了:

select * from xxxx where query='test;sort=attr_asc:group_id' AND ....;

很棒吧。


四、RoR支持也很棒
有一个acts_as_sphinx插件,类似acts_as_ferret,集成到RoR里面很简单。

Sphinx目前可能存在的问题估计还是中文分词问题:

Sphinx支持UTF-8编码的分词,但是他自己的文档上面说仅仅支持英文和俄文的分词,因此我估计对中文分词可能还不能很好的支持。

总之,Sphinx是我们另外一个很棒的选择。
分享到:
评论
30 楼 Stainlesssteel 2008-07-10  
rainchen 写道

......

地球人都知道,mysql自带的full-text search不支持中文分词,不然full-text search对中国程序员来说早就不是个问题了。
不过国内有程序员做了个MySQL Fulltext 全文检索中文分词补丁
http://www.hightman.cn/index.php?myft
支持MySQL-4.0.x ,MySQL-5.1.x
有心人可以尝试与acts_as_fulltextable结合使用。



现在又多了一个
http://blog.s135.com/read.php?356

引用
国内已有的MySQL中文全文索引解决方案有两个:一是海量科技的MySQL5.0.37--LinuxX86-Chinese+,二是hightman开发的mysql-5.1.11-ft-hightman,两者都是基于中文分词技术,对中文语句进行拆分。但是,两者都有弊端,一是不支持64位操作系统;二是对修改了MySQL源码,只支持某一MySQL版本,不便于跟进新版本;三是词库不能做到很大很全,对于专业性质较强的数据库内容(例如搜索“颐和园路东口”、“清华东路西口”等公交站点,“莱镇香格里 ”、“碧海云天”等楼盘名称),基于中文分词的全文索引经常搜索不出来任何内容,即使添加分词词库,也不会很全面。
29 楼 willsonchan 2008-05-02  
我来做一下小白鼠,服务器是Debian + Mysql 5 + Apache + PHP,2005年买的联想万全服务器,1G的内存;做了一个采集网站,数据库UTF-8编码,56万的数据,有中英文,对标题,来源,时间等做了全文检索,全文查询速度在0.0n秒内。

由于是采集网站,数据会一直更新,因此用了实时更新索引的方法,每5分钟更新一次delta索引,每天晚上merge一次。delta索引更新所需时间近似忽略。

只是花了两天时间整的,没有任何优化。

测试地址:http://www.haokanshu.cn/

欢迎sphinx用户一起探讨:willsonchan@gmail.com
28 楼 rainchen 2007-10-15  
最近出了个新的全文索引插件:acts_as_fulltextable
http://blog.wonsys.net/posts/26-our-first-plugin-acts_as_fulltextable/

其核心是直接使用mysql自带的full-text search。
据介绍,其作者并不是吃饱没事干,也不是为了挑战自我,而是在使用过了acts-as-ferret和acts_as_sphinx后不满意才“被逼”要出手DIY的。因为他们在使用acts-as-ferret时,大量写入会使其索引莫名出错;转用robbin在本篇里介绍的acts_as_sphinx,又时常发生sphinx的守护进程没有响应的问题。

另一个细节:
acts_as_fulltextable实现full-text index不是直接把模型需要字段的索引改为FULLTEXT INDEX,而是给需要搜索的model添加一个has_many :through 多态关联,统一把所有需要索引的模型都丢到一个fulltext_rows表里,以便实现跨表全文索引。
这样做的优点:
1.易部署:mysql的full-text search只支持MyISAM,如果原本项目是用InnoDB的也不影响,只要保证fulltext_rows表类型是MyISAM(默认用script/generate fulltext_rows model1 model2 model3 ...生成的就是,不需操心)
2.易扩展:即使增加新的模型时也能方便对接上。
3.跨模型:如常见的站内搜索“所有的”功能。
缺点:
需要占用多2倍以上的空间:fulltext_rows的数据 + mysql自身索引。

做搜索难,做全文搜索更难,做支持中文的全文搜索更是难上加难,要老外来做中文全文搜索则完全是final fantasy!

地球人都知道,mysql自带的full-text search不支持中文分词,不然full-text search对中国程序员来说早就不是个问题了。
不过国内有程序员做了个MySQL Fulltext 全文检索中文分词补丁
http://www.hightman.cn/index.php?myft
支持MySQL-4.0.x ,MySQL-5.1.x
有心人可以尝试与acts_as_fulltextable结合使用。

27 楼 wzh1008 2007-10-13  
一、性能非常出色
150万条记录一两分钟就索引完毕,2-4GB以内的文本检索速度不到0.1秒钟。


真的好恐怖啊
26 楼 jiaxiang12-04 2007-10-10  
怎么没有人解释这句话呢?
select * from xxxx where query='test;sort=attr_asc:group_id' AND ....;
25 楼 linginfanta 2007-09-28  
粗看了一下,目前支持的数据库好像只有Mysql。
Features里描述的index及search的速度很有诱惑。
小白鼠就不当了,等它再长大些吧。
关注ing。
24 楼 fxsjy 2007-09-28  
robbin,您好,我的MySQL中有一个表是utf-8编码,数据中有中文也有英文。
我在sphinx.conf中的设置为charset_type = sbcs,发现可以搜索到我要得结果,但是也有些结果并不含我输入的关键词。

后来,我又设置为charset_type = utf-8,结果发现只能检索到英文关键词了。

所以,想向你请教一下如何配置sphinx.conf文件才能处理中英混合的语料呢?

谢谢!
23 楼 jecray 2007-09-27  
这么强啊
22 楼 liuzongan 2007-09-21  
请问一下,robbin
sphinx在windows 下安装是不是需要Microsoft Visual C/C++ Studio .NET 2003 or 2005这个平台?谢谢
21 楼 joyjiang 2007-09-19  
引用
"150万条记录一两分钟就索引完毕" ---太恐怖了 每秒能处理12500条? 回想Lucene才多少..

你用的是什么机器和什么数据做的测试呢?可以告知一下吗?
20 楼 geszJava 2007-09-18  
索引速度如果有150w rec/min,那么是相当的快,lucene的中文文档索引通常是1.8w rec/min,不过貌似robbin使用的应该是英文文档把.英文文档索引速度当然是很快的.
19 楼 geszJava 2007-09-18  
检索速度貌似不是特别强啊,lucene 50G的全文检索,通常也只需要0.0x秒.
18 楼 linhong_1001 2007-09-16  
C++的玩意,为什么要和lucene比呢?
17 楼 RyanPoy 2007-09-14  
引用
150万条记录一两分钟就索引完毕

我觉得要看150w纪录的数据大小是多少?

引用
2-4GB以内的文本检索速度不到0.1秒钟。

2-4GB以内的文本检索,只得是2-4GB的加载源文件。还是加载后的索引文件?

16 楼 cjyzpcl 2007-09-14  
liyao20050101 写道
150万条记录一两分钟就索引完毕,2-4GB以内的文本检索速度不到0.1秒钟
好强啊,这么的搜索引擎,大家多研究研究。!!!
真的 很强! 试用。。。

成熟应用太少了,我反正是暂时不会使用的。
15 楼 liyao20050101 2007-09-14  
150万条记录一两分钟就索引完毕,2-4GB以内的文本检索速度不到0.1秒钟
好强啊,这么的搜索引擎,大家多研究研究。!!!
真的 很强! 试用。。。
14 楼 cinderella 2007-09-14  
[color=darkred][/color]楼主你好,请教一个问题可以吗,我初学hibernate,在作练习时遇到一个问题,我用的是MyEclipse,在建连接数据库文件时总是有问题,我作的是jTDS连接,开始没有问题就是作到:Schema Details窗口时,选第三项:Ddisplay the selected schemas  然后点Add 不知道为什么总是报错:Error while trying to login to database: Network error IOException:Connection refused:connect   我的数据库用的是SQLserver2000 个人版本,我试了很多次可就是不行,可别人的电脑上就可以,不知道是不是有什么地方设置的不对呀,请楼主指点一下!!谢谢哟
13 楼 zengcuoan 2007-09-13  
测试对html的防范

<font color="red">我是红色吗?</font>
12 楼 zengcuoan 2007-09-13  
如果博客评论较多,最新发表的评论显示在第一页吗?
11 楼 jonson 2007-09-12  
有没有比较数据啊。
测试 环境都一样吗?
对于中文搜索会性能有影响吗?
有没有权威点的测试 数据呢。
可以的话系统的做个比较啊
和lusence什么的

相关推荐

Global site tag (gtag.js) - Google Analytics