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?