typesense 0.10.0 → 0.13.0

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
  SHA256:
3
- metadata.gz: 2a9a804d053011ec4aed72f8a7a401db1c4a171152d1d171e8de7d2861b9f04e
4
- data.tar.gz: cfc7041f6221f8d5ee321b289e38ee82b4ee4d3decceeace13df3ae061cd621a
3
+ metadata.gz: e06b23f04adf0d96e94901c079d8be9f5f353fab0a6f0f7ef69c3f47022f3941
4
+ data.tar.gz: c0a6d81b8af2acaba1a071d4ac3dd555ec0b710df82ff25421db1e10670575ff
5
5
  SHA512:
6
- metadata.gz: 2eb9a9633cb01ef642e6a03ac4e98f67128ce47065f37484c108e843f2984be4fe2903841f1c78005cb6f6cc22e145f156bc2b6705c01a562fdcd2f45778c17a
7
- data.tar.gz: 20c0869a33ae76f0dcc6a11a3cb32db546d3cc40014403816887a1311e6c54f1fe7e98686550155fb56464385c6d5c28b8e7d387a464dbda931930af83f188af
6
+ metadata.gz: 124612023259c23c58b13331db5da50782b11cf344451d8697c3463ea2c592bdd4a24f39a6267e8da23811980ce94b9863d75f7b872678be8f7b9a675c13f943
7
+ data.tar.gz: 6e3f8e2930653f49ba48c9965bbfabf49982faf6447fe588143d29a9acf080be2900afb1188f17f5054f13e3107f56a265e413c5caae5e8b4e4d01511e87e8cf
data/.gitignore CHANGED
@@ -15,3 +15,4 @@ typesense-server-peers
15
15
 
16
16
  # rspec failure tracking
17
17
  .rspec_status
18
+ typesense-data
data/README.md CHANGED
@@ -33,6 +33,9 @@ Tests are also a good place to know how the the library works internally: [spec]
33
33
 
34
34
  | Typesense Server | typesense-ruby |
35
35
  |------------------|----------------|
36
+ | \>= v0.21.0 | \>= v0.13.0 |
37
+ | \>= v0.20.0 | \>= v0.12.0 |
38
+ | \>= v0.19.0 | \>= v0.11.0 |
36
39
  | \>= v0.18.0 | \>= v0.10.0 |
37
40
  | \>= v0.17.0 | \>= v0.9.0 |
38
41
  | \>= v0.16.0 | \>= v0.8.0 |
@@ -12,7 +12,7 @@ AwesomePrint.defaults = {
12
12
  ## Setup
13
13
  #
14
14
  ### Option 1: Start a single-node cluster
15
- # $ docker run -i -p 8108:8108 -v/tmp/typesense-server-data-1b/:/data -v`pwd`/typesense-server-peers:/typesense-server-peers typesense/typesense:0.18.0 --data-dir /data --api-key=xyz --listen-port 8108 --enable-cors
15
+ # $ docker run -i -p 8108:8108 -v/tmp/typesense-server-data-1b/:/data -v`pwd`/typesense-server-peers:/typesense-server-peers typesense/typesense:0.19.0 --data-dir /data --api-key=xyz --listen-port 8108 --enable-cors
16
16
  #
17
17
  ### Option 2: Start a 3-node cluster
18
18
  #
@@ -20,13 +20,13 @@ AwesomePrint.defaults = {
20
20
  # $ echo '172.17.0.2:8107:8108,172.17.0.3:7107:7108,172.17.0.4:9107:9108' > `pwd`/typesense-server-peers
21
21
  #
22
22
  # Start node 1:
23
- # $ docker run -i -p 8108:8108 -p 8107:8107 -v/tmp/typesense-server-data-1b/:/data -v`pwd`/typesense-server-peers:/typesense-server-peers typesense/typesense:0.18.0 --data-dir /data --api-key=xyz --listen-port 8108 --peering-port 8107 --enable-cors --nodes=/typesense-server-peers
23
+ # $ docker run -i -p 8108:8108 -p 8107:8107 -v/tmp/typesense-server-data-1b/:/data -v`pwd`/typesense-server-peers:/typesense-server-peers typesense/typesense:0.19.0 --data-dir /data --api-key=xyz --listen-port 8108 --peering-port 8107 --enable-cors --nodes=/typesense-server-peers
24
24
  #
25
25
  # Start node 2:
26
- # $ docker run -i -p 7108:7108 -p 7107:7107 -v/tmp/.typesense-server-data-2b/:/data -v`pwd`/typesense-server-peers:/typesense-server-peers typesense/typesense:0.18.0 --data-dir /data --api-key=xyz --listen-port 7108 --peering-port 7107 --enable-cors --nodes=/typesense-server-peers
26
+ # $ docker run -i -p 7108:7108 -p 7107:7107 -v/tmp/.typesense-server-data-2b/:/data -v`pwd`/typesense-server-peers:/typesense-server-peers typesense/typesense:0.19.0 --data-dir /data --api-key=xyz --listen-port 7108 --peering-port 7107 --enable-cors --nodes=/typesense-server-peers
27
27
  #
28
28
  # Start node 3:
29
- # $ docker run -i -p 9108:9108 -p 9107:9107 -v/tmp/.typesense-server-data-3b/:/data -v`pwd`/typesense-server-peers:/typesense-server-peers typesense/typesense:0.18.0 --data-dir /data --api-key=xyz --listen-port 9108 --peering-port 9107 --enable-cors --nodes=/typesense-server-peers
29
+ # $ docker run -i -p 9108:9108 -p 9107:9107 -v/tmp/.typesense-server-data-3b/:/data -v`pwd`/typesense-server-peers:/typesense-server-peers typesense/typesense:0.19.0 --data-dir /data --api-key=xyz --listen-port 9108 --peering-port 9107 --enable-cors --nodes=/typesense-server-peers
30
30
  #
31
31
  # Note: Be sure to add `--license-key=<>` at the end when starting a Typesense Premium server
32
32
 
data/examples/search.rb CHANGED
@@ -73,37 +73,6 @@ results = @typesense.collections['companies'].documents.search(
73
73
  )
74
74
  ap results
75
75
 
76
- # {
77
- # "facet_counts" => [],
78
- # "found" => 2,
79
- # "hits" => [
80
- # [0] {
81
- # "document" => {
82
- # "company_name" => "Stark Industries",
83
- # "country" => "USA",
84
- # "id" => "124",
85
- # "num_employees" => 5215
86
- # },
87
- # "highlight" => {
88
- # "company_name" => "<mark>Stark</mark> Industries"
89
- # }
90
- # },
91
- # [1] {
92
- # "document" => {
93
- # "company_name" => "Stark Corp",
94
- # "country" => "USA",
95
- # "id" => "127",
96
- # "num_employees" => 1031
97
- # },
98
- # "highlight" => {
99
- # "company_name" => "<mark>Stark</mark> Corp"
100
- # }
101
- # }
102
- # ],
103
- # "page" => 1,
104
- # "search_time_ms" => 0
105
- # }
106
-
107
76
  ##
108
77
  # Search for more documents
109
78
  results = @typesense.collections['companies'].documents.search(
@@ -114,25 +83,28 @@ results = @typesense.collections['companies'].documents.search(
114
83
  )
115
84
  ap results
116
85
 
117
- # {
118
- # "facet_counts" => [],
119
- # "found" => 1,
120
- # "hits" => [
121
- # [0] {
122
- # "document" => {
123
- # "company_name" => "Doofenshmirtz Inc",
124
- # "country" => "Tri-State Area",
125
- # "id" => "126",
126
- # "num_employees" => 2
127
- # },
128
- # "highlight" => {
129
- # "company_name" => "Doofenshmirtz <mark>Inc</mark>"
130
- # }
131
- # }
132
- # ],
133
- # "page" => 1,
134
- # "search_time_ms" => 0
135
- # }
86
+ ##
87
+ # Search for more multiple documents
88
+ results = @typesense.multi_search.perform(
89
+ {
90
+ searches: [
91
+ {
92
+ 'q' => 'Inc',
93
+ 'filter_by' => 'num_employees:<100',
94
+ 'sort_by' => 'num_employees:desc'
95
+ },
96
+ {
97
+ 'q' => 'Stark'
98
+ }
99
+ ]
100
+ },
101
+ {
102
+ # Parameters that are common to all searches, can be mentioned here
103
+ 'collection' => 'companies',
104
+ 'query_by' => 'company_name'
105
+ }
106
+ )
107
+ ap results
136
108
 
137
109
  ##
138
110
  # Search for more documents
@@ -142,13 +114,6 @@ results = @typesense.collections['companies'].documents.search(
142
114
  )
143
115
  ap results
144
116
 
145
- # {
146
- # "found" => 0,
147
- # "hits" => [],
148
- # "page" => 1,
149
- # "search_time_ms" => 0
150
- # }
151
-
152
117
  ##
153
118
  # Cleanup
154
119
  # Drop the collection
data/lib/typesense.rb CHANGED
@@ -19,6 +19,7 @@ require_relative 'typesense/aliases'
19
19
  require_relative 'typesense/alias'
20
20
  require_relative 'typesense/keys'
21
21
  require_relative 'typesense/key'
22
+ require_relative 'typesense/multi_search'
22
23
  require_relative 'typesense/debug'
23
24
  require_relative 'typesense/health'
24
25
  require_relative 'typesense/metrics'
@@ -177,23 +177,23 @@ module Typesense
177
177
 
178
178
  def custom_exception_klass_for(response)
179
179
  if response.code == 400
180
- Typesense::Error::RequestMalformed
180
+ Typesense::Error::RequestMalformed.new(response: response)
181
181
  elsif response.code == 401
182
- Typesense::Error::RequestUnauthorized
182
+ Typesense::Error::RequestUnauthorized.new(response: response)
183
183
  elsif response.code == 404
184
- Typesense::Error::ObjectNotFound
184
+ Typesense::Error::ObjectNotFound.new(response: response)
185
185
  elsif response.code == 409
186
- Typesense::Error::ObjectAlreadyExists
186
+ Typesense::Error::ObjectAlreadyExists.new(response: response)
187
187
  elsif response.code == 422
188
- Typesense::Error::ObjectUnprocessable
188
+ Typesense::Error::ObjectUnprocessable.new(response: response)
189
189
  elsif response.code >= 500 && response.code <= 599
190
- Typesense::Error::ServerError
190
+ Typesense::Error::ServerError.new(response: response)
191
191
  elsif response.timed_out?
192
- Typesense::Error::TimeoutError
192
+ Typesense::Error::TimeoutError.new(response: response)
193
193
  elsif response.code.zero?
194
- Typesense::Error::HTTPStatus0Error
194
+ Typesense::Error::HTTPStatus0Error.new(response: response)
195
195
  else
196
- Typesense::Error::HTTPError
196
+ Typesense::Error::HTTPError.new(response: response)
197
197
  end
198
198
  end
199
199
 
@@ -2,7 +2,8 @@
2
2
 
3
3
  module Typesense
4
4
  class Client
5
- attr_reader :configuration, :collections, :aliases, :keys, :debug, :health, :metrics, :operations
5
+ attr_reader :configuration, :collections, :aliases, :keys, :debug, :health, :metrics, :operations,
6
+ :multi_search
6
7
 
7
8
  def initialize(options = {})
8
9
  @configuration = Configuration.new(options)
@@ -10,6 +11,7 @@ module Typesense
10
11
  @collections = Collections.new(@api_call)
11
12
  @aliases = Aliases.new(@api_call)
12
13
  @keys = Keys.new(@api_call)
14
+ @multi_search = MultiSearch.new(@api_call)
13
15
  @debug = Debug.new(@api_call)
14
16
  @health = Health.new(@api_call)
15
17
  @metrics = Metrics.new(@api_call)
@@ -16,8 +16,8 @@ module Typesense
16
16
  @api_call.delete(endpoint_path)
17
17
  end
18
18
 
19
- def update(partial_document)
20
- @api_call.patch(endpoint_path, partial_document)
19
+ def update(partial_document, options = {})
20
+ @api_call.patch(endpoint_path, partial_document, options)
21
21
  end
22
22
 
23
23
  private
@@ -12,16 +12,16 @@ module Typesense
12
12
  @documents = {}
13
13
  end
14
14
 
15
- def create(document)
16
- @api_call.post(endpoint_path, document)
15
+ def create(document, options = {})
16
+ @api_call.post(endpoint_path, document, options)
17
17
  end
18
18
 
19
- def upsert(document)
20
- @api_call.post(endpoint_path, document, action: :upsert)
19
+ def upsert(document, options = {})
20
+ @api_call.post(endpoint_path, document, options.merge(action: :upsert))
21
21
  end
22
22
 
23
- def update(document)
24
- @api_call.post(endpoint_path, document, action: :update)
23
+ def update(document, options = {})
24
+ @api_call.post(endpoint_path, document, options.merge(action: :update))
25
25
  end
26
26
 
27
27
  def create_many(documents, options = {})
@@ -52,8 +52,8 @@ module Typesense
52
52
  end
53
53
  end
54
54
 
55
- def export
56
- @api_call.get(endpoint_path('export'))
55
+ def export(options = {})
56
+ @api_call.get(endpoint_path('export'), options)
57
57
  end
58
58
 
59
59
  def search(search_parameters)
@@ -2,6 +2,14 @@
2
2
 
3
3
  module Typesense
4
4
  class Error < StandardError
5
+ attr_reader :data
6
+
7
+ def initialize(data)
8
+ @data = data
9
+
10
+ super
11
+ end
12
+
5
13
  class MissingConfiguration < Error
6
14
  end
7
15
 
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Typesense
4
+ class MultiSearch
5
+ RESOURCE_PATH = '/multi_search'
6
+
7
+ def initialize(api_call)
8
+ @api_call = api_call
9
+ end
10
+
11
+ def perform(searches, query_params = {})
12
+ @api_call.post(RESOURCE_PATH, searches, query_params)
13
+ end
14
+ end
15
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Typesense
4
- VERSION = '0.10.0'
4
+ VERSION = '0.13.0'
5
5
  end
data/typesense.gemspec CHANGED
@@ -40,6 +40,6 @@ Gem::Specification.new do |spec|
40
40
  spec.add_development_dependency 'timecop', '~> 0.9'
41
41
  spec.add_development_dependency 'webmock', '~> 3.8'
42
42
 
43
- spec.add_dependency 'oj', '~> 3.10'
43
+ spec.add_dependency 'oj', '~> 3.11'
44
44
  spec.add_dependency 'typhoeus', '~> 1.4'
45
45
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: typesense
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.10.0
4
+ version: 0.13.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Typesense, Inc.
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-12-29 00:00:00.000000000 Z
11
+ date: 2021-07-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: awesome_print
@@ -226,14 +226,14 @@ dependencies:
226
226
  requirements:
227
227
  - - "~>"
228
228
  - !ruby/object:Gem::Version
229
- version: '3.10'
229
+ version: '3.11'
230
230
  type: :runtime
231
231
  prerelease: false
232
232
  version_requirements: !ruby/object:Gem::Requirement
233
233
  requirements:
234
234
  - - "~>"
235
235
  - !ruby/object:Gem::Version
236
- version: '3.10'
236
+ version: '3.11'
237
237
  - !ruby/object:Gem::Dependency
238
238
  name: typhoeus
239
239
  requirement: !ruby/object:Gem::Requirement
@@ -291,6 +291,7 @@ files:
291
291
  - lib/typesense/key.rb
292
292
  - lib/typesense/keys.rb
293
293
  - lib/typesense/metrics.rb
294
+ - lib/typesense/multi_search.rb
294
295
  - lib/typesense/operations.rb
295
296
  - lib/typesense/override.rb
296
297
  - lib/typesense/overrides.rb