Commit fd66e07c9de067695dd9e79aaa518cef9ad174fa

Authored by Andrew Kane
1 parent 4e11926e

Added support for Hunspell - closes #1460

CHANGELOG.md
1 1 ## 4.4.3 (unreleased)
2 2  
  3 +- Added support for Hunspell
3 4 - Fixed warning about accessing system indices
4 5  
5 6 ## 4.4.2 (2020-11-23)
... ...
README.md
... ... @@ -322,6 +322,14 @@ See the [list of stemmers](https://www.elastic.co/guide/en/elasticsearch/referen
322 322 - `ukrainian` - [analysis-ukrainian plugin](https://www.elastic.co/guide/en/elasticsearch/plugins/7.4/analysis-ukrainian.html)
323 323 - `vietnamese` - [analysis-vietnamese plugin](https://github.com/duydo/elasticsearch-analysis-vietnamese)
324 324  
  325 +You can also use a Hunspell dictionary for stemming. [master]
  326 +
  327 +```ruby
  328 +class Product < ApplicationRecord
  329 + searchkick language: {type: "hunspell", locale: "en_US"}
  330 +end
  331 +```
  332 +
325 333 Disable stemming with:
326 334  
327 335 ```ruby
... ...
lib/searchkick/index_options.rb
... ... @@ -153,7 +153,11 @@ module Searchkick
153 153 }
154 154 }
155 155  
156   - update_language(settings, language)
  156 + if language.is_a?(Hash) && language[:type] == "hunspell"
  157 + update_hunspell(settings, language)
  158 + else
  159 + update_language(settings, language)
  160 + end
157 161 update_stemming(settings)
158 162  
159 163 if Searchkick.env == "test"
... ... @@ -196,6 +200,11 @@ module Searchkick
196 200 settings
197 201 end
198 202  
  203 + # supports all hunspell token filter options
  204 + def update_hunspell(settings, language)
  205 + settings[:analysis][:filter][:searchkick_stemmer] = language
  206 + end
  207 +
199 208 def update_language(settings, language)
200 209 case language
201 210 when "chinese"
... ...
test/language_test.rb
... ... @@ -90,6 +90,15 @@ class LanguageTest &lt; Minitest::Test
90 90 end
91 91 end
92 92  
  93 + def test_hunspell
  94 + skip if ci?
  95 +
  96 + with_options({language: {type: "hunspell", locale: "en_US"}}) do
  97 + store_names ["the foxes jumping quickly"]
  98 + assert_language_search "fox", ["the foxes jumping quickly"]
  99 + end
  100 + end
  101 +
93 102 def assert_language_search(term, expected)
94 103 assert_search term, expected, {misspellings: false}
95 104 end
... ...