为了分配标签,我的软件用户会搜索他们现有的标签(填充在自动填充中)。我想在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
答案 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} (对于代码片段)。