acts_as_ferret - как ограничить поиск небольшим количеством полей? - PullRequest
0 голосов
/ 13 января 2012

У меня есть модельная школа, которая индексируется по 10 или 12 различным индексам.

В одном конкретном поиске я хочу вернуть только те школы, которые соответствуют поисковому запросу в одном из следующих полей: ["name", "postcode", "urn"] (urn - это поле типа uid)

Например, поиск «grange» должен возвращать школы с «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}")

но ни одна из этих работ. Кто-нибудь знает, как это сделать? Спасибо, макс

Ответы [ 2 ]

0 голосов
/ 26 ноября 2012

В случае, если кто-нибудь погуглит с этой же проблемой, я найду ответ (в документации к хорьку, дох).

School.find_with_ferret("name|postcode|urn:#{term}")
0 голосов
/ 13 января 2012

Из документации act_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 }
                                }
                              }
                            } )

Обратите внимание на определение 'fields'

https://github.com/jkraemer/acts_as_ferret

...