Skip to content

Commit e43b61c

Browse files
Merge pull request #10 from andreibondarev/explore-endpoint
Explore endpoint
2 parents 597ade0 + feb4a85 commit e43b61c

File tree

14 files changed

+238
-165
lines changed

14 files changed

+238
-165
lines changed

README.md

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,18 @@ response.data
6767
client.schema.delete(class_name: 'Question')
6868

6969
# Update settings of an existing schema class.
70+
# Does not support modifying existing properties.
7071
client.schema.update(class_name: 'Question')
7172

73+
# Adding a new property
74+
client.schema.add_property(
75+
class_name: 'Question',
76+
property: {
77+
"dataType": ["boolean"],
78+
"name": "homepage"
79+
}
80+
)
81+
7282
# Inspect the shards of a class
7383
client.schema.shards(class_name: 'Question')
7484
```
@@ -119,7 +129,7 @@ client.objects.update(
119129
)
120130

121131
# Batch create objects
122-
response = client.objects.batch_create(objects: [
132+
client.objects.batch_create(objects: [
123133
{
124134
class: "Question",
125135
properties: {
@@ -136,7 +146,6 @@ response = client.objects.batch_create(objects: [
136146
}
137147
}
138148
])
139-
response.data
140149

141150
# Batch delete objects
142151
client.objects.batch_delete(
@@ -193,7 +202,7 @@ client.query.get class_name: 'Question', fields: 'answer question category _addi
193202
```ruby
194203
client.query.aggs(
195204
class_name: "Question",
196-
fields: 'meta { count }'
205+
fields: 'meta { count }',
197206
group_by: ["category"],
198207
object_limit: "10",
199208
near_text: "{ concepts: [\"knowledge\"] }"

lib/weaviate.rb

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,4 @@ module Weaviate
1515
autoload :Health, "weaviate/health"
1616
autoload :Classifications, "weaviate/classifications"
1717
autoload :Backups, "weaviate/backups"
18-
19-
module Response
20-
autoload :Base, "weaviate/response/base"
21-
autoload :Object, "weaviate/response/object"
22-
autoload :Class, "weaviate/response/class"
23-
autoload :Collection, "weaviate/response/collection"
24-
end
2518
end

lib/weaviate/objects.rb

Lines changed: 92 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -23,63 +23,81 @@ def list(
2323
req.params["sort"] = sort unless sort.nil?
2424
req.params["order"] = order unless order.nil?
2525
end
26-
Response::Collection.from_response(response.body, key: "objects", type: Response::Object)
26+
27+
response.body
2728
end
2829

2930
# Create a new data object. The provided meta-data and schema values are validated.
3031
def create(
3132
class_name:,
3233
properties:,
34+
consistency_level: nil,
3335
id: nil,
3436
vector: nil
3537
)
38+
validate_consistency_level!(consistency_level) unless consistency_level.nil?
39+
3640
response = client.connection.post(PATH) do |req|
41+
unless consistency_level.nil?
42+
req.params = {
43+
consistency_level: consistency_level.to_s.upcase
44+
}
45+
end
46+
3747
req.body = {}
3848
req.body["class"] = class_name
3949
req.body["properties"] = properties
4050
req.body["id"] = id unless id.nil?
4151
req.body["vector"] = vector unless vector.nil?
4252
end
4353

44-
if response.success?
45-
Weaviate::Response::Object.new(response.body)
46-
else
47-
response.body
48-
end
54+
response.body
4955
end
5056

5157
# Batch create objects
52-
def batch_create(objects:)
58+
def batch_create(
59+
objects:,
60+
consistency_level: nil
61+
)
62+
validate_consistency_level!(consistency_level) unless consistency_level.nil?
63+
5364
response = client.connection.post("batch/#{PATH}") do |req|
65+
req.params["consistency_level"] = consistency_level.to_s.upcase unless consistency_level.nil?
5466
req.body = {objects: objects}
5567
end
5668

57-
if response.success?
58-
Response::Collection.from_response(response.body, type: Response::Object)
59-
end
69+
response.body
6070
end
6171

6272
# Get a single data object.
6373
def get(
6474
class_name:,
6575
id:,
66-
include: nil
76+
include: nil,
77+
consistency_level: nil
6778
)
68-
# TODO: validate `include` param values
69-
# include | query | param | string | Include additional information, such as classification info. Allowed values include: classification, vector.
79+
validate_consistency_level!(consistency_level) unless consistency_level.nil?
7080

7181
response = client.connection.get("#{PATH}/#{class_name}/#{id}") do |req|
82+
req.params["consistency_level"] = consistency_level.to_s.upcase unless consistency_level.nil?
7283
req.params["include"] = include unless include.nil?
7384
end
7485

75-
if response.success?
76-
Weaviate::Response::Object.new(response.body)
77-
end
86+
response.body
7887
end
7988

8089
# Check if a data object exists
81-
def exists?(class_name:, id:)
82-
response = client.connection.head("#{PATH}/#{class_name}/#{id}")
90+
def exists?(
91+
class_name:,
92+
id:,
93+
consistency_level: nil
94+
)
95+
validate_consistency_level!(consistency_level) unless consistency_level.nil?
96+
97+
response = client.connection.head("#{PATH}/#{class_name}/#{id}") do |req|
98+
req.params["consistency_level"] = consistency_level.to_s.upcase unless consistency_level.nil?
99+
end
100+
83101
response.status == 204
84102
end
85103

@@ -88,24 +106,41 @@ def update(
88106
class_name:,
89107
id:,
90108
properties:,
91-
vector: nil
109+
vector: nil,
110+
consistency_level: nil
92111
)
112+
validate_consistency_level!(consistency_level) unless consistency_level.nil?
113+
93114
response = client.connection.put("#{PATH}/#{class_name}/#{id}") do |req|
115+
req.params["consistency_level"] = consistency_level.to_s.upcase unless consistency_level.nil?
116+
94117
req.body = {}
95118
req.body["id"] = id
96119
req.body["class"] = class_name
97120
req.body["properties"] = properties
98121
req.body["vector"] = vector unless vector.nil?
99122
end
100-
if response.success?
101-
Weaviate::Response::Object.new(response.body)
102-
end
123+
124+
response.body
103125
end
104126

105127
# Delete an individual data object from Weaviate.
106-
def delete(class_name:, id:)
107-
response = client.connection.delete("#{PATH}/#{class_name}/#{id}")
108-
response.success? && response.body.empty?
128+
def delete(
129+
class_name:,
130+
id:,
131+
consistency_level: nil
132+
)
133+
validate_consistency_level!(consistency_level) unless consistency_level.nil?
134+
135+
response = client.connection.delete("#{PATH}/#{class_name}/#{id}") do |req|
136+
req.params["consistency_level"] = consistency_level.to_s.upcase unless consistency_level.nil?
137+
end
138+
139+
if response.success?
140+
response.body.empty?
141+
else
142+
response.body
143+
end
109144
end
110145

111146
def batch_delete(
@@ -116,7 +151,12 @@ def batch_delete(
116151
dry_run: nil
117152
)
118153
path = "batch/#{PATH}"
119-
path << "?consistency_level=#{consistency_level}" unless consistency_level.nil?
154+
155+
unless consistency_level.nil?
156+
validate_consistency_level!(consistency_level)
157+
158+
path << "?consistency_level=#{consistency_level.to_s.upcase}"
159+
end
120160

121161
response = client.connection.delete(path) do |req|
122162
req.body = {
@@ -133,7 +173,31 @@ def batch_delete(
133173
end
134174

135175
# Validate a data object
136-
# def validate
137-
# end
176+
def validate(
177+
class_name:,
178+
properties:,
179+
id: nil
180+
)
181+
response = client.connection.post("#{PATH}/validate") do |req|
182+
req.body = {}
183+
req.body["class"] = class_name
184+
req.body["properties"] = properties
185+
req.body["id"] = id unless id.nil?
186+
end
187+
188+
if response.success?
189+
response.body.empty?
190+
else
191+
response.body
192+
end
193+
end
194+
195+
private
196+
197+
def validate_consistency_level!(consistency_level)
198+
unless %w[ONE QUORUM ALL].include?(consistency_level.to_s.upcase)
199+
raise ArgumentError, 'consistency_level must be either "ONE" or "QUORUM" OR "ALL"'
200+
end
201+
end
138202
end
139203
end

lib/weaviate/query.rb

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ def get(
2828
limit: limit,
2929
offset: offset
3030
)
31-
response.data.get.send(class_name.downcase)
31+
response.original_hash.dig("data", "Get", class_name)
3232
rescue Graphlient::Errors::ExecutionError => error
3333
raise Weaviate::Error.new(error.response.data.get.errors.messages.to_h)
3434
end
@@ -53,7 +53,7 @@ def aggs(
5353
group_by: group_by,
5454
object_limit: object_limit
5555
)
56-
response.data.aggregate.send(class_name.downcase)
56+
response.original_hash.dig("data", "Aggregate", class_name)
5757
rescue Graphlient::Errors::ExecutionError => error
5858
raise Weaviate::Error.new(error.response.data.aggregate.errors.messages.to_h)
5959
end
@@ -80,7 +80,7 @@ def explore(
8080
limit: limit,
8181
offset: offset
8282
)
83-
response.data.explore
83+
response.original_hash.dig("data", "Explore")
8484
rescue Graphlient::Errors::ExecutionError => error
8585
raise Weaviate::Error.new(error.to_s)
8686
end

lib/weaviate/response/base.rb

Lines changed: 0 additions & 23 deletions
This file was deleted.

lib/weaviate/response/class.rb

Lines changed: 0 additions & 8 deletions
This file was deleted.

lib/weaviate/response/collection.rb

Lines changed: 0 additions & 22 deletions
This file was deleted.

lib/weaviate/response/object.rb

Lines changed: 0 additions & 8 deletions
This file was deleted.

0 commit comments

Comments
 (0)