我的模型使用Thinking Sphinx索引,我想通过acts_as_taggable_on提供的模型标签过滤搜索结果。我阅读this previous question,这使我的搜索能够使用:conditions => { :tags => 'Comedy' }
作为过滤查询。
这不是一个包罗万象的解决方案,因为默认情况下,所有文本都在Sphinx的索引字段中搜索。例如,当我搜索Model.search :conditions => { :tags => "Comedy" }
时,也会显示带有标记Black Comedy
的结果。我发现使用属性而不是字段是一种解决方案,但在搜索Model.search :with => { :tags => "Comedy" }
时我似乎无法获得有效的结果,而我的define_index
块看起来像这样:
define_index
indexes title, :sortable => true
has category_tags(:name), :as => :tags
end
请注意,我的构建基于上面链接的问题中提供的上一个答案。回答者详细说明了上下文中的索引标记 - 因此是category_tags方法的原因。
答案 0 :(得分:3)
将索引更改为:
define_index
indexes title, :sortable => true
has "CRC32(category_tags.name)", :as => :tags, :type => integer
end
注意:category_tags.name是指your_table_name.column_name
转换为int后搜索标签:
Model.search :with => {:tags =>'Comedy'.to_crc32}
有关详情,请参阅常见问题:http://freelancing-god.github.com/ts/en/common_issues.html