Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Rails Searchkick / Elasticsearch has_many and belongs_to associations

Im trying to use Searchkick to run a search and return based on multiple models.

My book model contains this

class Book < ActiveRecord::Base

  searchkick

  has_many :book_subjects
  has_many :subjects, through: :book_subjects

  belongs_to :author
  belongs_to :publisher

end

and then my controller has this

def index

 if params[:search].present?
   @books = Book.search(params[:search], operator: "or")
 else
  @books = Book.all
 end
end

I want the search results to search the associated models and return any results there too -- so the boo subject name, the author and the publisher.

thanks

like image 710
railsey Avatar asked Dec 02 '22 14:12

railsey


1 Answers

In your Book model you need to have a search_data block for the indexing.

def search_data
  attributes.merge(
    author_name: author(&:name)
    publisher_name: publisher(&:name)
    subjects_name: subjects.map(&:name)
  )
end

this will add the associations to your index.

You use the .map method for the has_many associations.

like image 148
shaunix Avatar answered Dec 06 '22 17:12

shaunix