该帖已经被评为精华帖
|
|
---|---|
作者 | 正文 |
发表时间:2008-06-04
http://www.iteye.com/topic/122696 当时Sphinx还不支持中文分词,现在情况已经完全改变了。李沫南为Sphinx开发了中文分词的插件——libmmseg。对于libmmseg,robbin以前也有介绍,不过是用在Ferret里面。 http://www.iteye.com/topic/196451 李沫南还开发了一个支持中文全文检索的Sphinx定制版本——Coreseek,除了支持中文的全文检索外,Coreseek最大的特点是支持使用Python提供自定义的数据源。我们可以简单地理解为:Coreseek = Sphinx + libmmseg + py_datasource。 Sphinx的主要优势是: 1. 性能优异:robbin以前已经介绍过。 2. 容易学习:架构很清晰,学习成本很低。 3. 与数据库结合更加紧密:对于以数据库为中心的Web应用来说,实现全文检索的功能,使用Sphinx开发工作量更低。 Sphinx的开发人员好像只熟悉PHP开发,因此在其手册里面举的例子都是用PHP写的,不过Rails/Ruby开发人员也可以很方便地使用Sphinx。 对于中文Rails开发人员而言,做全文检索的最佳组合是Sphinx + libmmseg + Ultrasphinx。Ultrasphinx是一个Rails插件,Rails开发人员可以使用它来很方便地调用Sphinx的功能。 这篇文档先介绍一下这些工具的安装方法,与开发相关的内容将在后续的文章中介绍。 1. 在Linux上安装 从这里http://www.sphinxsearch.com/downloads.html下载Sphinx 0.9.8 rc2版: http://www.sphinxsearch.com/downloads/sphinx-0.9.8-rc2.tar.gz tar zxvf sphinx-0.9.8-rc2.tar.gz 要在Sphinx中使用libmmseg,需要为Sphinx打补丁。从这里http://www.coreseek.cn/opensource/Sphinx/下载两个补丁文件: http://www.coreseek.com/uploads/sources/sphinx-0.98rc2.zhcn-support.patch http://www.coreseek.com/uploads/sources/fix-crash-in-excerpts.patch cd sphinx-0.9.8-rc2 patch -p1 < ../sphinx-0.98rc2.zhcn-support.patch patch -p1 < ../fix-crash-in-excerpts.patch 自己打补丁比较麻烦,而且补丁是针对特定的Sphinx版本的,若版本不匹配会更麻烦。最简单的方法是直接使用李沫南已经打好补丁的Coreseek包,和自己打补丁的效果是一样的: http://www.coreseek.com/uploads/sources/coreseek_fulltext_2.5.tar.gz tar zxvf coreseek_fulltext_2.5.tar.gz 还需要从这里http://www.coreseek.cn/opensource/mmseg/下载libmmseg: http://www.coreseek.com/uploads/sources/mmseg-0.7.3.tar.gz tar zxvf mmseg-0.7.3.tar.gz 首先编译libmmseg: cd mmseg-0.7.3 ./configure make make install 然后编译Sphinx,使用李沫南打好补丁的Coreseek包。注意编译这个版本之前需要先安装一个python-dev的包,在RedHat/CentOS中这样安装: rpm -ivh python-devel-2.4.3-19.el5.i386.rpm 可能还需要安装mysql-devel这个包,在RedHat/CentOS发行版中有,我这里已经安装好了。 另外在编译前做configure时还需要设置两个环境变量。 cd coreseek_fulltext_2.5.source CPPFLAGS=-I/usr/include/python2.4 LDFLAGS=-lpython2.4 ./configure make make install 2. 在Windows上安装 在Windows上为Sphinx打补丁、编译、连接libmmseg要比在Linux上做这些事情麻烦得多,而且大多数Windows上的开发人员都没有自己编译开源软件的习惯,幸好李沫南已经做了一个安装包: http://www.coreseek.com/ft/csft_setup_2.5.1.exe 执行这个安装包即可安装Coreseek的Windows版,假设将Coreseek安装在D:\CsFullText25 将D:\CsFullText25\bin加入到环境变量PATH中,以便以后在命令行能够找到Sphinx提供的各种工具。 3. 安装Ultrasphinx Sphinx在Linux和Windows上都已经安装好了,我们可以通过一个Rails程序来做一下测试。 假设我们原先有一个Rails应用thought_log cd thought_log 在安装Ultrasphinx之前需要先安装一个Ruby Gem: gem install chronic 然后安装Ultrasphinx插件: ruby script/plugin install -x svn://rubyforge.org/var/svn/fauna/ultrasphinx/trunk 若这个Rails应用尚未提交到SVN中,或者使用其他版本管理工具,则执行: ruby script/plugin install svn://rubyforge.org/var/svn/fauna/ultrasphinx/trunk 注意,执行这条命令前需要先安装好SVN for Windows(不是TortoiseSVN)。 为了在Windows上正常使用Ultrasphinx,需要为Ultrasphinx打一点补丁。修改vendor/plugins/ultrasphinx/tasks/ultrasphinx.rake,将其中的: "searchd --config '#{Ultrasphinx::CONF_PATH}'" 改为: "searchd --config \"#{Ultrasphinx::CONF_PATH}\"" 这样修改的原因是类似以下使用单引号的写法: searchd --config 'D:/WORK/thought_log/config/ultrasphinx/development.conf' 在Windows上无法正常运行,必须改为使用双引号的写法: searchd --config "D:/WORK/thought_log/config/ultrasphinx/development.conf" 除了例子中对searchd的调用,在ultrasphinx.rake文件中所有执行命令行调用的地方都需要做这样的修改。 4. 修改Sphinx配置文件并创建索引 安装完Ultrasphinx之后,将: vendor/plugins/ultrasphinx/examples/default.base 复制到: config/ultrasphinx/default.base 为了正常支持中文字符的全文检索,需要对default.base做一些修改 将其中的: charset_type = utf-8 改为: charset_type = zh_cn.utf-8 并且在charset_type设置的下面加入一行: charset_dictpath = D:/CsFullText25/share/csft_config/dict 然后删除所有charset_table的设置。 要注意在Windows上和Linux上路径的不同写法,为了在Windows上正常使用,需要将default.base中的所有路径改为绝对路径,例如,要将: <% tmp = "/tmp/sphinx/" %> 改为: <% tmp = "D:/tmp/sphinx/" %> 另外,由于Sphinx的Windows版不支持seamless_rotate,需要在development.conf中将这个功能关掉: seamless_rotate = 0 修改Model代码,加入全文检索支持: 假设我有一个Model叫做Project,其中有一个属性叫做name,我希望对这个属性做全文检索,我在project.rb中加入一行: is_indexed :fields => ['created_at', 'name'] 生成配置文件: rake ultrasphinx:configure 这条命令执行后,在config/ultrasphinx下创建了一个development.conf,这个文件就是Sphinx的配置文件。 创建索引: rake ultrasphinx:index 索引相关的文件创建在: D:\tmp\sphinx 其中,“D:\tmp”是环境变量TMP的值。 5. 启动Sphinx的searchd服务: rake ultrasphinx:daemon:start 这个时候会在3313端口启动一个searchd,搜索请求将会全部发送到这个端口来执行。 也可以自己手工来启动searchd searchd --config "D:\WORK\thought_log\config\ultrasphinx\development.conf" 在Windows上还可以将searchd安装为一个系统服务: searchd --install --config "D:\WORK\thought_log\config\ultrasphinx\development.conf" 启动这个服务即可。 6. 测试 ruby script/console search = Ultrasphinx::Search.new(:class_names => 'Project') search.run search.results 如果执行这几条语句都没有报错,那么安装就成功了。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-06-05
没有在windows上用过Sphinx,看了dlee的文章更加坚定认为不适合在windows上用
在linux,建议将sphinx的index,log,pid都配置到当前项目目录下,在base config文件中配置,这样可启动sphinx deamon不需要sudo权限 用一条rake命令可以完成自动从base config生成运行config,重建/roating索引,启动/重启sphinx daemon等几个rake任务 rake ultrasphinx:bootstrap |
|
返回顶楼 | |
发表时间:2008-06-05
我插一句阿,我特别不理解为什么你们那么喜欢用rake来写服务程序的控制脚本。本来三两行的shell脚本就可以搞定的事情,非要搞什么rake,还要搞一堆配置文件,最后又用缓慢无比的ruby去启动用C写的sphinx服务器,不觉得太画蛇添足了吗?
|
|
返回顶楼 | |
发表时间:2008-06-05
哪个rake的服务程序控制脚本和配置文件都是ultrasphinx自带的,因为懒呀,所以连三两行shell脚本都懒得写了...
|
|
返回顶楼 | |
发表时间:2008-06-05
robbin 写道 我插一句阿,我特别不理解为什么你们那么喜欢用rake来写服务程序的控制脚本。本来三两行的shell脚本就可以搞定的事情,非要搞什么rake,还要搞一堆配置文件,最后又用缓慢无比的ruby去启动用C写的sphinx服务器,不觉得太画蛇添足了吗?
确实,rake ultrasphinx:daemon:start这一步我也感觉完全没有必要。这只是Ultrasphinx插件作者的做法,感觉有点画蛇添足了。 Sphinx不适合在Windows上部署,不要作为生产环境,在Windows上跑Sphinx仅仅作为开发环境,适合于一些初学者快速熟悉Sphinx之用。 |
|
返回顶楼 | |
发表时间:2008-06-11
跟踪sphinx很久了。Coreseek也跟了一个月了。不错。回头看看是否好支持java了?
|
|
返回顶楼 | |
发表时间:2008-06-13
注意:Ultrasphinx使用以default.base为模板自动生成的Sphinx配置文件,因此以前的安装指南中说修改自动生成的development.conf是不对的,应该修改default.base才对。我已经修改了安装指南的文字,以免误导读者。
|
|
返回顶楼 | |
发表时间:2008-06-18
dlee 写道 并且在charset_type设置的下面加入一行:
charset_dictpath = D:/CsFullText25/share/csft_config/dict dlee,在linux下这行应该是什么? |
|
返回顶楼 | |
发表时间:2008-06-18
universac 写道 dlee 写道 并且在charset_type设置的下面加入一行:
charset_dictpath = D:/CsFullText25/share/csft_config/dict dlee,在linux下这行应该是什么? coreseek源码包解压后的dict目录的路径 |
|
返回顶楼 | |
发表时间:2008-06-20
分词的技术用的是什么阿!
|
|
返回顶楼 | |