Class: Lableb::SDK
- Inherits:
-
Object
- Object
- Lableb::SDK
- Defined in:
- lib/lableb_sdk.rb
Instance Method Summary collapse
-
#autocomplete(collection, params, handler = "suggest") ⇒ Object
Gets autcomplete suggestions.
-
#convertDates(doc) ⇒ Object
covert each date in a document to ISO8601 date string.
-
#delete(collection, id) ⇒ Object
Deletes a document from Lableb index by id.
-
#generateAutocompleteFeedbackUrl(collection, handler, suggestion, order, query) ⇒ Object
generates autocomplete feedback url for an autocomplete suggestion.
-
#generateRecommendationFeedbackUrl(collection, handler, target, order) ⇒ Object
generates recommendation hit feedback url, but the url needs to be completed with the source document params.
-
#generateSearchFeedbackUrl(collection, handler, document, order, query) ⇒ Object
generates a feedback url for a search result.
-
#getSessionID ⇒ Object
returns the custom session id generator if it exists else generates and returns a random string.
-
#index(collection, documents) ⇒ Object
Indexes documents to Lableb.
-
#initialize(projectName, searchToken, indexingToken) ⇒ SDK
constructor
A new instance of SDK.
-
#recommend(collection, params, handler = "recommend") ⇒ Object
Gets related posts to the specified one in passed params.
-
#search(collection, params, handler = "default") ⇒ Object
Searches documents on Lableb.
-
#setSessionIDGenerator(method) ⇒ Object
sets custom session id generator.
-
#toISODateString(date) ⇒ Object
convert a date object or a date string into ISO8601 date string.
Constructor Details
#initialize(projectName, searchToken, indexingToken) ⇒ SDK
Returns a new instance of SDK.
7 8 9 10 11 12 13 14 15 |
# File 'lib/lableb_sdk.rb', line 7 def initialize(projectName, searchToken, indexingToken) @projectName = projectName @searchToken = searchToken @indexingToken = indexingToken @apiURL = "https://api-bahuth.lableb.com/api/v1" @baseURL = "#{@apiURL}/#{@projectName}/collections" @client = Lableb::Client.new @customSessionID = nil end |
Instance Method Details
#autocomplete(collection, params, handler = "suggest") ⇒ Object
Gets autcomplete suggestions
86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
# File 'lib/lableb_sdk.rb', line 86 def autocomplete(collection, params, handler="suggest") params['token'] = @searchToken params['session_id'] = self.getSessionID() url = "#{@baseURL}/#{collection}/autocomplete/#{handler}" response = @client.getJSON(url, params) data = JSON.parse(response.body) code = response.code.to_i if code >= 400 return data['response'], code end suggestionsWithFeedbackUrl = data['response']['results'].map.with_index do |suggestion, idx| suggestion['feedbackUrl'] = self.generateAutocompleteFeedbackUrl(collection, handler, suggestion, idx + 1, params[:q]) suggestion end return { totalSuggestions: data['response']['found_documents'], suggestions: suggestionsWithFeedbackUrl } end |
#convertDates(doc) ⇒ Object
covert each date in a document to ISO8601 date string
194 195 196 197 198 199 200 201 202 203 |
# File 'lib/lableb_sdk.rb', line 194 def convertDates(doc) doc.each do | key, value | if key[-2..key.length] == "dt" doc[key] = self.toISODateString(value) elsif key[-3..key.length] == "dta" doc[key] = value.map{ | date | self.toISODateString(date) } end end doc end |
#delete(collection, id) ⇒ Object
Deletes a document from Lableb index by id
180 181 182 183 184 185 186 187 188 189 190 191 |
# File 'lib/lableb_sdk.rb', line 180 def delete(collection, id) url = "#{@baseURL}/#{collection}/documents/#{id}" response = @client.deleteJSON(url, { token: @indexingToken }) data = JSON.parse(response.body) code = response.code.to_i if code >= 400 return data['response'], code end return true, code end |
#generateAutocompleteFeedbackUrl(collection, handler, suggestion, order, query) ⇒ Object
generates autocomplete feedback url for an autocomplete suggestion
110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 |
# File 'lib/lableb_sdk.rb', line 110 def generateAutocompleteFeedbackUrl(collection, handler, suggestion, order, query) params = { session_id: self.getSessionID(), token: @searchToken, query: query, item_order: order } if suggestion['url'] params['url'] = suggestion['url'] end qs = @client.buildQueryString(params) url = "#{@baseURL}/#{collection}/autocomplete/#{handler}/feedback/hits?#{qs}" return url end |
#generateRecommendationFeedbackUrl(collection, handler, target, order) ⇒ Object
generates recommendation hit feedback url, but the url needs to be completed with the source document params
156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 |
# File 'lib/lableb_sdk.rb', line 156 def generateRecommendationFeedbackUrl(collection, handler, target, order) params = { session_id: self.getSessionID(), token: @searchToken, target_id: target['id'], item_order: order } if target['url'] params['target_url'] = target['url'] end if target['title'] params['target_title'] = target['title'] end qs = @client.buildQueryString(params) url = "#{@baseURL}/#{collection}/recommend/#{handler}/feedback/hits?#{qs}" return url end |
#generateSearchFeedbackUrl(collection, handler, document, order, query) ⇒ Object
generates a feedback url for a search result
69 70 71 72 73 74 75 76 77 78 79 80 |
# File 'lib/lableb_sdk.rb', line 69 def generateSearchFeedbackUrl(collection, handler, document, order, query) qs = @client.buildQueryString({ session_id: self.getSessionID(), token: @searchToken, query: query, item_id: document['id'], item_order: order, url: document['url'] }) url = "#{@baseURL}/#{collection}/search/#{handler}/feedback/hits?#{qs}" return url end |
#getSessionID ⇒ Object
returns the custom session id generator if it exists else generates and returns a random string
224 225 226 227 228 229 |
# File 'lib/lableb_sdk.rb', line 224 def getSessionID() if @customSessionID return @customSessionID.call() end return rand(7958661109946400884391936).to_s(36) end |
#index(collection, documents) ⇒ Object
Indexes documents to Lableb
20 21 22 23 24 25 26 27 28 29 30 31 |
# File 'lib/lableb_sdk.rb', line 20 def index(collection, documents) docs = nil if documents.kind_of? Array docs = documents.map{|document| self.convertDates(document)} else docs = [self.convertDates(documents)] end url = "#{@baseURL}/#{collection}/documents" response = @client.postJSON(url, docs, { token: @indexingToken }) indexed = response.code.to_i < 400 return indexed, response.code.to_i end |
#recommend(collection, params, handler = "recommend") ⇒ Object
Gets related posts to the specified one in passed params
131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 |
# File 'lib/lableb_sdk.rb', line 131 def recommend(collection, params, handler="recommend") params['token'] = @searchToken params['session_id'] = self.getSessionID() url = "#{@baseURL}/#{collection}/recommend/#{handler}" response = @client.getJSON(url, params) data = JSON.parse(response.body) code = response.code.to_i if code >= 400 return data['response'], code end recommendationsWithFeedbackUrl = data['response']['results'].map.with_index do |recommendation, idx| recommendation['feedbackUrl'] = self.generateRecommendationFeedbackUrl(collection, handler, recommendation, idx + 1) recommendation end return { totalDocuments: data['response']['found_documents'], documents: recommendationsWithFeedbackUrl } end |
#search(collection, params, handler = "default") ⇒ Object
Searches documents on Lableb
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
# File 'lib/lableb_sdk.rb', line 37 def search(collection, params, handler="default") params['token'] = @searchToken params['session_id'] = self.getSessionID() url = "#{@baseURL}/#{collection}/search/#{handler}" response = @client.getJSON(url, params) code = response.code.to_i data = JSON.parse(response.body) if code >= 400 return data['response'], code end facets = {} data['response']['facets'].map do |facet| if facet[0] != "count" facets[facet[0]] = facet[1]['buckets'] end end docuemntsWithFeedbackUrl = data['response']['results'].map.with_index do |document, idx| document['feedbackUrl'] = self.generateSearchFeedbackUrl(collection, handler, document, idx + 1, params[:q]) document end return { totalDocuments: data['response']['found_documents'], documents: docuemntsWithFeedbackUrl, facets: facets }, code end |
#setSessionIDGenerator(method) ⇒ Object
sets custom session id generator
218 219 220 |
# File 'lib/lableb_sdk.rb', line 218 def setSessionIDGenerator(method) @customSessionID = method end |
#toISODateString(date) ⇒ Object
convert a date object or a date string into ISO8601 date string
206 207 208 209 210 211 212 213 214 215 |
# File 'lib/lableb_sdk.rb', line 206 def toISODateString(date) str = "" if (date.kind_of? Date) str = date.to_s elsif date.is_a? String str = date end dt = DateTime.parse(str).iso8601.split('+')[0] + "Z" dt end |