2010-06-30 20 views
6

Ich habe die Volltextsuche mit Sphinx und Thinking Sphinx implementiert. Ich möchte spaltenweise Suche hinzufügen. Soetwas wie :-(ein Beispiel Stack-Überlauf nehmen)So implementieren Sie Suche wie Stack Overflow

Angenommen, Sie möchten actvities sehen im Zusammenhang mit Ihnen, gerade Typ:

user:me 

Dann wird es ein Ergebnis zurück, mit allen Fragen und Antworten verwandten zu Piemonsons.

Wenn Sie

votes:15 

geben, dann wird es ein Ergebnis zurück, mit allen markierten Fragen mit mehr als 15 Stimmen haben.

Und wenn Sie

user:me votes:15 

geben, dann wird es zurückgeben, alle Fragen und Antworten mit mehr als 15 Stimmen, die Ihnen gehören.

Wie kann ich dieses Ding implementieren?

Momentan basieren meine Suchergebnisse auf der Volltextsuche. Wie können diese Merkmale enthalten sein?

Alle verfügbaren Optionen in Sphinx oder Solr oder andere Suchmaschinen?

Antwort

2

:with wahl in denken sphinx.

Zuerst müssen Sie diese Attribute in Ihrer Indexdefinition definieren (check out attributes section here).

has views_count, :as => :views, :type => :integer 
has user.id, :as => :user, :type => :integer 

Dann könnten Sie für Beiträge wie folgt suchen:

Post.search '', :with => {:views => 12..maxint, :user => User.first.id} 

(Ich bin nicht sicher, ob es eine elegantere Möglichkeit offen Bereiche zu geben, aber 12..max_int sollte genug sein)

Zwei wichtige Dinge:

  1. , wenn Sie verwandte Objekte zählen möchten (zB Antworten), sollten Sie Zähler Cache verwenden
  2. wenn Ihr "user" polymorphe Vereinigung ist, empfehle ich "CRC32(CONCAT(user_type, user_id))" statt user.id
Verwandte Themen