From 5d921bc3da69d6105cbc682ea3df6dce389b47dc Mon Sep 17 00:00:00 2001 From: Andrew Date: Mon, 6 Aug 2018 20:59:11 -0700 Subject: [PATCH] Added stem option --- CHANGELOG.md | 1 + README.md | 16 ++++++++++++++++ lib/searchkick/index_options.rb | 7 ++++++- lib/searchkick/model.rb | 2 +- test/case_sensitive_test.rb | 14 -------------- test/index_options_test.rb | 21 +++++++++++++++++++++ 6 files changed, 45 insertions(+), 16 deletions(-) delete mode 100644 test/case_sensitive_test.rb create mode 100644 test/index_options_test.rb diff --git a/CHANGELOG.md b/CHANGELOG.md index 21f13b9..1f886e3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ - Added per-field misspellings - Made `exclude` option work with match all - Added `case_sensitive` option +- Added `stem` option ## 3.1.0 diff --git a/README.md b/README.md index deeacac..6d6d22e 100644 --- a/README.md +++ b/README.md @@ -1676,6 +1676,22 @@ class Product < ApplicationRecord end ``` +Turn off stemming [master] + +```ruby +class Product < ApplicationRecord + searchkick stem: false +end +``` + +Turn on stemming for conversions + +```ruby +class Product < ApplicationRecord + searchkick stem_conversions: true +end +``` + Use a different [similarity algorithm](https://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules-similarity.html) for scoring ```ruby diff --git a/lib/searchkick/index_options.rb b/lib/searchkick/index_options.rb index 40ef011..5be06c8 100644 --- a/lib/searchkick/index_options.rb +++ b/lib/searchkick/index_options.rb @@ -226,12 +226,17 @@ module Searchkick end if options[:case_sensitive] - # delete lowercase analyzer from each settings[:analysis][:analyzer].each do |_, analyzer| analyzer[:filter].delete("lowercase") end end + if options[:stem] == false + settings[:analysis][:analyzer].each do |_, analyzer| + analyzer[:filter].delete("searchkick_stemmer") + 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 fa07d9a..17ab288 100644 --- a/lib/searchkick/model.rb +++ b/lib/searchkick/model.rb @@ -6,7 +6,7 @@ module Searchkick 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, + :special_characters, :stem, :stem_conversions, :suggest, :synonyms, :text_end, :text_middle, :text_start, :word, :wordnet, :word_end, :word_middle, :word_start] raise ArgumentError, "unknown keywords: #{unknown_keywords.join(", ")}" if unknown_keywords.any? diff --git a/test/case_sensitive_test.rb b/test/case_sensitive_test.rb deleted file mode 100644 index e77e096..0000000 --- a/test/case_sensitive_test.rb +++ /dev/null @@ -1,14 +0,0 @@ -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 diff --git a/test/index_options_test.rb b/test/index_options_test.rb new file mode 100644 index 0000000..e0befc8 --- /dev/null +++ b/test/index_options_test.rb @@ -0,0 +1,21 @@ +require_relative "test_helper" + +class IndexOptionsTest < 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 + + def test_no_stemming + with_options(Song, stem: false) do + store_names ["milk", "milks"], Song + assert_search "milks", ["milks"], {misspellings: false}, Song + end + end +end -- libgit2 0.21.0