diff --git a/CHANGELOG.md b/CHANGELOG.md index 0134150..4bfbd35 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,6 @@ ## 4.4.3 (unreleased) +- Added support for Hunspell - Fixed warning about accessing system indices ## 4.4.2 (2020-11-23) diff --git a/README.md b/README.md index 94fa000..2fd6957 100644 --- a/README.md +++ b/README.md @@ -322,6 +322,14 @@ See the [list of stemmers](https://www.elastic.co/guide/en/elasticsearch/referen - `ukrainian` - [analysis-ukrainian plugin](https://www.elastic.co/guide/en/elasticsearch/plugins/7.4/analysis-ukrainian.html) - `vietnamese` - [analysis-vietnamese plugin](https://github.com/duydo/elasticsearch-analysis-vietnamese) +You can also use a Hunspell dictionary for stemming. [master] + +```ruby +class Product < ApplicationRecord + searchkick language: {type: "hunspell", locale: "en_US"} +end +``` + Disable stemming with: ```ruby diff --git a/lib/searchkick/index_options.rb b/lib/searchkick/index_options.rb index 3671ed3..32ad1b7 100644 --- a/lib/searchkick/index_options.rb +++ b/lib/searchkick/index_options.rb @@ -153,7 +153,11 @@ module Searchkick } } - update_language(settings, language) + if language.is_a?(Hash) && language[:type] == "hunspell" + update_hunspell(settings, language) + else + update_language(settings, language) + end update_stemming(settings) if Searchkick.env == "test" @@ -196,6 +200,11 @@ module Searchkick settings end + # supports all hunspell token filter options + def update_hunspell(settings, language) + settings[:analysis][:filter][:searchkick_stemmer] = language + end + def update_language(settings, language) case language when "chinese" diff --git a/test/language_test.rb b/test/language_test.rb index 0537d4c..62c239b 100644 --- a/test/language_test.rb +++ b/test/language_test.rb @@ -90,6 +90,15 @@ class LanguageTest < Minitest::Test end end + def test_hunspell + skip if ci? + + with_options({language: {type: "hunspell", locale: "en_US"}}) do + store_names ["the foxes jumping quickly"] + assert_language_search "fox", ["the foxes jumping quickly"] + end + end + def assert_language_search(term, expected) assert_search term, expected, {misspellings: false} end -- libgit2 0.21.0