searchkick 3.0.1 → 3.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: bf72e82ba04fdb0dad02352ce84d8d7844b9097d
4
- data.tar.gz: 53739b3ac5968665fb53d73f6966b63e2c9bf3c3
3
+ metadata.gz: 755a0e68ea42b18bb5d3ab111bec8d7f95a0bce2
4
+ data.tar.gz: 5ed049addff00159cfe9a4c7db03ea81cb9383ca
5
5
  SHA512:
6
- metadata.gz: f1e26f41eda3b67dae70f0fe0502f46bef521565bdf69b70d1762430292e941f1fb581f6a485779705afe869f2728d9bd5e18abcd7537de1bcb2307831a84c75
7
- data.tar.gz: 03c79e33d55fd712d4b75ff9830d00c9fa78acdc65aeb80a78cc23931055ecec0a3e892d239491236ecedc7184c8d37a062a0ece6a45779b1244e9117eed28d9
6
+ metadata.gz: cab627210801732d119796bce578d42289d808199a1f3a3510343ded21c4513ecad2f2e7259a435fc4c31db13e89995bf659195fa783c5d5747c0c0e554ee76f
7
+ data.tar.gz: 4b06af47509a66eafc9f8bc6080e28a72fbd03998c4b7307b4e26cb950a5d52417ace6261a9b974dcf809fb535af75c5789a2e1ae96c45c66dd630dd9e0b76fc
data/CHANGELOG.md CHANGED
@@ -1,7 +1,14 @@
1
+ ## 3.0.2
2
+
3
+ - Added support for Korean and Vietnamese
4
+ - Fixed `Unsupported argument type: Symbol` for async partial reindex
5
+ - Fixed infinite recursion with multi search and misspellings below
6
+ - Do not raise an error when `id` is indexed
7
+
1
8
  ## 3.0.1
2
9
 
3
10
  - Added `scope` option for partial reindex
4
- - Added support for Japanese, Polish, and Ukranian
11
+ - Added support for Japanese, Polish, and Ukrainian
5
12
 
6
13
  ## 3.0.0
7
14
 
data/README.md CHANGED
@@ -22,7 +22,7 @@ Plus:
22
22
  - supports many languages
23
23
  - works with ActiveRecord, Mongoid, and NoBrainer
24
24
 
25
- :speech_balloon: Get [handcrafted updates](http://chartkick.us7.list-manage.com/subscribe?u=952c861f99eb43084e0a49f98&id=6ea6541e8e&group[0][4]=true) for new features
25
+ :speech_balloon: Get [handcrafted updates](https://chartkick.us7.list-manage.com/subscribe?u=952c861f99eb43084e0a49f98&id=6ea6541e8e&group[0][4]=true) for new features
26
26
 
27
27
  :tangerine: Battle-tested at [Instacart](https://www.instacart.com/opensource)
28
28
 
@@ -302,10 +302,12 @@ end
302
302
 
303
303
  A few languages require plugins:
304
304
 
305
- - `chinese` - [elasticsearch-analysis-ik plugin](https://github.com/medcl/elasticsearch-analysis-ik)
305
+ - `chinese` - [analysis-ik plugin](https://github.com/medcl/elasticsearch-analysis-ik)
306
306
  - `japanese` - [analysis-kuromoji plugin](https://www.elastic.co/guide/en/elasticsearch/plugins/6.2/analysis-kuromoji.html)
307
+ - `korean` - [analysis-openkoreantext plugin](https://github.com/open-korean-text/elasticsearch-analysis-openkoreantext)
307
308
  - `polish` - [analysis-stempel plugin](https://www.elastic.co/guide/en/elasticsearch/plugins/6.2/analysis-stempel.html)
308
309
  - `ukrainian` - [analysis-ukrainian plugin](https://www.elastic.co/guide/en/elasticsearch/plugins/6.2/analysis-ukrainian.html)
310
+ - `vietnamese` - [analysis-vietnamese plugin](https://github.com/duydo/elasticsearch-analysis-vietnamese)
309
311
 
310
312
  ### Synonyms
311
313
 
@@ -654,7 +656,7 @@ Reindex and search with:
654
656
  Movie.search "jurassic pa", fields: [:title], match: :word_start
655
657
  ```
656
658
 
657
- Typically, you want to use a JavaScript library like [typeahead.js](http://twitter.github.io/typeahead.js/) or [jQuery UI](http://jqueryui.com/autocomplete/).
659
+ Typically, you want to use a JavaScript library like [typeahead.js](https://twitter.github.io/typeahead.js/) or [jQuery UI](https://jqueryui.com/autocomplete/).
658
660
 
659
661
  #### Here’s how to make it work with Rails
660
662
 
@@ -854,7 +856,7 @@ class Restaurant < ApplicationRecord
854
856
  searchkick locations: [:location]
855
857
 
856
858
  def search_data
857
- attributes.merge location: {lat: latitude, lon: longitude}
859
+ attributes.merge(location: {lat: latitude, lon: longitude})
858
860
  end
859
861
  end
860
862
  ```
@@ -169,6 +169,30 @@ module Searchkick
169
169
  type: "kuromoji"
170
170
  }
171
171
  )
172
+ when "korean"
173
+ settings[:analysis][:analyzer].merge!(
174
+ default_analyzer => {
175
+ type: "openkoreantext-analyzer"
176
+ },
177
+ searchkick_search: {
178
+ type: "openkoreantext-analyzer"
179
+ },
180
+ searchkick_search2: {
181
+ type: "openkoreantext-analyzer"
182
+ }
183
+ )
184
+ when "vietnamese"
185
+ settings[:analysis][:analyzer].merge!(
186
+ default_analyzer => {
187
+ type: "vi_analyzer"
188
+ },
189
+ searchkick_search: {
190
+ type: "vi_analyzer"
191
+ },
192
+ searchkick_search2: {
193
+ type: "vi_analyzer"
194
+ }
195
+ )
172
196
  when "polish", "ukrainian", "smartcn"
173
197
  settings[:analysis][:analyzer].merge!(
174
198
  default_analyzer => {
@@ -14,12 +14,12 @@ module Searchkick
14
14
 
15
15
  private
16
16
 
17
- def perform_search(queries)
18
- responses = client.msearch(body: queries.flat_map { |q| [q.params.except(:body), q.body] })["responses"]
17
+ def perform_search(search_queries, perform_retry: true)
18
+ responses = client.msearch(body: search_queries.flat_map { |q| [q.params.except(:body), q.body] })["responses"]
19
19
 
20
20
  retry_queries = []
21
- queries.each_with_index do |query, i|
22
- if query.retry_misspellings?(responses[i])
21
+ search_queries.each_with_index do |query, i|
22
+ if perform_retry && query.retry_misspellings?(responses[i])
23
23
  query.send(:prepare) # okay, since we don't want to expose this method outside Searchkick
24
24
  retry_queries << query
25
25
  else
@@ -28,10 +28,10 @@ module Searchkick
28
28
  end
29
29
 
30
30
  if retry_queries.any?
31
- perform_search(retry_queries)
31
+ perform_search(retry_queries, perform_retry: false)
32
32
  end
33
33
 
34
- queries
34
+ search_queries
35
35
  end
36
36
 
37
37
  def client
@@ -317,7 +317,7 @@ module Searchkick
317
317
  qs << shared_options.merge(analyzer: "searchkick_search")
318
318
 
319
319
  # searchkick_search and searchkick_search2 are the same for ukrainian
320
- unless %w(japanese polish ukrainian).include?(searchkick_options[:language])
320
+ unless %w(japanese korean polish ukrainian vietnamese).include?(searchkick_options[:language])
321
321
  qs << shared_options.merge(analyzer: "searchkick_search2")
322
322
  end
323
323
  exclude_analyzer = "searchkick_search2"
@@ -1,6 +1,5 @@
1
1
  module Searchkick
2
2
  class RecordData
3
- EXCLUDED_ATTRIBUTES = ["id", :id]
4
3
  TYPE_KEYS = ["type", :type]
5
4
 
6
5
  attr_reader :index, :record
@@ -50,11 +49,7 @@ module Searchkick
50
49
  def search_data(method_name = nil)
51
50
  partial_reindex = !method_name.nil?
52
51
 
53
- # remove _id since search_id is used instead
54
52
  source = record.send(method_name || :search_data)
55
- EXCLUDED_ATTRIBUTES.each do |attr|
56
- raise Searchkick::Error, "Cannot index a field with name: #{attr}" if source[attr]
57
- end
58
53
 
59
54
  # conversions
60
55
  index.conversions_fields.each do |conversions_field|
@@ -26,7 +26,11 @@ module Searchkick
26
26
  raise Searchkick::Error, "Active Job not found"
27
27
  end
28
28
 
29
- Searchkick::ReindexV2Job.perform_later(record.class.name, record.id.to_s, method_name)
29
+ Searchkick::ReindexV2Job.perform_later(
30
+ record.class.name,
31
+ record.id.to_s,
32
+ method_name ? method_name.to_s : nil
33
+ )
30
34
  else # bulk, true
31
35
  reindex_record(method_name)
32
36
 
@@ -1,3 +1,3 @@
1
1
  module Searchkick
2
- VERSION = "3.0.1"
2
+ VERSION = "3.0.2"
3
3
  end
@@ -38,6 +38,16 @@ class LanguageTest < Minitest::Test
38
38
  end
39
39
  end
40
40
 
41
+ def test_korean
42
+ # requires https://github.com/open-korean-text/elasticsearch-analysis-openkoreantext
43
+ with_options(Song, language: "korean") do
44
+ store_names ["한국어를 처리하는 예시입니닼ㅋㅋ"], Song
45
+ assert_language_search "처리", ["한국어를 처리하는 예시입니닼ㅋㅋ"]
46
+ assert_language_search "한국어", ["한국어를 처리하는 예시입니닼ㅋㅋ"]
47
+ assert_language_search "를", []
48
+ end
49
+ end
50
+
41
51
  def test_polish
42
52
  # requires https://www.elastic.co/guide/en/elasticsearch/plugins/6.2/analysis-stempel.html
43
53
  with_options(Song, language: "polish") do
@@ -54,6 +64,15 @@ class LanguageTest < Minitest::Test
54
64
  end
55
65
  end
56
66
 
67
+ def test_vietnamese
68
+ # requires https://github.com/duydo/elasticsearch-analysis-vietnamese
69
+ with_options(Song, language: "vietnamese") do
70
+ store_names ["công nghệ thông tin Việt Nam"], Song
71
+ assert_language_search "công nghệ thông tin", ["công nghệ thông tin Việt Nam"]
72
+ assert_language_search "công", []
73
+ end
74
+ end
75
+
57
76
  def assert_language_search(term, expected)
58
77
  assert_search term, expected, {misspellings: false}, Song
59
78
  end
@@ -22,7 +22,7 @@ class MultiSearchTest < Minitest::Test
22
22
 
23
23
  def test_misspellings_below_unmet
24
24
  store_names ["abc", "abd", "aee"]
25
- products = Product.search("abc", misspellings: {below: 2}, execute: false)
25
+ products = Product.search("abc", misspellings: {below: 5}, execute: false)
26
26
  Searchkick.multi_search([products])
27
27
  assert_equal ["abc", "abd"], products.map(&:name)
28
28
  end
@@ -55,4 +55,11 @@ class PartialReindexTest < Minitest::Test
55
55
  assert_search "bye", ["Bye"], fields: [:name], load: false
56
56
  assert_search "blue", ["Bye"], fields: [:color], load: false
57
57
  end
58
+
59
+ def test_instance_method_async
60
+ skip unless defined?(ActiveJob)
61
+
62
+ product = Product.create!(name: "Hi")
63
+ product.reindex(:search_data, mode: :async)
64
+ end
58
65
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: searchkick
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.1
4
+ version: 3.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Kane
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-03-15 00:00:00.000000000 Z
11
+ date: 2018-03-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activemodel