Acts_as_taggable_on标签名称为Thinking Sphinx属性

时间:2012-01-14 01:43:08

标签: ruby-on-rails sphinx thinking-sphinx acts-as-taggable-on

我的模型使用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方法的原因。

1 个答案:

答案 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