Commit 5d921bc3da69d6105cbc682ea3df6dce389b47dc
1 parent
4bed5e3e
Exists in
master
and in
18 other branches
Added stem option
Showing
6 changed files
with
45 additions
and
16 deletions
Show diff stats
CHANGELOG.md
@@ -3,6 +3,7 @@ | @@ -3,6 +3,7 @@ | ||
3 | - Added per-field misspellings | 3 | - Added per-field misspellings |
4 | - Made `exclude` option work with match all | 4 | - Made `exclude` option work with match all |
5 | - Added `case_sensitive` option | 5 | - Added `case_sensitive` option |
6 | +- Added `stem` option | ||
6 | 7 | ||
7 | ## 3.1.0 | 8 | ## 3.1.0 |
8 | 9 |
README.md
@@ -1676,6 +1676,22 @@ class Product < ApplicationRecord | @@ -1676,6 +1676,22 @@ class Product < ApplicationRecord | ||
1676 | end | 1676 | end |
1677 | ``` | 1677 | ``` |
1678 | 1678 | ||
1679 | +Turn off stemming [master] | ||
1680 | + | ||
1681 | +```ruby | ||
1682 | +class Product < ApplicationRecord | ||
1683 | + searchkick stem: false | ||
1684 | +end | ||
1685 | +``` | ||
1686 | + | ||
1687 | +Turn on stemming for conversions | ||
1688 | + | ||
1689 | +```ruby | ||
1690 | +class Product < ApplicationRecord | ||
1691 | + searchkick stem_conversions: true | ||
1692 | +end | ||
1693 | +``` | ||
1694 | + | ||
1679 | Use a different [similarity algorithm](https://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules-similarity.html) for scoring | 1695 | Use a different [similarity algorithm](https://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules-similarity.html) for scoring |
1680 | 1696 | ||
1681 | ```ruby | 1697 | ```ruby |
lib/searchkick/index_options.rb
@@ -226,12 +226,17 @@ module Searchkick | @@ -226,12 +226,17 @@ module Searchkick | ||
226 | end | 226 | end |
227 | 227 | ||
228 | if options[:case_sensitive] | 228 | if options[:case_sensitive] |
229 | - # delete lowercase analyzer from each | ||
230 | settings[:analysis][:analyzer].each do |_, analyzer| | 229 | settings[:analysis][:analyzer].each do |_, analyzer| |
231 | analyzer[:filter].delete("lowercase") | 230 | analyzer[:filter].delete("lowercase") |
232 | end | 231 | end |
233 | end | 232 | end |
234 | 233 | ||
234 | + if options[:stem] == false | ||
235 | + settings[:analysis][:analyzer].each do |_, analyzer| | ||
236 | + analyzer[:filter].delete("searchkick_stemmer") | ||
237 | + end | ||
238 | + end | ||
239 | + | ||
235 | settings = settings.symbolize_keys.deep_merge((options[:settings] || {}).symbolize_keys) | 240 | settings = settings.symbolize_keys.deep_merge((options[:settings] || {}).symbolize_keys) |
236 | 241 | ||
237 | # synonyms | 242 | # synonyms |
lib/searchkick/model.rb
@@ -6,7 +6,7 @@ module Searchkick | @@ -6,7 +6,7 @@ module Searchkick | ||
6 | unknown_keywords = options.keys - [:_all, :_type, :batch_size, :callbacks, :case_sensitive, :conversions, :default_fields, | 6 | unknown_keywords = options.keys - [:_all, :_type, :batch_size, :callbacks, :case_sensitive, :conversions, :default_fields, |
7 | :filterable, :geo_shape, :highlight, :ignore_above, :index_name, :index_prefix, :inheritance, :language, | 7 | :filterable, :geo_shape, :highlight, :ignore_above, :index_name, :index_prefix, :inheritance, :language, |
8 | :locations, :mappings, :match, :merge_mappings, :routing, :searchable, :settings, :similarity, | 8 | :locations, :mappings, :match, :merge_mappings, :routing, :searchable, :settings, :similarity, |
9 | - :special_characters, :stem_conversions, :suggest, :synonyms, :text_end, | 9 | + :special_characters, :stem, :stem_conversions, :suggest, :synonyms, :text_end, |
10 | :text_middle, :text_start, :word, :wordnet, :word_end, :word_middle, :word_start] | 10 | :text_middle, :text_start, :word, :wordnet, :word_end, :word_middle, :word_start] |
11 | raise ArgumentError, "unknown keywords: #{unknown_keywords.join(", ")}" if unknown_keywords.any? | 11 | raise ArgumentError, "unknown keywords: #{unknown_keywords.join(", ")}" if unknown_keywords.any? |
12 | 12 |
test/case_sensitive_test.rb
@@ -1,14 +0,0 @@ | @@ -1,14 +0,0 @@ | ||
1 | -require_relative "test_helper" | ||
2 | - | ||
3 | -class CaseSensitiveTest < Minitest::Test | ||
4 | - def setup | ||
5 | - Song.destroy_all | ||
6 | - end | ||
7 | - | ||
8 | - def test_case_sensitive | ||
9 | - with_options(Song, case_sensitive: true) do | ||
10 | - store_names ["Test", "test"], Song | ||
11 | - assert_search "test", ["test"], {misspellings: false}, Song | ||
12 | - end | ||
13 | - end | ||
14 | -end |
@@ -0,0 +1,21 @@ | @@ -0,0 +1,21 @@ | ||
1 | +require_relative "test_helper" | ||
2 | + | ||
3 | +class IndexOptionsTest < Minitest::Test | ||
4 | + def setup | ||
5 | + Song.destroy_all | ||
6 | + end | ||
7 | + | ||
8 | + def test_case_sensitive | ||
9 | + with_options(Song, case_sensitive: true) do | ||
10 | + store_names ["Test", "test"], Song | ||
11 | + assert_search "test", ["test"], {misspellings: false}, Song | ||
12 | + end | ||
13 | + end | ||
14 | + | ||
15 | + def test_no_stemming | ||
16 | + with_options(Song, stem: false) do | ||
17 | + store_names ["milk", "milks"], Song | ||
18 | + assert_search "milks", ["milks"], {misspellings: false}, Song | ||
19 | + end | ||
20 | + end | ||
21 | +end |