Sha256: f6cdcec32a492e4363c868be37df393f25eb0475eec4fe3bdddde07034333da5

Contents?: true

Size: 864 Bytes

Versions: 2

Compression:

Stored size: 864 Bytes

Contents

module Searchkick
  class MultiSearch
    attr_reader :queries

    def initialize(queries)
      @queries = queries
    end

    def perform
      if queries.any?
        perform_search(queries)
      end
    end

    private

    def perform_search(queries)
      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 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_queries.any?
        perform_search(retry_queries)
      end

      queries
    end

    def client
      Searchkick.client
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
searchkick-3.0.1 lib/searchkick/multi_search.rb
searchkick-3.0.0 lib/searchkick/multi_search.rb