2017-08-29 5 views
0

Ich habe eine Notiz Modell mit polymorpher Zuordnung hinzuzufügen, die wie unterWie Infix und Präfix-Indizes für verschachteltes Modell basierend auf Zustand in sphinx Suche

incident has one symptom -> (note model) 
incident has many comments -> (note model) 

und

ist, würde Ich mögen die Infix tun Indizierung für die Notiz mit dem Hinweis Typ „Symptom“ und wollen das Präfix Indizierung für die Notiz mit Typ tun „Kommentar“

ich habe den Code unten in Sphinx Index versucht

ThinkingSphinx::Index.define(:incident, DEFAULT_INDEX_OPTIONS.merge(name: "incident_prefix"), &Searchable.beetilable_index('Incident', index_count: incident_index_count, index_id: i) { 
     set_property :min_infix_length => 3 
     indexes notes.note, :as => :notes, :source => :query 
     notes.where(note_type: "Symptom") 
} 

ThinkingSphinx::Index.define(:incident, DEFAULT_INDEX_OPTIONS.merge(name: "incident_infix"), &Searchable.beetilable_index('Incident', index_count: incident_index_count, index_id: i) { 
     set_property :min_prefix_length => 3 
     indexes notes.note, :as => :notes, :source => :query 
     notes.where.not(note_type: "Symptom") 

} 

der obige Code macht nur die Indizierung mit INFIX Option und ignoriert die PREFIX eine. Ich denke, etwas stimmt nicht mit meinem Zustand, kann mir jemand den Weg erklären, dies zu erreichen?

Antwort

0

Ich fürchte, Sie können Arel/ActiveRecord Query-Methoden innerhalb der Indexdefinition nicht über Zuordnungen erstellen - Sie können nur Zuordnungen und Spalten verwenden.

Wenn Sie nur Noten von bestimmten Typen wollen, dann ist hier der beste Ansatz ist Assoziationen zu schaffen, die diese Filter angewendet haben, und dann die Zuordnung in Ihrem Index Referenz:

# in the model 
has_many :symptom_notes, 
    lambda { where(:note_type => "Symptom") }, 
    :class_name => "Note" 

# in the index: 
indexes symptom_notes.note, :as => :notes 
Verwandte Themen