acts_as_ferret - 如何将搜索限制在少量字段?
问题描述:
我有一个模型学校是鼬指数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}")
但无论这些工作。有人知道怎么做吗?谢谢,最大
答
从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 }
}
}
})
注意'字段的定义
+0
嗨凯尔 - 模型定义了索引的所有字段。我的问题是如何仅使用这些字段的一部分进行搜索。因此,在您的示例中,我可能想要在仅使用“foo”和“baz”字段的SomeModel上进行搜索,而不是“名称”字段。这就是我所问的。 – 2012-01-16 10:59:48
答
如果有人网上搜寻到这个同样的问题,我找到了答案(在雪貂文档中,doh)。
School.find_with_ferret("name|postcode|urn:#{term}")
关闭我的头顶,我相信这是在模型级别 – 2012-01-13 18:24:22
我认为实现这一目标的一个哈克的方式,这是使一个新的领域定义它汇集了三个内容我想在这个例子中搜索字段(名称,邮政编码和瓮),然后只对这个新的聚合字段进行搜索,因为我*可以*只针对一个字段进行搜索。就像我说的那样非常黑客,任何对我的搜索要求的更改都需要重新索引所有记录(约80,000个,目前约需4个小时)。 – 2012-01-16 11:03:31