Commit a72f58056c469ba413a9040a56906bb25cbfddcf
1 parent
2f16c8da
Exists in
master
and in
21 other branches
Added multi search
Showing
3 changed files
with
24 additions
and
1 deletions
Show diff stats
lib/searchkick.rb
... | ... | @@ -138,6 +138,16 @@ module Searchkick |
138 | 138 | query.execute |
139 | 139 | end |
140 | 140 | end |
141 | + | |
142 | + def self.multi_search(queries) | |
143 | + if queries.any? | |
144 | + responses = client.msearch(body: queries.flat_map { |q| [q.params.except(:body), q.body] })["responses"] | |
145 | + queries.each_with_index do |query, i| | |
146 | + query.send(:handle_response, responses[i]) | |
147 | + end | |
148 | + end | |
149 | + true | |
150 | + end | |
141 | 151 | end |
142 | 152 | |
143 | 153 | # TODO find better ActiveModel hook | ... | ... |
lib/searchkick/query.rb
... | ... | @@ -129,7 +129,7 @@ module Searchkick |
129 | 129 | match_suffix: @match_suffix, |
130 | 130 | highlighted_fields: @highlighted_fields || [] |
131 | 131 | } |
132 | - Searchkick::Results.new(searchkick_klass, response, opts) | |
132 | + @execute = Searchkick::Results.new(searchkick_klass, response, opts) | |
133 | 133 | end |
134 | 134 | |
135 | 135 | def reindex_command | ... | ... |
... | ... | @@ -0,0 +1,13 @@ |
1 | +require_relative "test_helper" | |
2 | + | |
3 | +class MultiSearchTest < Minitest::Test | |
4 | + def test_basic | |
5 | + store_names ["Product A"] | |
6 | + store_names ["Store A"], Store | |
7 | + products = Product.search("*", execute: false) | |
8 | + stores = Store.search("*", execute: false) | |
9 | + Searchkick.multi_search([products, stores]) | |
10 | + assert_equal ["Product A"], products.map(&:name) | |
11 | + assert_equal ["Store A"], stores.map(&:name) | |
12 | + end | |
13 | +end | ... | ... |