论坛首页 编程语言技术论坛

关于Sphinx/Ultrasphinx的说明

浏览 5204 次
精华帖 (0) :: 良好帖 (3) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-06-13  
关于Sphinx/Ultrasphinx的安装,请看我写的安装指南:http://www.iteye.com/topic/200065

1. Sphinx是一个全文检索引擎,它是使用C++开发的,分成三部分:索引创建工具(indexer)、全文检索服务(searchd)、全文检索客户端。它的客户端有三种类型:通过独立的应用程序search来访问、通过使用各种语言的Sphinx API库编写程序来访问、通过MySQL的SphinxSE存储引擎来访问。Sphinx提供了indexer、searchd、search 3个应用程序。这三个程序的作用分别是:indexer用来创建索引、searchd用来启动全文检索服务、search作为客户端访问全文检索服务,获取检索结果。这几个应用程序共用同一个配置文件。

2. Ultrasphinx是一个Rails插件,它使得Rails应用可以非常方便地访问Sphinx的searchd服务实现全文检索功能。在Ultrasphinx的内部使用Riddle来访问Sphinx,Riddle是第三方开发的Sphinx的Ruby API。Riddle直接通过socket来访问searchd的服务,它和search程序一样是searchd的一个客户端,只不过它是以API方式提供的。

3. Ultrasphinx为ActiveRecord::Base类添加了一个方法is_indexed,用来设置一个Model的全文检索需求。Ultrasphinx自动查找所有Model中的is_indexed设置,以一个default.base文件作为模板来自动生成Sphinx的配置文件。因为Ultrasphinx所使用的Sphinx配置文件是自动生成的,所以不要直接修改Sphinx配置文件,而应该修改default.base,然后重新生成配置文件。每次重新生成了配置文件之后,都需要使用indexer程序来重新创建索引。

4. Ultrasphinx和Riddle都是使用纯Ruby语言开发的,它们只是Sphinx的一个访问接口,不必太担心它们的性能问题。使用Sphinx不需要重新编译MySQL,除非你想通过SphinxSE这个MySQL的存储引擎来访问Sphinx。SphinxSE并不是一个像InnoDB/MyISAM那样完整的MySQL存储引擎,它实际上只是一个访问Sphinx searchd服务的接口(与search、Riddle一样是searchd的一个客户端)。SphinxSE允许没有API库的语言来访问Sphinx,例如Erlang、LUA或者其他什么很少有人使用的语言。除此之外,我认为没有什么必要使用SphinxSE。

5. Sphinx支持以增量的方式来建立索引。增量的意思就是说在第一次为需要检索的内容全部建立索引之后,以后每次重建索引时只为一段时间内新增或修改过的内容建立索引。创建的这些增量索引可以合并到主索引中。因为全部建立索引是很耗时的操作,所以全部建立索引的频率不应该很频繁。例如:每30分钟创建一次增量索引,每天做一次全部增量索引的合并。建立增量索引或者全部索引都可以使用indexer来完成,在Linux上可以配置在cron table中定时执行。

6. Ultrasphinx并不会在每次修改了Model内容之后立即更新索引,它的做法与act_as_ferret不同。因此做全文检索时会有延迟,延迟的数量与增量创建索引的频率有关,例如:每30分钟创建一次增量索引,则搜索到这次修改过的内容需要等到30分钟之后。这个延迟是不是一个问题,需要具体情况具体分析。如果确实是个问题,可以在应用程序中调用indexer执行增量索引。

7. 为了支持增量索引,Ultrasphinx需要使用一个时间字段来判断是否需要做增量索引,也就是说Model中必须要有一个时间字段。Ultrasphinx默认使用updated_at字段来判断是否需要做增量索引,也可以在is_indexed中设置另外的字段。

8. Sphinx在做全文检索时默认会访问全部建立的索引,包括主索引和所有的增量索引。索引以何种方式创建对于应用来说是透明的,应用可以完全不必关心。

9. 程序员在Windows上做全文检索功能开发的步骤是:a. 停止searchd服务,因为在Windows上searchd服务会把索引文件锁住。b. 为Model添加is_indexed设置。c. 执行rake us:conf重新生成配置文件。d. 执行rake us:index重新创建索引。e. 重新启动searchd服务。f. 使用Ultrasphinx::Search类来执行全文检索。
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics