如何只使用thinking_sphinx返回第一条记录?

时间:2011-11-08 10:54:36

标签: ruby-on-rails thinking-sphinx

在一个典型的Rails场景中,我只想要返回第一个且只有一个记录,我会说:

SomeModel.find(:first, :conditions => {:some_field => 'some_value'})

我怎么用think_sphinx问这个?我想或者希望它会像:

SomeModel.search :conditions => {:limit => 'first', :some_field => some_value} 

但是,我相当肯定这不会起作用,因为它只是一个如意的猜测。有线索吗?

2 个答案:

答案 0 :(得分:2)

如果您需要搜索任何字段,请尝试以下操作:

SomeModel.search "search term", :star => true, :page => 1, :per_page => 1

但如果您需要某些订单,例如'name'列:

SomeModel.search "some_value", :order => "name DESC", :star => true, :page => 1, :per_page => 1

如果您需要搜索特定字段

SomeModel.search :conditions => {:some_field => 'some_value'}, :order => "name DESC", :star => true, :page => 1, :per_page => 1

答案 1 :(得分:1)

嗯,我担心通过查找短语(第一个例子)的完全匹配与Sphinx(第二个)提供的全文搜索来比较搜索是错误的方法。使用第一个查询时,您可以检索唯一一个与搜索到的值相同的第一个记录。如果您使用Sphinx,您会传递一个排名函数,用于定义最适合您的匹配项(例如,如果您提供更多关键字,那么您可以说明是否要匹配每个文档中的所有关键字,或者每个文档只匹配一个关键字) 。如果您想了解更多相关信息,可以点击链接:http://sphinxsearch.com/blog/2010/08/17/how-sphinx-relevance-ranking-works/

然而,可以使用thinking-sphinx获得第一个匹配值,例如:

Article.search('sphinx relevance', :match_mode => :all).first