From 5667c9544a8f1c294cf1cdf4f22e2bb0d613737f Mon Sep 17 00:00:00 2001 From: Andrew Date: Fri, 23 Mar 2018 03:16:57 -0700 Subject: [PATCH] Added support for Vietnamese [skip ci] --- CHANGELOG.md | 2 +- README.md | 3 ++- lib/searchkick/index_options.rb | 12 ++++++++++++ lib/searchkick/query.rb | 2 +- test/language_test.rb | 9 +++++++++ 5 files changed, 25 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 500d698..c892c4b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ ## 3.0.2 [unreleased] -- Added support for Korean +- Added support for Korean and Vietnamese - Fixed `Unsupported argument type: Symbol` for async partial reindex - Fixed infinite recursion with multi search and misspellings below - Do not raise an error when `id` is indexed diff --git a/README.md b/README.md index a765515..9ea43cc 100644 --- a/README.md +++ b/README.md @@ -304,9 +304,10 @@ A few languages require plugins: - `chinese` - [elasticsearch-analysis-ik plugin](https://github.com/medcl/elasticsearch-analysis-ik) - `japanese` - [analysis-kuromoji plugin](https://www.elastic.co/guide/en/elasticsearch/plugins/6.2/analysis-kuromoji.html) -- `korean` - [elasticsearch-analysis-openkoreantext](https://github.com/open-korean-text/elasticsearch-analysis-openkoreantext) [master] +- `korean` - [elasticsearch-analysis-openkoreantext plugin](https://github.com/open-korean-text/elasticsearch-analysis-openkoreantext) [master] - `polish` - [analysis-stempel plugin](https://www.elastic.co/guide/en/elasticsearch/plugins/6.2/analysis-stempel.html) - `ukrainian` - [analysis-ukrainian plugin](https://www.elastic.co/guide/en/elasticsearch/plugins/6.2/analysis-ukrainian.html) +- `vietnamese` - [elasticsearch-analysis-vietnamese plugin](https://github.com/duydo/elasticsearch-analysis-vietnamese) [master] ### Synonyms diff --git a/lib/searchkick/index_options.rb b/lib/searchkick/index_options.rb index d29d480..b16eb58 100644 --- a/lib/searchkick/index_options.rb +++ b/lib/searchkick/index_options.rb @@ -181,6 +181,18 @@ module Searchkick type: "openkoreantext-analyzer" } ) + when "vietnamese" + settings[:analysis][:analyzer].merge!( + default_analyzer => { + type: "vi_analyzer" + }, + searchkick_search: { + type: "vi_analyzer" + }, + searchkick_search2: { + type: "vi_analyzer" + } + ) when "polish", "ukrainian", "smartcn" settings[:analysis][:analyzer].merge!( default_analyzer => { diff --git a/lib/searchkick/query.rb b/lib/searchkick/query.rb index 0ac2426..0e91a58 100644 --- a/lib/searchkick/query.rb +++ b/lib/searchkick/query.rb @@ -317,7 +317,7 @@ module Searchkick qs << shared_options.merge(analyzer: "searchkick_search") # searchkick_search and searchkick_search2 are the same for ukrainian - unless %w(japanese korean polish ukrainian).include?(searchkick_options[:language]) + unless %w(japanese korean polish ukrainian vietnamese).include?(searchkick_options[:language]) qs << shared_options.merge(analyzer: "searchkick_search2") end exclude_analyzer = "searchkick_search2" diff --git a/test/language_test.rb b/test/language_test.rb index 951aae2..d1c7352 100644 --- a/test/language_test.rb +++ b/test/language_test.rb @@ -64,6 +64,15 @@ class LanguageTest < Minitest::Test end end + def test_vietnamese + # requires https://github.com/duydo/elasticsearch-analysis-vietnamese + with_options(Song, language: "vietnamese") do + store_names ["công nghệ thông tin Việt Nam"], Song + assert_language_search "công nghệ thông tin", ["công nghệ thông tin Việt Nam"] + assert_language_search "công", [] + end + end + def assert_language_search(term, expected) assert_search term, expected, {misspellings: false}, Song end -- libgit2 0.21.0