2010-12-03 2 views
0

Чтобы назначить метки, пользователи моего программного обеспечения ищут существующие теги (заполненные автозаполнением). Я хочу индексировать этот поиск в Sphinx, чтобы поиск тегов был очень отзывчивым. Я видел сообщения о том, как index a Model's tags with sphinx, что помогает при поиске всех объектов с этим именем тега, но я хочу индексировать сам поиск тегов для людей, которые ищут существующие теги.ThinkingSphinx indexing ActsAsTaggable Model.tag_counts

Я пытаюсь использовать Sphinx для этого поиска

Lead.tag_counts (: условия => [ "tags.name как?", "Бухгалтерии%])

Какие производит SQL-

ВЫБОР tags.id, tags.name, COUNT () как граф ОТ tags ЛЕВЫЙ OUTER JOIN оснащений НА tags.id = taggings.tag_id И taggings.context = 'TAGS' INNER JOIN лидировать на leads.id = taggings.taggable_id ГДЕ ((taggings.taggable_type = 'Lead' И tags.name как 'учета%')) GROUP BY tags.id, tags.name HAVING COUNT ()

Я предполагаю, что я должен добавить индексы модели Tag, чтобы позволить ниже работать, но не совсем что они должны быть.

Tag.sphinx_leads_scope.search (PARAMS [Тег])

Спасибо, Джон-Пол

ответ

0

Учитывая acts-as-taggable-on имеет свой собственный класс Tag, это становится немного сложнее, но если вы поместить этот код где-то (? возможно, в инициализаторе), я думаю, он должен работать - хотя это непроверенное:

ActsAsTaggableOn::Tag.define_index do 
    indexes name 
end 

Добавление сфера сфинкса сложнее - ты н eed to monkeypatch ActsAsTaggableOn :: Тег для этого. Однако определенно не исключено. Вы также можете добавить фильтр для типа taggable с помощью тегов ... хотя строковые фильтры очень ограничены - убедитесь, что вы read the docs. Кроме того, если вы перейдете по пути фильтра строк, у вас будет возможно несколько типов тегов для тега, поэтому вы захотите объединить значения CRC32'd запятыми ... проверьте this somewhat related answer (для фрагменты кода).