class Lableb::SDK
Public Class Methods
# 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
Public Instance Methods
Gets autcomplete suggestions @param collection {String} - collection name in Lableb
index @param params {Hash} - query string parameters @param handler {String} - autocomplete handler name
# 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
covert each date in a document to ISO8601 date string
# 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
Deletes a document from Lableb
index by id @param collection {String} - collection name in Lableb
index @param id {String} - id of the document to be deleted
# 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
generates autocomplete feedback url for an autocomplete suggestion
# 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
generates recommendation hit feedback url, but the url needs to be completed with the source document params
# 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
generates a feedback url for a search result
# 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
returns the custom session id generator if it exists else generates and returns a random string
# File lib/lableb_sdk.rb, line 224 def getSessionID() if @customSessionID return @customSessionID.call() end return rand(7958661109946400884391936).to_s(36) end
Indexes documents to Lableb
@param collection {String} - collection name in Lableb
index @param document {Hash | Array} - docuemnts to index
# 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
Gets related posts to the specified one in passed params @param collection {String} - collection name in Lableb
index @param params {Hash} - query string parameters @param handler {String} - recommendation handler name
# 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
Searches documents on Lableb
@param collection {String} - collection name in Lableb
index @param params {Hash} - query string parameters @param handler {String} - search handler name
# 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
sets custom session id generator
# File lib/lableb_sdk.rb, line 218 def setSessionIDGenerator(method) @customSessionID = method end
convert a date object or a date string into ISO8601 date string
# 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