typesense 0.2.0 → 0.4.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 +4 -4
- data/.gitignore +2 -0
- data/.rubocop.yml +1 -0
- data/.rubocop_todo.yml +36 -21
- data/README.md +7 -0
- data/codecov.yml +10 -0
- data/examples/aliases.rb +10 -32
- data/examples/client_initialization.rb +67 -0
- data/examples/collections_and_documents.rb +36 -59
- data/examples/overrides.rb +13 -34
- data/examples/search.rb +17 -44
- data/lib/typesense/alias.rb +5 -5
- data/lib/typesense/aliases.rb +5 -5
- data/lib/typesense/api_call.rb +183 -76
- data/lib/typesense/client.rb +4 -3
- data/lib/typesense/collection.rb +7 -7
- data/lib/typesense/collections.rb +6 -6
- data/lib/typesense/configuration.rb +35 -19
- data/lib/typesense/debug.rb +3 -3
- data/lib/typesense/document.rb +4 -4
- data/lib/typesense/documents.rb +11 -6
- data/lib/typesense/error.rb +6 -0
- data/lib/typesense/override.rb +4 -4
- data/lib/typesense/overrides.rb +5 -5
- data/lib/typesense/version.rb +1 -1
- data/typesense.gemspec +7 -6
- metadata +30 -14
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8c74454a48a4f170bbb99bb5e382199c8842e84ec5d2fbd6198106df89b45977
|
4
|
+
data.tar.gz: ca4772c87e84fabe0cef3af42bfb6e1bb889e305b402d9a2e2f83b10bdbe6d1b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d1ab99d6e52d15257c8e664d765b1debb063d151d364916b273cef1658537dadcd0241e76fffa5807be50b15c83891b76c2aaef7105c875be2c3bb70728b88e0
|
7
|
+
data.tar.gz: db20bce0c42a7713a3c5fa25ca1c7a17bb6724bd8949b5dc16202d11538b348d806d960f0def0712e118d856184da8650a3b12ba861037754e20e172856d38c0
|
data/.gitignore
CHANGED
data/.rubocop.yml
CHANGED
data/.rubocop_todo.yml
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# This configuration was generated by
|
2
2
|
# `rubocop --auto-gen-config`
|
3
|
-
# on
|
3
|
+
# on 2020-05-21 20:10:36 -0700 using RuboCop version 0.83.0.
|
4
4
|
# The point is for the user to remove these configuration records
|
5
5
|
# one by one as the offenses are removed from the code base.
|
6
6
|
# Note that changes in the inspected code, or installation of new
|
@@ -11,27 +11,44 @@ Lint/ShadowedException:
|
|
11
11
|
Exclude:
|
12
12
|
- 'lib/typesense/api_call.rb'
|
13
13
|
|
14
|
+
# Offense count: 2
|
15
|
+
# Configuration parameters: AllowComments.
|
16
|
+
Lint/SuppressedException:
|
17
|
+
Exclude:
|
18
|
+
- 'examples/collections_and_documents.rb'
|
19
|
+
- 'examples/search.rb'
|
20
|
+
|
14
21
|
# Offense count: 3
|
22
|
+
# Configuration parameters: IgnoredMethods.
|
15
23
|
Metrics/AbcSize:
|
16
|
-
Max:
|
24
|
+
Max: 43
|
17
25
|
|
18
26
|
# Offense count: 1
|
27
|
+
# Configuration parameters: CountComments.
|
28
|
+
Metrics/ClassLength:
|
29
|
+
Max: 184
|
30
|
+
|
31
|
+
# Offense count: 3
|
32
|
+
# Configuration parameters: IgnoredMethods.
|
19
33
|
Metrics/CyclomaticComplexity:
|
20
|
-
Max:
|
34
|
+
Max: 11
|
21
35
|
|
22
|
-
# Offense count:
|
23
|
-
# Configuration parameters: CountComments.
|
36
|
+
# Offense count: 5
|
37
|
+
# Configuration parameters: CountComments, ExcludedMethods.
|
24
38
|
Metrics/MethodLength:
|
25
|
-
Max:
|
39
|
+
Max: 29
|
26
40
|
|
27
|
-
# Offense count:
|
41
|
+
# Offense count: 3
|
42
|
+
# Configuration parameters: IgnoredMethods.
|
28
43
|
Metrics/PerceivedComplexity:
|
29
|
-
Max:
|
44
|
+
Max: 11
|
30
45
|
|
31
|
-
# Offense count:
|
46
|
+
# Offense count: 25
|
32
47
|
# Configuration parameters: Max.
|
33
48
|
RSpec/ExampleLength:
|
34
49
|
Exclude:
|
50
|
+
- 'spec/typesense/alias_spec.rb'
|
51
|
+
- 'spec/typesense/aliases_spec.rb'
|
35
52
|
- 'spec/typesense/api_call_spec.rb'
|
36
53
|
- 'spec/typesense/collection_spec.rb'
|
37
54
|
- 'spec/typesense/collections_spec.rb'
|
@@ -40,20 +57,19 @@ RSpec/ExampleLength:
|
|
40
57
|
- 'spec/typesense/documents_spec.rb'
|
41
58
|
- 'spec/typesense/override_spec.rb'
|
42
59
|
- 'spec/typesense/overrides_spec.rb'
|
43
|
-
- 'spec/typesense/alias_spec.rb'
|
44
|
-
- 'spec/typesense/aliases_spec.rb'
|
45
60
|
|
46
|
-
# Offense count:
|
47
|
-
# Configuration parameters: AggregateFailuresByDefault.
|
61
|
+
# Offense count: 10
|
48
62
|
RSpec/MultipleExpectations:
|
49
|
-
Max:
|
63
|
+
Max: 5
|
50
64
|
|
51
|
-
# Offense count:
|
65
|
+
# Offense count: 13
|
52
66
|
Style/Documentation:
|
53
67
|
Exclude:
|
54
68
|
- 'spec/**/*'
|
55
69
|
- 'test/**/*'
|
56
70
|
- 'lib/typesense.rb'
|
71
|
+
- 'lib/typesense/alias.rb'
|
72
|
+
- 'lib/typesense/aliases.rb'
|
57
73
|
- 'lib/typesense/api_call.rb'
|
58
74
|
- 'lib/typesense/client.rb'
|
59
75
|
- 'lib/typesense/collection.rb'
|
@@ -64,11 +80,10 @@ Style/Documentation:
|
|
64
80
|
- 'lib/typesense/documents.rb'
|
65
81
|
- 'lib/typesense/override.rb'
|
66
82
|
- 'lib/typesense/overrides.rb'
|
67
|
-
- 'lib/typesense/alias.rb'
|
68
|
-
- 'lib/typesense/aliases.rb'
|
69
83
|
|
70
|
-
# Offense count:
|
71
|
-
#
|
84
|
+
# Offense count: 157
|
85
|
+
# Cop supports --auto-correct.
|
86
|
+
# Configuration parameters: AutoCorrect, AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, IgnoredPatterns.
|
72
87
|
# URISchemes: http, https
|
73
|
-
|
74
|
-
Max:
|
88
|
+
Layout/LineLength:
|
89
|
+
Max: 312
|
data/README.md
CHANGED
@@ -29,6 +29,13 @@ Here are some examples that show you how the Ruby client works: [examples](examp
|
|
29
29
|
|
30
30
|
Tests are also a good place to know how the the library works internally: [spec](spec)
|
31
31
|
|
32
|
+
## Compatibility
|
33
|
+
|
34
|
+
| Typesense Server | typesense-ruby |
|
35
|
+
|------------------|----------------|
|
36
|
+
| <= v0.11 | <= v0.3.0 |
|
37
|
+
| \>= v0.12 | \>= v0.4.0 |
|
38
|
+
|
32
39
|
## Development
|
33
40
|
|
34
41
|
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
data/codecov.yml
ADDED
data/examples/aliases.rb
CHANGED
@@ -3,34 +3,12 @@
|
|
3
3
|
##
|
4
4
|
# These examples walk you through operations specifically related to aliases
|
5
5
|
# # This is a Typesense Premium feature (see: https://typesense.org/premium)
|
6
|
+
# Be sure to add `--license-key=<>` as a parameter, when starting a Typesense Premium server
|
6
7
|
|
7
|
-
require_relative '
|
8
|
-
require 'awesome_print'
|
9
|
-
|
10
|
-
AwesomePrint.defaults = {
|
11
|
-
indent: -2
|
12
|
-
}
|
13
|
-
|
14
|
-
##
|
15
|
-
# Setup
|
16
|
-
#
|
17
|
-
# Start the master
|
18
|
-
# $ docker run -p 8108:8108 -it -v/tmp/typesense-data-master/:/data -it typesense/typesense:0.8.0-rc1 --data-dir /data --api-key=abcd --listen-port 8108 --license-key=<>
|
19
|
-
#
|
20
|
-
|
21
|
-
##
|
22
|
-
# Create a client
|
23
|
-
typesense = Typesense::Client.new(
|
24
|
-
master_node: {
|
25
|
-
host: 'localhost',
|
26
|
-
port: 8108,
|
27
|
-
protocol: 'http',
|
28
|
-
api_key: 'abcd'
|
29
|
-
}
|
30
|
-
)
|
8
|
+
require_relative './client_initialization'
|
31
9
|
|
32
10
|
# Create a collection
|
33
|
-
create_response = typesense.collections.create(
|
11
|
+
create_response = @typesense.collections.create(
|
34
12
|
"name": 'books_january',
|
35
13
|
"fields": [
|
36
14
|
{ "name": 'title', "type": 'string' },
|
@@ -48,8 +26,8 @@ create_response = typesense.collections.create(
|
|
48
26
|
ap create_response
|
49
27
|
|
50
28
|
# Create or update an existing alias
|
51
|
-
create_alias_response = typesense.aliases.upsert('books',
|
52
|
-
|
29
|
+
create_alias_response = @typesense.aliases.upsert('books',
|
30
|
+
"collection_name": 'books_january')
|
53
31
|
ap create_alias_response
|
54
32
|
|
55
33
|
# Add a book using the alias name `books`
|
@@ -61,20 +39,20 @@ hunger_games_book = {
|
|
61
39
|
'ratings_count': 4_780_653
|
62
40
|
}
|
63
41
|
|
64
|
-
typesense.collections['books'].documents.create(hunger_games_book)
|
42
|
+
@typesense.collections['books'].documents.create(hunger_games_book)
|
65
43
|
|
66
44
|
# Search using the alias
|
67
|
-
ap typesense.collections['books'].documents.search(
|
45
|
+
ap @typesense.collections['books'].documents.search(
|
68
46
|
'q': 'hunger',
|
69
47
|
'query_by': 'title',
|
70
48
|
'sort_by': 'ratings_count:desc'
|
71
49
|
)
|
72
50
|
|
73
51
|
# List all aliases
|
74
|
-
ap typesense.aliases.retrieve
|
52
|
+
ap @typesense.aliases.retrieve
|
75
53
|
|
76
54
|
# Retrieve the configuration of a specific alias
|
77
|
-
ap typesense.aliases['books'].retrieve
|
55
|
+
ap @typesense.aliases['books'].retrieve
|
78
56
|
|
79
57
|
# Delete an alias
|
80
|
-
ap typesense.aliases['books'].delete
|
58
|
+
ap @typesense.aliases['books'].delete
|
@@ -0,0 +1,67 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative '../lib/typesense'
|
4
|
+
require 'awesome_print'
|
5
|
+
|
6
|
+
AwesomePrint.defaults = {
|
7
|
+
indent: -2
|
8
|
+
}
|
9
|
+
|
10
|
+
##
|
11
|
+
## Setup
|
12
|
+
#
|
13
|
+
### Option 1: Start a single-node cluster
|
14
|
+
# $ docker run -i -p 8108:8108 -v/tmp/typesense-server-data-1b/:/data -v`pwd`/typesense-server-peers:/typesense-server-peers typesense/typesense:0.12.rc9 --data-dir /data --api-key=xyz --search-only-api-key=abcd --listen-port 8108 --enable-cors
|
15
|
+
#
|
16
|
+
### Option 2: Start a 3-node cluster
|
17
|
+
#
|
18
|
+
# Create file in present working directory called typesense-server-peers (update IP Addresses appropriately to your local network):
|
19
|
+
# $ echo '172.17.0.2:8107:8108,172.17.0.3:7107:7108,172.17.0.4:9107:9108' > `pwd`/typesense-server-peers
|
20
|
+
#
|
21
|
+
# Start node 1:
|
22
|
+
# $ 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.12.rc9 --data-dir /data --api-key=xyz --search-only-api-key=abcd --listen-port 8108 --peering-port 8107 --enable-cors --nodes=/typesense-server-peers
|
23
|
+
#
|
24
|
+
# Start node 2:
|
25
|
+
# $ 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.12.rc9 --data-dir /data --api-key=xyz --search-only-api-key=abcd --listen-port 7108 --peering-port 7107 --enable-cors --nodes=/typesense-server-peers
|
26
|
+
#
|
27
|
+
# Start node 3:
|
28
|
+
# $ 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.12.rc9 --data-dir /data --api-key=xyz --search-only-api-key=abcd --listen-port 9108 --peering-port 9107 --enable-cors --nodes=/typesense-server-peers
|
29
|
+
#
|
30
|
+
# Note: Be sure to add `--license-key=<>` at the end when starting a Typesense Premium server
|
31
|
+
|
32
|
+
##
|
33
|
+
# Create a client
|
34
|
+
@typesense = Typesense::Client.new(
|
35
|
+
nodes: [
|
36
|
+
{
|
37
|
+
host: 'localhost',
|
38
|
+
port: 8108,
|
39
|
+
protocol: 'http'
|
40
|
+
},
|
41
|
+
# Uncomment if starting a 3-node cluster, using Option 2 under Setup instructions above
|
42
|
+
{
|
43
|
+
host: 'localhost',
|
44
|
+
port: 7108,
|
45
|
+
protocol: 'http'
|
46
|
+
},
|
47
|
+
{
|
48
|
+
host: 'localhost',
|
49
|
+
port: 9108,
|
50
|
+
protocol: 'http'
|
51
|
+
}
|
52
|
+
],
|
53
|
+
# If this optional key is specified, requests are always sent to this node first if it is healthy
|
54
|
+
# before falling back on the nodes mentioned in the `nodes` key. This is useful when running a distributed set of search clusters.
|
55
|
+
'nearest_node': {
|
56
|
+
'host': 'localhost',
|
57
|
+
'port': '8108',
|
58
|
+
'protocol': 'http'
|
59
|
+
},
|
60
|
+
api_key: 'xyz',
|
61
|
+
num_retries: 10,
|
62
|
+
healthcheck_interval_seconds: 1,
|
63
|
+
retry_interval_seconds: 0.01,
|
64
|
+
connection_timeout_seconds: 10,
|
65
|
+
logger: Logger.new(STDOUT),
|
66
|
+
log_level: Logger::DEBUG
|
67
|
+
)
|
@@ -4,41 +4,7 @@
|
|
4
4
|
# These examples walk you through all the operations you can do on a collection and a document
|
5
5
|
# Search is specifically covered in another file in the examples folder
|
6
6
|
|
7
|
-
require_relative '
|
8
|
-
require 'awesome_print'
|
9
|
-
|
10
|
-
AwesomePrint.defaults = {
|
11
|
-
indent: -2
|
12
|
-
}
|
13
|
-
|
14
|
-
##
|
15
|
-
# Setup
|
16
|
-
#
|
17
|
-
# Start the master
|
18
|
-
# $ docker run -p 8108:8108 -it -v/tmp/typesense-data-master/:/data -it typesense/typesense:0.8.0-rc1 --data-dir /data --api-key=abcd --listen-port 8108
|
19
|
-
#
|
20
|
-
# Start the read replica
|
21
|
-
# $ docker run -p 8109:8109 -it -v/tmp/typesense-data-read-replica-1/:/data -it typesense/typesense:0.8.0-rc1 --data-dir /data --api-key=wxyz --listen-port 8109 --master http://localhost:8108
|
22
|
-
|
23
|
-
##
|
24
|
-
# Create a client
|
25
|
-
typesense = Typesense::Client.new(
|
26
|
-
master_node: {
|
27
|
-
host: 'localhost',
|
28
|
-
port: 8108,
|
29
|
-
protocol: 'http',
|
30
|
-
api_key: 'abcd'
|
31
|
-
},
|
32
|
-
read_replica_nodes: [
|
33
|
-
{
|
34
|
-
host: 'localhost',
|
35
|
-
port: 8109,
|
36
|
-
protocol: 'http',
|
37
|
-
api_key: 'wxyz'
|
38
|
-
}
|
39
|
-
],
|
40
|
-
timeout_seconds: 10
|
41
|
-
)
|
7
|
+
require_relative './client_initialization'
|
42
8
|
|
43
9
|
##
|
44
10
|
# Create a collection
|
@@ -62,7 +28,13 @@ schema = {
|
|
62
28
|
'default_sorting_field' => 'num_employees'
|
63
29
|
}
|
64
30
|
|
65
|
-
collection
|
31
|
+
# Delete the collection if it already exists
|
32
|
+
begin
|
33
|
+
@typesense.collections['companies'].delete
|
34
|
+
rescue Typesense::Error::ObjectNotFound
|
35
|
+
end
|
36
|
+
|
37
|
+
collection = @typesense.collections.create(schema)
|
66
38
|
ap collection
|
67
39
|
|
68
40
|
# {
|
@@ -87,7 +59,8 @@ ap collection
|
|
87
59
|
|
88
60
|
##
|
89
61
|
# Retrieve a collection
|
90
|
-
collection
|
62
|
+
sleep 0.5 # Give Typesense cluster a few hundred ms to create the collection on all nodes, before reading it right after (eventually consistent)
|
63
|
+
collection = @typesense.collections['companies'].retrieve
|
91
64
|
ap collection
|
92
65
|
|
93
66
|
# {
|
@@ -115,7 +88,7 @@ ap collection
|
|
115
88
|
|
116
89
|
##
|
117
90
|
# Retrieve all collections
|
118
|
-
collections = typesense.collections.retrieve
|
91
|
+
collections = @typesense.collections.retrieve
|
119
92
|
ap collections
|
120
93
|
|
121
94
|
# [
|
@@ -146,7 +119,7 @@ ap collections
|
|
146
119
|
##
|
147
120
|
# Delete a collection
|
148
121
|
# Deletion returns the schema of the collection after deletion
|
149
|
-
collection = typesense.collections['companies'].delete
|
122
|
+
collection = @typesense.collections['companies'].delete
|
150
123
|
ap collection
|
151
124
|
|
152
125
|
# {
|
@@ -173,7 +146,7 @@ ap collection
|
|
173
146
|
# }
|
174
147
|
|
175
148
|
# Let's create the collection again for use in our remaining examples
|
176
|
-
typesense.collections.create(schema)
|
149
|
+
@typesense.collections.create(schema)
|
177
150
|
|
178
151
|
##
|
179
152
|
# Create (index) a document
|
@@ -184,7 +157,7 @@ document = {
|
|
184
157
|
'country' => 'USA'
|
185
158
|
}
|
186
159
|
|
187
|
-
document = typesense.collections['companies'].documents.create(document)
|
160
|
+
document = @typesense.collections['companies'].documents.create(document)
|
188
161
|
ap document
|
189
162
|
|
190
163
|
# {
|
@@ -196,7 +169,8 @@ ap document
|
|
196
169
|
|
197
170
|
##
|
198
171
|
# Retrieve a document
|
199
|
-
document
|
172
|
+
sleep 0.5 # Give Typesense cluster a few hundred ms to create the document on all nodes, before reading it right after (eventually consistent)
|
173
|
+
document = @typesense.collections['companies'].documents['124'].retrieve
|
200
174
|
ap document
|
201
175
|
|
202
176
|
# {
|
@@ -209,7 +183,7 @@ ap document
|
|
209
183
|
##
|
210
184
|
# Delete a document
|
211
185
|
# Deleting a document, returns the document after deletion
|
212
|
-
document = typesense.collections['companies'].documents['124'].delete
|
186
|
+
document = @typesense.collections['companies'].documents['124'].delete
|
213
187
|
ap document
|
214
188
|
|
215
189
|
# {
|
@@ -219,25 +193,28 @@ ap document
|
|
219
193
|
# "num_employees" => 5215
|
220
194
|
# }
|
221
195
|
|
222
|
-
# Let's create two documents again for use in our remaining examples
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
196
|
+
# Let's bulk create two documents again for use in our remaining examples
|
197
|
+
documents = [
|
198
|
+
{
|
199
|
+
'id' => '124',
|
200
|
+
'company_name' => 'Stark Industries',
|
201
|
+
'num_employees' => 5215,
|
202
|
+
'country' => 'USA'
|
203
|
+
},
|
204
|
+
{
|
205
|
+
'id' => '125',
|
206
|
+
'company_name' => 'Acme Corp',
|
207
|
+
'num_employees' => 1002,
|
208
|
+
'country' => 'France'
|
209
|
+
}
|
210
|
+
]
|
211
|
+
ap @typesense.collections['companies'].documents.create_many(documents)
|
236
212
|
|
237
213
|
##
|
238
214
|
# Export all documents in a collection in JSON Lines format
|
239
215
|
# We use JSON Lines format for performance reasons. You can choose to parse selected lines (elements in the array) as needed.
|
240
|
-
|
216
|
+
sleep 0.5 # Give Typesense cluster a few hundred ms to create the document on all nodes, before reading it right after (eventually consistent)
|
217
|
+
array_of_json_strings = @typesense.collections['companies'].documents.export
|
241
218
|
ap array_of_json_strings
|
242
219
|
|
243
220
|
# [
|
@@ -248,4 +225,4 @@ ap array_of_json_strings
|
|
248
225
|
##
|
249
226
|
# Cleanup
|
250
227
|
# Drop the collection
|
251
|
-
typesense.collections['companies'].delete
|
228
|
+
@typesense.collections['companies'].delete
|