2011-11-08 6 views
0

は、私が言う:thinking_sphinxで最初のレコードのみを返す方法は?私は最初で唯一の1レコードが返さたい典型的なRailsのシナリオで

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

私はthinking_sphinxを使用して、これを頼むだろうか?しかし、私はそれだけで希望的観測の推測であるとして、これは動作しませんかなり確信

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

:私は想定したり、それはようなものになるだろう願っています。すべての手がかりは?

答えて

1

私は、検索されたフレーズ(最初の例)とスフィンクス(2番目のもの)が提供するフルテキスト検索の完全一致による検索を比較するのは間違いです。最初のクエリを使用している間は、検索されたものと同じ値の最初のレコードを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 
関連する問題