Xapian,Sphinx在Rails中的性能比较

XapianSphinx都是非常棒的开源全文搜索解决方案,但是我想知道哪个性能更好一些,Xapian官方提供了与Solr的对比,但是没有和Sphinx的,所以我决定自己来测试。

这两个都是开源的解决方案,你可以使用他们来搜索任何关键字比如马,桃子或者是Getminted等等,也可以使用通配符进行更广范围的查询。

数据集

要测试首先需要准备好数据集,我的数据是大约12000条blog记录,每个记录有两个字段需要搜索:title, description,代码如下:


class Blog < ActiveRecord::Base
  # Thinking sphinx indexes
  define_index do
    indexes :title
    indexes :description
  end
  # Acts_as_xapian indexes
  acts_as_xapian :texts => [ :title, :description ]
   ...
end

测试环境

下面是我的测试环境:

  • Sphinx: 0.9.8
  • Xapian: 1.0.1
  • Sphinx plugin: thinking_sphinx
  • Xapian plugin: acts_as_xapian
  • Ruby: 1.8.6 p114
  • Rails: 2.1.0
  • Mysql: 5.0.51
  • OS: OS X 10.5.6
  • CPU: Intel Core 2 Duo 2.0G
  • Ram: 4G

索引

我们首先来看看索引的性能:


$ time rake xapian:rebuild_index models="Blog"
real 2m12.942s
user 0m24.569s
sys 0m12.798s
$ time rake thinking_sphinx:index
real 1m53.543s
user 0m4.725s
sys 0m0.887s

结果显示Sphinx稍微快一点,但是因为Sphinx有索引进度提示,所以感觉上Sphinx快了好多。

查询

下面来看查询性能


keywords = ['key1', 'key2', ..., 'key30']
Benchmark.bm do |x|
  x.report("Xapian") { 30.times {|i| ActsAsXapian::Search.new "Blog", keywords[i], :limit => 10 } }
  x.report("Sphinx") { 30.times {|i| Blog.search keywords[i], :per_page => 10, :page => 1 }}
end

这里我首先定义了30个关键字,每个关键字的匹配结果都在10个以上,然后用它们分别进行查询,因为可能有缓存的关系,所以每个查询只执行了一次,下面是结果:


      user     system      total         real
Xapian  0.020000   0.020000   0.040000 (  0.042381)
Sphinx  0.150000   0.030000   0.180000 (  0.285173)

结果显示,Xapian要快很多,但因为我的数据集实在是太小,所以可能并不能说明问题,这个结果仅供参考,当然,我想大部分人恐怕还是会选择Sphinx,因为Xapian的Rails插件acts_as_xapian实在是太难用了。

This entry was posted in 性能. Bookmark the permalink. Post a comment or leave a trackback: Trackback URL.
  • YF

    xapian的索引完全是基于B-tree实现的,由于索引本身的特殊性(跟数据库插入数据不同),因此建立索引应该比较慢。
    sphinx的代码没有仔细阅读,粗看下索引基本是普通的文件格式

  • Mark

    使用thing_sphinx ,中文分词是怎么搞定的?

    能介绍一下吗?

  • http://blogjava.net/fl1429 wxianfeng

    同求 ts 的中文搜索 问题。。。

  • Avin

    转载你还不注明出处,真服了,剽窃!!

    http://blog.elctech.com/2009/01/05/xapian-vs-sphinx-in-rails/

  • admin

    呵呵,楼上的同学,你说的那个Blog,是我以前公司的,两篇文章都是我发的,只是忘了在英文贴里加上中文链接了

无觅相关文章插件,快速提升流量