searchkick 5.2.0 → 5.2.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bea8e9ff3ed31f14751a19c74ecfa76f276d0e1e6d12803203bd023e0aba6926
4
- data.tar.gz: 060ab7e11f615f1b0b32494e38eb35135ee6d5b1df203bb7dadd04b9e9eb8886
3
+ metadata.gz: d3ada9c260b4ad16858d70480fafdc92d6bcbbeea240a628d832e5aaba4fea10
4
+ data.tar.gz: b9e48dc70ddfd83b10eeb1c02d572b6aaba66075c494c94fb8dd8450f7e39e7e
5
5
  SHA512:
6
- metadata.gz: 80e3c1e347ddd12750e1e9ebba5ef15c49915cbff4c1999733dc8663e750ad9aafc2a265865593572f5fec3ec9c6f0d9a0992a204154102f3829d75f0459cd6d
7
- data.tar.gz: a2d8dc9d74f1cc9a744a9bdcbb735e078a4f80114d441df26953e1b32e6a7f9ff5847c6619e540a468dabc933811f1e9bc47396bbaa34103942102eb253ddedb
6
+ metadata.gz: a9509e82eb6257fd25334e0527bb3bd890e5a40edc6710354700ebb826048888b1549756b3b34089de434f38517a53b648ae896ad1478e688a93a886a70d7675
7
+ data.tar.gz: 9b79d9dfad68255deccf6af74586ce877026652091b37baeeb60ec56f3af6b4923525846a68b7d3d008ed3baa81b1f765b76d2b6f68e6d014bcfa5ac413b4ad0
data/CHANGELOG.md CHANGED
@@ -1,3 +1,12 @@
1
+ ## 5.2.2 (2023-04-01)
2
+
3
+ - Fixed `total_docs` method
4
+ - Fixed deprecation warning with Active Support 7.1
5
+
6
+ ## 5.2.1 (2023-02-21)
7
+
8
+ - Added support for `redis-client` gem
9
+
1
10
  ## 5.2.0 (2023-02-08)
2
11
 
3
12
  - Added model name to warning about missing records
data/README.md CHANGED
@@ -1837,6 +1837,10 @@ To query nested data, use dot notation.
1837
1837
  Product.search("san", fields: ["store.city"], where: {"store.zip_code" => 12345})
1838
1838
  ```
1839
1839
 
1840
+ ## Nearest Neighbors
1841
+
1842
+ You can use custom mapping and searching to index vectors and perform k-nearest neighbor search. See the examples for [Elasticsearch](examples/elasticsearch_knn.rb) and [OpenSearch](examples/opensearch_knn.rb).
1843
+
1840
1844
  ## Reference
1841
1845
 
1842
1846
  Reindex one record
@@ -67,7 +67,8 @@ module Searchkick
67
67
  index: name,
68
68
  body: {
69
69
  query: {match_all: {}},
70
- size: 0
70
+ size: 0,
71
+ track_total_hits: true
71
72
  }
72
73
  )
73
74
 
@@ -31,7 +31,7 @@ module Searchkick
31
31
  params << "#{CGI.escape(k.to_s)}=#{CGI.escape(v.to_s)}"
32
32
  end
33
33
 
34
- debug " #{color(name, YELLOW, true)} #{index}#{type ? "/#{type.join(',')}" : ''}/_search#{params.any? ? '?' + params.join('&') : nil} #{payload[:query][:body].to_json}"
34
+ debug " #{color(name, YELLOW, bold: true)} #{index}#{type ? "/#{type.join(',')}" : ''}/_search#{params.any? ? '?' + params.join('&') : nil} #{payload[:query][:body].to_json}"
35
35
  end
36
36
 
37
37
  def request(event)
@@ -41,7 +41,7 @@ module Searchkick
41
41
  payload = event.payload
42
42
  name = "#{payload[:name]} (#{event.duration.round(1)}ms)"
43
43
 
44
- debug " #{color(name, YELLOW, true)} #{payload.except(:name).to_json}"
44
+ debug " #{color(name, YELLOW, bold: true)} #{payload.except(:name).to_json}"
45
45
  end
46
46
 
47
47
  def multi_search(event)
@@ -51,7 +51,7 @@ module Searchkick
51
51
  payload = event.payload
52
52
  name = "#{payload[:name]} (#{event.duration.round(1)}ms)"
53
53
 
54
- debug " #{color(name, YELLOW, true)} _msearch #{payload[:body]}"
54
+ debug " #{color(name, YELLOW, bold: true)} _msearch #{payload[:body]}"
55
55
  end
56
56
  end
57
57
  end
@@ -10,7 +10,7 @@ module Searchkick
10
10
 
11
11
  # supports single and multiple ids
12
12
  def push(record_ids)
13
- Searchkick.with_redis { |r| r.lpush(redis_key, record_ids) }
13
+ Searchkick.with_redis { |r| r.call("LPUSH", redis_key, record_ids) }
14
14
  end
15
15
 
16
16
  def push_records(records)
@@ -34,11 +34,11 @@ module Searchkick
34
34
  # TODO use reliable queuing
35
35
  def reserve(limit: 1000)
36
36
  if supports_rpop_with_count?
37
- Searchkick.with_redis { |r| r.call("rpop", redis_key, limit) }.to_a
37
+ Searchkick.with_redis { |r| r.call("RPOP", redis_key, limit) }.to_a
38
38
  else
39
39
  record_ids = []
40
40
  Searchkick.with_redis do |r|
41
- while record_ids.size < limit && (record_id = r.rpop(redis_key))
41
+ while record_ids.size < limit && (record_id = r.call("RPOP", redis_key))
42
42
  record_ids << record_id
43
43
  end
44
44
  end
@@ -47,11 +47,11 @@ module Searchkick
47
47
  end
48
48
 
49
49
  def clear
50
- Searchkick.with_redis { |r| r.del(redis_key) }
50
+ Searchkick.with_redis { |r| r.call("DEL", redis_key) }
51
51
  end
52
52
 
53
53
  def length
54
- Searchkick.with_redis { |r| r.llen(redis_key) }
54
+ Searchkick.with_redis { |r| r.call("LLEN", redis_key) }
55
55
  end
56
56
 
57
57
  private
@@ -65,7 +65,12 @@ module Searchkick
65
65
  end
66
66
 
67
67
  def redis_version
68
- @redis_version ||= Searchkick.with_redis { |r| Gem::Version.new(r.info["redis_version"]) }
68
+ @redis_version ||=
69
+ Searchkick.with_redis do |r|
70
+ info = r.call("INFO")
71
+ matches = /redis_version:(\S+)/.match(info)
72
+ Gem::Version.new(matches[1])
73
+ end
69
74
  end
70
75
 
71
76
  def escape(value)
@@ -47,11 +47,11 @@ module Searchkick
47
47
  end
48
48
 
49
49
  def batches_left
50
- Searchkick.with_redis { |r| r.scard(batches_key) }
50
+ Searchkick.with_redis { |r| r.call("SCARD", batches_key) }
51
51
  end
52
52
 
53
53
  def batch_completed(batch_id)
54
- Searchkick.with_redis { |r| r.srem(batches_key, [batch_id]) }
54
+ Searchkick.with_redis { |r| r.call("SREM", batches_key, [batch_id]) }
55
55
  end
56
56
 
57
57
  private
@@ -139,7 +139,7 @@ module Searchkick
139
139
  end
140
140
 
141
141
  def batch_job(class_name, batch_id, record_ids)
142
- Searchkick.with_redis { |r| r.sadd(batches_key, [batch_id]) }
142
+ Searchkick.with_redis { |r| r.call("SADD", batches_key, [batch_id]) }
143
143
  Searchkick::BulkReindexJob.perform_later(
144
144
  class_name: class_name,
145
145
  index_name: index.name,
@@ -1,3 +1,3 @@
1
1
  module Searchkick
2
- VERSION = "5.2.0"
2
+ VERSION = "5.2.2"
3
3
  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: 5.2.0
4
+ version: 5.2.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: 2023-02-09 00:00:00.000000000 Z
11
+ date: 2023-04-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activemodel
@@ -92,7 +92,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
92
92
  - !ruby/object:Gem::Version
93
93
  version: '0'
94
94
  requirements: []
95
- rubygems_version: 3.4.6
95
+ rubygems_version: 3.4.10
96
96
  signing_key:
97
97
  specification_version: 4
98
98
  summary: Intelligent search made easy with Rails and Elasticsearch or OpenSearch