2011-11-08 74 views
0

在一個典型的Rails場景,我只想要第一個也是唯一一個返回的記錄,我會說:如何僅返回think_sphinx的第一條記錄?

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

我怎麼會問這個使用thinking_sphinx?我假設或者希望它會是這樣的:

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

不過,我敢肯定這是行不通的,因爲它只是一個一廂情願的猜測。任何線索?

回答

1

嗯,恐怕這是錯誤的方法來比較搜索與查找短語(第一個例子)的精確匹配與斯芬克斯(第二個)提供的全文搜索。在使用第一個查詢時,您可以檢索與搜索結果等價的唯一第一條記錄。如果你使用獅身人面像,你會傳遞一個排名函數來定義你最適合的匹配方式(例如,如果你提供了更多關鍵字,那麼你可以說明你想匹配每個文檔中的所有關鍵字,還是每個文檔只有一個關鍵字) 。如果您想了解更多信息,可以點擊鏈接:http://sphinxsearch.com/blog/2010/08/17/how-sphinx-relevance-ranking-works/

但是它可能採用的思維 - 獅身人面像得到第一個匹配值,例如:

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

請嘗試以下,如果你需要搜索任何字段:

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

但是如果你需要「名稱」列的某些命令:

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 
相關問題