2012-01-13 18 views
0

私は、10または12の異なるインデックスでフェレット指数付けされたモデルスクールを持っています。acts_as_ferret - 少数のフィールドに検索を制限する方法は?

は、ある特定の検索では、私は、次のいずれかのフィールドに検索語に一致するだけで学校を返すようにしたい:["name", "postcode", "urn"]例えば

、「グランジ」の検索(URNは、フィールドのUID一種です)その名前に "grange"という名前の学校を返すべきですが、その住所に "grange"を持っている学校を返すことはできません。ただ一つのフィールド(例えば、名前)があります場合は

、私は

School.find_with_ferret("name:#{term}") 

することによって、これを達成することができます。しかし、私は、フィールドのリストでこれを行う方法を動作することはできません。私は私が

School.find_with_ferret("name:#{term} || postcode:#{term} || urn:#{term}") 

または

School.find_with_ferret("name:#{term} or postcode:#{term} or urn:#{term}") 

が、これらの作業のどちらも同じように、「または」構文を使用することができるかもしれないと思いました。誰でもこれを行う方法を知っていますか?おかげで、acts_as_ferretのドキュメントから最大

+0

、私はこれは私が3の内容を集約し、新たなフィールドを作ることである、これを達成するための一つハック方法を考えてきたモデル・レベル –

+0

上で定義されると信じてフィールド(例:名前、郵便番号、壷)を検索してから、この新しい集約フィールドに対してのみ検索したい場合は、1つのフィールドのみで検索できます。私は非常にハッキーだと思うのですが、私の検索条件を変更するには、すべてのレコードを再索引付けする必要があります(現在約4時間かかります)。 –

答えて

0

ActsAsFerret::define_index('my_index', 
          :models => { 
           SomeModel => { 
           :fields => { 
            :name => { :boost => 4, :store => :yes, :via => :ferret_title }, 
            :foo => { :store => :no, :index => :untokenized }, 
            :baz => { :store => :yes, :via => :ferret_content } 
           } 
           } 
          }) 

注意 'フィールド' の定義

https://github.com/jkraemer/acts_as_ferret

+0

こんにちはkyle - モデルはインデックスされたすべてのフィールドを定義します。私の質問は、これらのフィールドのサブセットだけを使って検索を行う方法を尋ねます。あなたの例では、私はSomeModelで "foo"と "baz"フィールドだけを使用し、 "name"フィールドは使用しない検索をしたいかもしれません。それが私が求めていることです。 –

0

誰もが同じ問題でこれまでグーグルの場合、私は(答えを見つけましたフェレットの文書では、doh)。私の頭の上オフ

School.find_with_ferret("name|postcode|urn:#{term}") 
関連する問題