2016-11-04 3 views
0

Ich habe vor kurzem Searchkick eingerichtet und es funktioniert wunderbar für Attribute auf dem Modell, das ich indiziert habe.Warum funktioniert mein searchkick has_many und HABTM association nicht?

Allerdings, wenn es um Assoziationen geht, scheitert es schlecht.

Das ist mein Modell mit Verbänden & search_data Methode:

class Profile < ActiveRecord::Base 
    searchkick 

    has_and_belongs_to_many :positions 
    belongs_to :school 

    def search_data 
    { 
     name: name, 
     bib_color: bib_color, 
     height: height, 
     weight: weight, 
     player_type: player_type, 
     school_name: school.name, 
     age: age, 
     position_name: positions.map(&:name) 
    } 
    end 
end 

Ich stellte sicher, Profile.reindex zu laufen, aber wenn ich eine Abfrage für Center Back laufen, was der Name eines position ist, gibt es eine leere Abfrage Stellen Sie ein, wenn ich weiß, dass es Ergebnisse gibt.

> Profile.search("center back").to_a 
    Profile Search (27.5ms) curl http://localhost:9200/profiles_development/_search?pretty -d '{"query":{"dis_max":{"queries":[{"match":{"_all":{"query":"center back","boost":10,"operator":"and","analyzer":"searchkick_search"}}},{"match":{"_all":{"query":"center back","boost":10,"operator":"and","analyzer":"searchkick_search2"}}},{"match":{"_all":{"query":"center back","boost":1,"operator":"and","analyzer":"searchkick_search","fuzziness":1,"prefix_length":0,"max_expansions":3,"fuzzy_transpositions":true}}},{"match":{"_all":{"query":"center back","boost":1,"operator":"and","analyzer":"searchkick_search2","fuzziness":1,"prefix_length":0,"max_expansions":3,"fuzzy_transpositions":true}}}]}},"size":1000,"from":0,"timeout":"11s","_source":false}' 
=> [] 

Doch hier sind die sonst Ergebnisse:

> p 
=> #<Position:0x007fa881566310 id: 1, created_at: Sun, 04 Sep 2016 06:49:45 UTC +00:00, updated_at: Wed, 14 Sep 2016 06:17:02 UTC +00:00, name: "Center Back"> 
> p.profiles.count 
    (4.1ms) SELECT COUNT(*) FROM "profiles" INNER JOIN "positions_profiles" ON "profiles"."id" = "positions_profiles"."profile_id" WHERE "positions_profiles"."position_id" = $1 [["position_id", 1]] 
=> 5 

Es sollte mindestens 5 profiles, doch sind die Ergebnisse zurück als leer sein.

Ich habe sogar versucht, meine search_data wie die Formatierung so:

def search_data 
    attrs = attributes.dup 
    relational = { 
     school_name: school.name, 
     grade_name: grades.map(&:subject), 
     position_names: positions.map(&:name) 
    } 
    attrs.merge! relational 
    end 

Das gleiche passiert, wenn ich einen regelmäßigen has_many Verein versuchen und es dementsprechend zu erklären.

Was könnte das verursachen und wie behebe ich es?

Antwort

0

So stellt sich heraus, dass die search_data tatsächlich richtig ist, aber ich wusste nicht, dass ich den rails searchkick:reindex:all Befehl auszuführen hatte, im Gegensatz zu nur Profile.reindex in meinem rails console tun, das ausgeführt wurde.

Sobald ich diesen Befehl ausgeführt habe, bemerkte ich, dass es alles einschließlich aller Assoziationen neu indiziert und jetzt funktioniert es wie ein Charme!