Sha256: 65e2fae3c716e1a1d997768b15ef809933682a7be9910a12944b6c31e1fe6226
Contents?: true
Size: 1.18 KB
Versions: 1
Compression:
Stored size: 1.18 KB
Contents
module Elasticity class MultiSearch def initialize @searches = [] yield self if block_given? end def add(name, search, documents: nil, active_records: nil) mapper = case when documents && active_records raise ArgumentError, "you can only pass either :documents or :active_records as an option" when documents Search::DocumentMapper.new(documents) when active_records Search::ActiveRecordMapper.new(active_records) else raise ArgumentError, "you need to provide either :documents or :active_records as an option" end @searches << [name, search, mapper] end def [](name) @results ||= fetch @results[name] end private def fetch multi_body = @searches.map do |name, search, _| { index: search.index.name, type: search.document_type, body: search.body } end results = {} responses = Array(Elasticity.config.client.msearch(body: multi_body)["responses"]) responses.each_with_index do |resp, idx| name, search, mapper = @searches[idx] results[name] = Search::Result.new(resp, mapper) end results end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
es-elasticity-0.2.1 | lib/elasticity/multi_search.rb |