Skip to content

Commit 735ab69

Browse files
authored
Merge pull request #25 from typesense/ts-server-0.19.0-support
Typesense Server 0.19.0 support
2 parents dc4f09c + fe7d645 commit 735ab69

9 files changed

Lines changed: 74 additions & 64 deletions

File tree

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ Tests are also a good place to know how the the library works internally: [spec]
3333

3434
| Typesense Server | typesense-ruby |
3535
|------------------|----------------|
36+
| \>= v0.19.0 | \>= v0.11.0 |
3637
| \>= v0.18.0 | \>= v0.10.0 |
3738
| \>= v0.17.0 | \>= v0.9.0 |
3839
| \>= v0.16.0 | \>= v0.8.0 |

examples/client_initialization.rb

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,21 +12,21 @@
1212
## Setup
1313
#
1414
### 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
1616
#
1717
### Option 2: Start a 3-node cluster
1818
#
1919
# Create file in present working directory called typesense-server-peers (update IP Addresses appropriately to your local network):
2020
# $ echo '172.17.0.2:8107:8108,172.17.0.3:7107:7108,172.17.0.4:9107:9108' > `pwd`/typesense-server-peers
2121
#
2222
# 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
2424
#
2525
# 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
2727
#
2828
# 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
3030
#
3131
# Note: Be sure to add `--license-key=<>` at the end when starting a Typesense Premium server
3232

examples/search.rb

Lines changed: 22 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -73,37 +73,6 @@
7373
)
7474
ap results
7575

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-
10776
##
10877
# Search for more documents
10978
results = @typesense.collections['companies'].documents.search(
@@ -114,25 +83,28 @@
11483
)
11584
ap results
11685

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
136108

137109
##
138110
# Search for more documents
@@ -142,13 +114,6 @@
142114
)
143115
ap results
144116

145-
# {
146-
# "found" => 0,
147-
# "hits" => [],
148-
# "page" => 1,
149-
# "search_time_ms" => 0
150-
# }
151-
152117
##
153118
# Cleanup
154119
# Drop the collection

lib/typesense.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ module Typesense
1919
require_relative 'typesense/alias'
2020
require_relative 'typesense/keys'
2121
require_relative 'typesense/key'
22+
require_relative 'typesense/multi_search'
2223
require_relative 'typesense/debug'
2324
require_relative 'typesense/health'
2425
require_relative 'typesense/metrics'

lib/typesense/client.rb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,16 @@
22

33
module Typesense
44
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
67

78
def initialize(options = {})
89
@configuration = Configuration.new(options)
910
@api_call = ApiCall.new(@configuration)
1011
@collections = Collections.new(@api_call)
1112
@aliases = Aliases.new(@api_call)
1213
@keys = Keys.new(@api_call)
14+
@multi_search = MultiSearch.new(@api_call)
1315
@debug = Debug.new(@api_call)
1416
@health = Health.new(@api_call)
1517
@metrics = Metrics.new(@api_call)

lib/typesense/multi_search.rb

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

lib/typesense/version.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# frozen_string_literal: true
22

33
module Typesense
4-
VERSION = '0.10.0'
4+
VERSION = '0.11.0'
55
end
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
# frozen_string_literal: true
2+
3+
require_relative '../spec_helper'
4+
require_relative 'shared_configuration_context'
5+
6+
describe Typesense::MultiSearch do
7+
include_context 'with Typesense configuration'
8+
9+
describe '#perform' do
10+
it 'does a multi-search request' do
11+
stub_request(:post, Typesense::ApiCall.new(typesense.configuration).send(:uri_for, '/multi_search', typesense.configuration.nodes[0]))
12+
.with(
13+
headers: {
14+
'Content-Type' => 'application/json',
15+
'X-Typesense-Api-Key' => typesense.configuration.api_key
16+
},
17+
query: hash_including({ param: 'a' }),
18+
body: JSON.dump({ searches: [] })
19+
).to_return(status: 200, body: '{}', headers: { 'Content-Type': 'application/json' })
20+
21+
result = typesense.multi_search.perform({ searches: [] }, { param: 'a' })
22+
23+
expect(result).to eq({})
24+
end
25+
end
26+
end

typesense.gemspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,6 @@ Gem::Specification.new do |spec|
4040
spec.add_development_dependency 'timecop', '~> 0.9'
4141
spec.add_development_dependency 'webmock', '~> 3.8'
4242

43-
spec.add_dependency 'oj', '~> 3.10'
43+
spec.add_dependency 'oj', '~> 3.11'
4444
spec.add_dependency 'typhoeus', '~> 1.4'
4545
end

0 commit comments

Comments
 (0)