diff --git a/lib/searchkick/query.rb b/lib/searchkick/query.rb index 4b9c870..95d5a0b 100644 --- a/lib/searchkick/query.rb +++ b/lib/searchkick/query.rb @@ -335,6 +335,11 @@ module Searchkick if field.start_with?("*.") q2 = qs.map { |q| {multi_match: q.merge(fields: [field], type: match_type == :match_phrase ? "phrase" : "best_fields")} } + if below60? + q2.each do |q| + q[:multi_match].delete(:fuzzy_transpositions) + end + end else q2 = qs.map { |q| {match_type => {field => q}} } end @@ -547,6 +552,8 @@ module Searchkick ["_all.phrase"] elsif term == "*" [] + elsif default_match == :exact + raise ArgumentError, "Must specify fields to search" else [default_match == :word ? "*.analyzed" : "*.#{default_match}"] end diff --git a/test/match_test.rb b/test/match_test.rb index 83199b7..9e9f9b4 100644 --- a/test/match_test.rb +++ b/test/match_test.rb @@ -180,12 +180,12 @@ class MatchTest < Minitest::Test def test_exclude_butter_exact store_names ["Butter Tub", "Peanut Butter Tub"] - assert_search "butter", [], exclude: ["peanut butter"], match: :exact + assert_search "butter", [], exclude: ["peanut butter"], fields: [{name: :exact}] end def test_exclude_same_exact store_names ["Butter Tub", "Peanut Butter Tub"] - assert_search "Butter Tub", [], exclude: ["Butter Tub"], match: :exact + assert_search "Butter Tub", ["Butter Tub"], exclude: ["Peanut Butter Tub"], fields: [{name: :exact}] end def test_exclude_egg_word_start @@ -242,7 +242,7 @@ class MatchTest < Minitest::Test def test_phrase store_names ["Fresh Honey", "Honey Fresh"] - assert_search "fresh honey", ["Fresh Honey"], match: :phrase + assert_search "fresh honey", ["Fresh Honey"], match: :phrase, fields: [:name] end def test_phrase_again -- libgit2 0.21.0