2016-11-04 3 views
0

Я недавно установил поиск, и он отлично работает для атрибутов на модели, которую я проиндексировал.Почему моя поисковая система has_many и ассоциация HABTM не работают?

Однако, когда дело доходит до ассоциаций, это терпит неудачу.

Это моя модель с ассоциациями & search_data метод:

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 

Я удостоверился, чтобы запустить Profile.reindex, но когда я запускаю запрос для Center Back, который является именем position, он возвращает пустой запрос когда я знаю, что есть результаты.

> 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}' 
=> [] 

Но вот результаты иначе:

> 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 

Там должно быть не менее 5 profiles, но результаты возвращают как пустые.

Я даже пытался форматировать мой search_data так:

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 

То же самое происходит, если я пытаюсь регулярные has_many ассоциации и объявить его соответствующим образом.

Что может быть причиной этого и как его исправить?

ответ

0

Так получается, что search_data на самом деле правильно, но я не понимаю, что я должен был выполнить команду rails searchkick:reindex:all, а не просто делать Profile.reindex в моем rails console, который был запущен.

Как только я запустил эту команду, я заметил, что она переиндексировала все, включая все ассоциации, и теперь она работает как шарм!