From 860874d73b710968791222c31895052c2dfb2263 Mon Sep 17 00:00:00 2001 From: Andrew Date: Sun, 5 Aug 2018 19:19:21 -0700 Subject: [PATCH] Added case_sensitive option --- CHANGELOG.md | 1 + lib/searchkick/index_options.rb | 7 +++++++ lib/searchkick/model.rb | 2 +- test/case_sensitive_test.rb | 14 ++++++++++++++ 4 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 test/case_sensitive_test.rb diff --git a/CHANGELOG.md b/CHANGELOG.md index 77ea4b0..21f13b9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ - Added per-field misspellings - Made `exclude` option work with match all +- Added `case_sensitive` option ## 3.1.0 diff --git a/lib/searchkick/index_options.rb b/lib/searchkick/index_options.rb index 64338da..40ef011 100644 --- a/lib/searchkick/index_options.rb +++ b/lib/searchkick/index_options.rb @@ -225,6 +225,13 @@ module Searchkick } end + if options[:case_sensitive] + # delete lowercase analyzer from each + settings[:analysis][:analyzer].each do |_, analyzer| + analyzer[:filter].delete("lowercase") + end + end + settings = settings.symbolize_keys.deep_merge((options[:settings] || {}).symbolize_keys) # synonyms diff --git a/lib/searchkick/model.rb b/lib/searchkick/model.rb index 12409ff..fa07d9a 100644 --- a/lib/searchkick/model.rb +++ b/lib/searchkick/model.rb @@ -3,7 +3,7 @@ module Searchkick def searchkick(**options) options = Searchkick.model_options.merge(options) - unknown_keywords = options.keys - [:_all, :_type, :batch_size, :callbacks, :conversions, :default_fields, + unknown_keywords = options.keys - [:_all, :_type, :batch_size, :callbacks, :case_sensitive, :conversions, :default_fields, :filterable, :geo_shape, :highlight, :ignore_above, :index_name, :index_prefix, :inheritance, :language, :locations, :mappings, :match, :merge_mappings, :routing, :searchable, :settings, :similarity, :special_characters, :stem_conversions, :suggest, :synonyms, :text_end, diff --git a/test/case_sensitive_test.rb b/test/case_sensitive_test.rb new file mode 100644 index 0000000..e77e096 --- /dev/null +++ b/test/case_sensitive_test.rb @@ -0,0 +1,14 @@ +require_relative "test_helper" + +class CaseSensitiveTest < Minitest::Test + def setup + Song.destroy_all + end + + def test_case_sensitive + with_options(Song, case_sensitive: true) do + store_names ["Test", "test"], Song + assert_search "test", ["test"], {misspellings: false}, Song + end + end +end -- libgit2 0.21.0