2010-12-03 13 views
0

Um Tags zuzuweisen, durchsuchen Benutzer meiner Software ihre vorhandenen Tags (die in einer Autocomplete aufgefüllt sind). Ich möchte diese Suche in Sphinx indexieren, damit die Tag-Suche ultra reaktionsfähig ist. Ich habe Beiträge zu index a Model's tags with sphinx gesehen, die helfen, wenn Sie versuchen, alle Objekte mit diesem Tag-Namen zu finden, aber ich möchte die Tag-Suche selbst für Personen indizieren, die nach vorhandenen Tags suchen.ThinkingSphinx Indexierung ActsAsTaggable Model.tag_counts

Ich versuche Sphinx für diese Suche zu verwenden

Lead.tag_counts (: conditions => [ "tags.name wie?", 'Buchhaltung%'])

Welche erzeugt der AS Zählung SQL

SELECT tags.id, tags.name, COUNT () FROM tags LEFT OUTER Markierungen ON tags.id JOIN = taggings.tag_id UND taggings.context = 'Tags' INNER JOIN führt ON leads.id = taggings.taggable_id WHERE ((taggings.taggable_type = 'Blei' AND tags.name wie 'Buchhaltung%')) GROUP BY tags.id, tags.name HAVING COUNT ()

ich nehme an, ich habe Indizes zum Tag Modell hinzufügen die unten zu ermöglichen, zu arbeiten, aber nicht ganz sicher, was sie sein sollten.

Tag.sphinx_leads_scope.search (params [: tag])

Danke, John-Paul

Antwort

0

Da acts-as-taggable-on hat seinen eigenen Tag-Klasse, das ist ein wenig knifflig, aber wenn Sie setzen Sie diesen Code irgendwo (? vielleicht in einem Initialisierer), ich denke, es sollte funktionieren - obwohl es nicht getestet ist:

ActsAsTaggableOn::Tag.define_index do 
    indexes name 
end 

eine Sphinx Umfang Hinzufügen ist kniffliger - Sie würden n eed zu monkeypatch ActsAsTaggableOn :: Tag für das. Definitiv nicht ausgeschlossen. Sie können auch einen Filter für Taggable-Typ über Markierungen hinzufügen ... obwohl String-Filter sind sehr begrenzt - stellen Sie sicher, Sie read the docs. Wenn Sie den Pfad des Zeichenfolgenfilters durchgehen, erhalten Sie möglicherweise mehrere Tagging-Typen für ein Tag. Daher sollten Sie die CRC32-Werte mit Kommas verketten ... überprüfen Sie this somewhat related answer (für die Code Ausschnitte).