From ef8f7acab6ccd861f384523ddeffb547748357f1 Mon Sep 17 00:00:00 2001 From: Aaron Milam Date: Thu, 27 Jul 2017 15:15:04 -0400 Subject: [PATCH] Make multi_search work with misspellings_below option --- lib/searchkick.rb | 8 +++++++- lib/searchkick/query.rb | 2 +- test/multi_search_test.rb | 8 ++++++++ 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/lib/searchkick.rb b/lib/searchkick.rb index 77cad74..3da2fa7 100644 --- a/lib/searchkick.rb +++ b/lib/searchkick.rb @@ -104,8 +104,14 @@ module Searchkick def self.multi_search(queries) if queries.any? responses = client.msearch(body: queries.flat_map { |q| [q.params.except(:body), q.body] })["responses"] + queries.each_with_index do |query, i| - query.handle_response(responses[i]) + if query.misspellings_below && responses[i]["hits"]["total"] < query.misspellings_below + query.send(:prepare) + query.execute + else + query.handle_response(responses[i]) + end end end queries diff --git a/lib/searchkick/query.rb b/lib/searchkick/query.rb index ab4f732..8c7480e 100644 --- a/lib/searchkick/query.rb +++ b/lib/searchkick/query.rb @@ -4,7 +4,7 @@ module Searchkick @@metric_aggs = [:avg, :cardinality, :max, :min, :sum] - attr_reader :klass, :term, :options + attr_reader :klass, :term, :options, :misspellings_below attr_accessor :body def_delegators :execute, :map, :each, :any?, :empty?, :size, :length, :slice, :[], :to_ary, diff --git a/test/multi_search_test.rb b/test/multi_search_test.rb index 1f89d24..56be3f7 100644 --- a/test/multi_search_test.rb +++ b/test/multi_search_test.rb @@ -19,4 +19,12 @@ class MultiSearchTest < Minitest::Test assert !products.error assert stores.error end + + def test_misspellings_below_unmet + store_names ["Product A"] + store_names ["Store A"], Store + stores = Store.search("Stre A", misspellings: { below: 2 }, execute: false) + Searchkick.multi_search([stores]) + assert_equal ["Store A"], stores.map(&:name) + end end -- libgit2 0.21.0