class Searchkick::MultiSearch
Attributes
queries[R]
Public Class Methods
new(queries, retry_misspellings: false)
click to toggle source
# File lib/searchkick/multi_search.rb, line 5 def initialize(queries, retry_misspellings: false) @queries = queries @retry_misspellings = retry_misspellings end
Public Instance Methods
perform()
click to toggle source
# File lib/searchkick/multi_search.rb, line 10 def perform if queries.any? perform_search(queries, retry_misspellings: @retry_misspellings) end end
Private Instance Methods
client()
click to toggle source
# File lib/searchkick/multi_search.rb, line 38 def client Searchkick.client end
perform_search(queries, retry_misspellings: true)
click to toggle source
# File lib/searchkick/multi_search.rb, line 18 def perform_search(queries, retry_misspellings: true) responses = client.msearch(body: queries.flat_map { |q| [q.params.except(:body), q.body] })["responses"] retry_queries = [] queries.each_with_index do |query, i| if retry_misspellings && query.retry_misspellings?(responses[i]) query.send(:prepare) # okay, since we don't want to expose this method outside Searchkick retry_queries << query else query.handle_response(responses[i]) end end if retry_misspellings && retry_queries.any? perform_search(retry_queries, retry_misspellings: false) end queries end