2012-01-13 61 views
0

我有一個模型學校是鼬指數10或12個不同的指標。acts_as_ferret - 如何將搜索限制在少量字段?

在一個特定的搜索,我只想返回在以下領域的一個匹配搜索術語,學校:["name", "postcode", "urn"](甕是一個UID領域的一種)

例如,對於「農莊」的搜索應以學校名義返回「格蘭奇」學校,但不要返回在學校地址中有「格蘭傑」的學校(除非其名稱當然也是這樣)。

如果只是一個字段(如姓名),我可以通過

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}") 

但無論這些工作。有人知道怎麼做嗎?謝謝,最大

+0

關閉我的頭頂,我相信這是在模型級別 – 2012-01-13 18:24:22

+0

我認爲實現這一目標的一個哈克的方式,這是使一個新的領域定義它彙集了三個內容我想在這個例子中搜索字段(名稱,郵政編碼和甕),然後只對這個新的聚合字段進行搜索,因爲我*可以*只針對一個字段進行搜索。就像我說的那樣非常黑客,任何對我的搜索要求的更改都需要重新索引所有記錄(約80,000個,目前約需4個小時)。 – 2012-01-16 11:03:31

回答

0

從acts_as_ferret文檔:

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

嗨凱爾 - 模型定義了索引的所有字段。我的問題是如何僅使用這些字段的一部分進行搜索。因此,在您的示例中,我可能想要在僅使用「foo」和「baz」字段的SomeModel上進行搜索,而不是「名稱」字段。這就是我所問的。 – 2012-01-16 10:59:48

0

如果有人網上搜尋到這個同樣的問題,我找到了答案(在雪貂文檔中,doh)。

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