我几天前在我的ruby on rails 2.3.2上安装了Sphinx和Thinking-Sphinx,并且基本搜索效果很好。这意味着,没有任何条件。现在,我想在某些条件下过滤搜索。
我有公告模型,索引如下:
define_index do
indexes title, :as => :title, :sortable => true
indexes description, :as => :description, :sortable => true
end
也许我错了,但我注意到只有当我将:sortable => true
语法添加到这些属性时,我才能在搜索中将它们用作条件。否则它什么都找不到。
现在,我也在使用acts_as_taggable_on插件,它生成了我的两个数据库表:标签和标签。我没有标签模型,我的公告模型只有acts_as_taggable_on :tags, :categories
。
我现在要做的是按标签过滤。所以,我尝试添加到我的索引has tags(:id), :as => :tag_ids
但没有运气,还有indexes tags(:id), :as => :tag_ids
,但它也没有用。
如何构建索引以便我可以执行以下操作:
Announcement.search 'some word', :conditions => {:tag_ids => some_id}
此外,has
和indexes
谢谢, 布赖恩
答案 0 :(得分:10)
让我反过来回答你的问题。 indexes whatever
需要一个字符串,这是sphinx将搜索您提供的文本的内容。
另一方面,has whatever
不会将此内容添加到可搜索字段中。它主要是数字,因为在sphinx已经完成搜索之后你会使用这些东西进行排序和过滤。
最后,我相信你希望模型中有has tags(:id), :as => :tag_ids
,而你的搜索中需要:with => {:tag_ids => some_id}
而不是:conditions
。条件用于已编制索引的文本字段,作为对特定字段而不是所有索引字段执行文本搜索的方法。 With用于使用您使用has whatever
指定的属性过滤结果。