ThinkingSphinx索引ActsAsTaggable Model.tag_counts

时间:2010-12-03 15:23:41

标签: ruby-on-rails ruby sphinx thinking-sphinx

为了分配标签,我的软件用户会搜索他们现有的标签(填充在自动填充中)。我想在Sphinx中对此搜索进行索引,以便标记搜索具有超高响应性。我已经看到了关于如何index a Model's tags with sphinx的帖子,这有助于在尝试查找具有该标记名称的所有对象时,但我想为搜索现有标记的人索引标记搜索本身。

我正在尝试使用Sphinx进行此搜索

  

Lead.tag_counts(:conditions =>   [“tags.name like?”,'accounting%'])

生成SQL

  

SELECT tags.id,tags.name,COUNT()AS count FROM tags LEFT   OUTER JOIN标记ON标记.id =   taggings.tag_id AND taggings.context =   'tags'INNER JOIN引导ON leads.id =   taggings.taggable_id在哪里   ((taggings.taggable_type ='Lead'AND   tags.name喜欢'accounting%'))GROUP   BY tags.id,tags.name HAVING COUNT(

     
    

0

  

我假设我必须为Tag模型添加索引以允许下面的工作,但不太确定它们应该是什么。

  

Tag.sphinx_leads_scope.search(PARAMS [:标签])

谢谢John-Paul

1 个答案:

答案 0 :(得分:0)

鉴于acts-as-taggable-on有自己的Tag类,这有点棘手,但是如果你将这段代码放在某个地方(可能是在初始化器中?),我认为它应该可行 - 尽管它没有经过测试:

ActsAsTaggableOn::Tag.define_index do
  indexes name
end

添加一个sphinx范围比较棘手 - 你需要monkeypatch ActsAsTaggableOn :: Tag。但绝对不是不可能的。您还可能希望通过标记添加可标记类型的过滤器...尽管字符串过滤器非常有限 - 请确保read the docs。此外,如果您要沿着字符串过滤器路径向下,您最终可能会为标记添加多个标记类型,因此您需要使用逗号连接CRC32'd值...请查看{{3} (对于代码片段)。