Class: Algolia::Index
- Inherits:
-
Object
- Object
- Algolia::Index
- Defined in:
- lib/algolia/index.rb
Instance Attribute Summary collapse
-
#name ⇒ Object
Returns the value of attribute name.
Instance Method Summary collapse
-
#add_object(obj, objectID = nil) ⇒ Object
Add an object in this index.
-
#add_object!(obj, objectID = nil) ⇒ Object
Add an object in this index and wait end of indexing.
-
#add_objects(objs) ⇒ Object
Add several objects in this index.
-
#add_objects!(obj) ⇒ Object
Add several objects in this index and wait end of indexing.
-
#add_user_key(acls, validity = 0) ⇒ Object
Create a new user key.
-
#clear ⇒ Object
Delete the index content.
-
#clear! ⇒ Object
Delete the index content and wait end of indexing.
-
#delete ⇒ Object
Delete an index.
-
#delete_object(objectID) ⇒ Object
Delete an object from the index.
-
#delete_object!(objectID) ⇒ Object
Delete an object from the index and wait end of indexing.
-
#delete_user_key(key) ⇒ Object
Delete an existing user key.
-
#get_object(objectID, attributesToRetrieve = nil) ⇒ Object
Get an object from this index.
-
#get_settings ⇒ Object
Get settings of this index.
-
#get_user_key(key) ⇒ Object
Get ACL of a user key.
-
#initialize(name) ⇒ Index
constructor
A new instance of Index.
-
#list_user_keys ⇒ Object
List all existing user keys with their associated ACLs.
-
#partial_update_object(obj) ⇒ Object
Update partially an object (only update attributes passed in argument).
-
#partial_update_object!(obj) ⇒ Object
Update partially an object (only update attributes passed in argument) and wait indexing.
-
#partial_update_objects(objs) ⇒ Object
Partially Override the content of several objects.
-
#partial_update_objects!(objs) ⇒ Object
Partially Override the content of several objects.
-
#save_object(obj) ⇒ Object
Override the content of object.
-
#save_object!(obj) ⇒ Object
Override the content of object and wait indexing.
-
#save_objects(objs) ⇒ Object
Override the content of several objects.
-
#save_objects!(objs) ⇒ Object
Override the content of several objects and wait indexing.
-
#search(query, params = {}) ⇒ Object
Search inside the index.
-
#set_settings(new_settings) ⇒ Object
Set settings for this index.
-
#wait_task(taskID, timeBeforeRetry = 100) ⇒ Object
Wait the publication of a task on the server.
Constructor Details
#initialize(name) ⇒ Index
Returns a new instance of Index.
9 10 11 |
# File 'lib/algolia/index.rb', line 9 def initialize(name) self.name = name end |
Instance Attribute Details
#name ⇒ Object
Returns the value of attribute name.
7 8 9 |
# File 'lib/algolia/index.rb', line 7 def name @name end |
Instance Method Details
#add_object(obj, objectID = nil) ⇒ Object
Add an object in this index
26 27 28 29 30 31 32 33 |
# File 'lib/algolia/index.rb', line 26 def add_object(obj, objectID = nil) raise ArgumentError.new("argument must not be an array") if obj.is_a?(Array) if objectID == nil Algolia.client.post(Protocol.index_uri(name), obj.to_json) else Algolia.client.put(Protocol.object_uri(name, objectID), obj.to_json) end end |
#add_object!(obj, objectID = nil) ⇒ Object
Add an object in this index and wait end of indexing
41 42 43 44 45 |
# File 'lib/algolia/index.rb', line 41 def add_object!(obj, objectID = nil) res = add_object(obj, objectID) wait_task(res["taskID"]) return res end |
#add_objects(objs) ⇒ Object
Add several objects in this index
53 54 55 56 57 58 59 60 61 62 |
# File 'lib/algolia/index.rb', line 53 def add_objects(objs) raise ArgumentError.new("argument must be an array of object") if !objs.is_a?(Array) requests = [] objs.each do |obj| raise ArgumentError.new("argument must be an array of object") if obj.is_a?(Array) requests.push({"action" => "addObject", "body" => obj}) end request = {"requests" => requests}; Algolia.client.post(Protocol.batch_uri(name), request.to_json) end |
#add_objects!(obj) ⇒ Object
Add several objects in this index and wait end of indexing
70 71 72 73 74 |
# File 'lib/algolia/index.rb', line 70 def add_objects!(obj) res = add_objects(obj) wait_task(res["taskID"]) return res end |
#add_user_key(acls, validity = 0) ⇒ Object
Create a new user key
@param acls the list of ACL for this key. Defined by an array of strings that
can contains the following values:
- search: allow to search (https and http)
- addObject: allows to add a new object in the index (https only)
- updateObject : allows to change content of an existing object (https only)
- deleteObject : allows to delete an existing object (https only)
- deleteIndex : allows to delete index content (https only)
- settings : allows to get index settings (https only)
- editSettings : allows to change index settings (https only)
@param validity the number of seconds after which the key will be automatically removed (0 means no time limit for this key)
372 373 374 |
# File 'lib/algolia/index.rb', line 372 def add_user_key(acls, validity = 0) Algolia.client.post(Protocol.index_keys_uri(name), {"acl" => acls, "validity" => validity}.to_json) end |
#clear ⇒ Object
Delete the index content
282 283 284 |
# File 'lib/algolia/index.rb', line 282 def clear Algolia.client.post(Protocol.clear_uri(name), nil) end |
#clear! ⇒ Object
Delete the index content and wait end of indexing
289 290 291 292 293 |
# File 'lib/algolia/index.rb', line 289 def clear! res = clear wait_task(res["taskID"]) return res end |
#delete ⇒ Object
Delete an index
return an object of the form array(:deletedAt => “2013-01-18T15:33:13.556Z”)
16 17 18 |
# File 'lib/algolia/index.rb', line 16 def delete Algolia.client.delete(Protocol.index_uri(name)) end |
#delete_object(objectID) ⇒ Object
Delete an object from the index
260 261 262 263 264 265 |
# File 'lib/algolia/index.rb', line 260 def delete_object(objectID) if (objectID == nil || objectID.length == 0) then raise AlgoliaProtocolError.new(0, "objectID is required") end Algolia.client.delete(Protocol.object_uri(name, objectID)) end |
#delete_object!(objectID) ⇒ Object
Delete an object from the index and wait end of indexing
272 273 274 275 276 |
# File 'lib/algolia/index.rb', line 272 def delete_object!(objectID) res = delete_object(objectID) wait_task(res["taskID"]) return res end |
#delete_user_key(key) ⇒ Object
Delete an existing user key
377 378 379 |
# File 'lib/algolia/index.rb', line 377 def delete_user_key(key) Algolia.client.delete(Protocol.index_key_uri(name, key)) end |
#get_object(objectID, attributesToRetrieve = nil) ⇒ Object
Get an object from this index
143 144 145 146 147 148 149 |
# File 'lib/algolia/index.rb', line 143 def get_object(objectID, attributesToRetrieve = nil) if attributesToRetrieve == nil Algolia.client.get(Protocol.object_uri(name, objectID, nil)) else Algolia.client.get(Protocol.object_uri(name, objectID, {"attributes" => attributesToRetrieve})) end end |
#get_settings ⇒ Object
Get settings of this index
344 345 346 |
# File 'lib/algolia/index.rb', line 344 def get_settings Algolia.client.get(Protocol.settings_uri(name)) end |
#get_user_key(key) ⇒ Object
Get ACL of a user key
354 355 356 |
# File 'lib/algolia/index.rb', line 354 def get_user_key(key) Algolia.client.get(Protocol.index_key_uri(name, key)) end |
#list_user_keys ⇒ Object
List all existing user keys with their associated ACLs
349 350 351 |
# File 'lib/algolia/index.rb', line 349 def list_user_keys Algolia.client.get(Protocol.index_keys_uri(name)) end |
#partial_update_object(obj) ⇒ Object
Update partially an object (only update attributes passed in argument)
214 215 216 |
# File 'lib/algolia/index.rb', line 214 def partial_update_object(obj) Algolia.client.post(Protocol.partial_object_uri(name, obj["objectID"]), obj.to_json) end |
#partial_update_object!(obj) ⇒ Object
Update partially an object (only update attributes passed in argument) and wait indexing
249 250 251 252 253 |
# File 'lib/algolia/index.rb', line 249 def partial_update_object!(obj) res = partial_update_object(obj) wait_task(res["taskID"]) return res end |
#partial_update_objects(objs) ⇒ Object
Partially Override the content of several objects
223 224 225 226 227 228 229 230 |
# File 'lib/algolia/index.rb', line 223 def partial_update_objects(objs) requests = [] objs.each do |obj| requests.push({"action" => "partialUpdateObject", "objectID" => obj["objectID"], "body" => obj}) end request = {"requests" => requests}; Algolia.client.post(Protocol.batch_uri(name), request.to_json) end |
#partial_update_objects!(objs) ⇒ Object
Partially Override the content of several objects
237 238 239 240 241 |
# File 'lib/algolia/index.rb', line 237 def partial_update_objects!(objs) res = partial_update_objects(obj) wait_task(res["taskID"]) return res end |
#save_object(obj) ⇒ Object
Override the content of object
171 172 173 |
# File 'lib/algolia/index.rb', line 171 def save_object(obj) Algolia.client.put(Protocol.object_uri(name, obj["objectID"]), obj.to_json) end |
#save_object!(obj) ⇒ Object
Override the content of object and wait indexing
179 180 181 182 183 |
# File 'lib/algolia/index.rb', line 179 def save_object!(obj) res = save_object(obj) wait_task(res["taskID"]) return res end |
#save_objects(objs) ⇒ Object
Override the content of several objects
189 190 191 192 193 194 195 196 |
# File 'lib/algolia/index.rb', line 189 def save_objects(objs) requests = [] objs.each do |obj| requests.push({"action" => "updateObject", "objectID" => obj["objectID"], "body" => obj}) end request = {"requests" => requests}; Algolia.client.post(Protocol.batch_uri(name), request.to_json) end |
#save_objects!(objs) ⇒ Object
Override the content of several objects and wait indexing
202 203 204 205 206 |
# File 'lib/algolia/index.rb', line 202 def save_objects!(objs) res = save_objects(objs) wait_task(res["taskID"]) return res end |
#search(query, params = {}) ⇒ Object
Search inside the index
-
page: (integer) Pagination parameter used to select the page to retrieve.
Page is zero-based and defaults to 0. Thus, to retrieve the 10th page you need to set page=9
-
hitsPerPage: (integer) Pagination parameter used to select the number of hits per page. Defaults to 20.
-
attributesToRetrieve: a string that contains the list of object attributes you want to retrieve (let you minimize the answer size). Attributes are separated with a comma (for example “name,address”). You can also use a string array encoding (for example [“name”,“address”]). By default, all attributes are retrieved. You can also use ‘*’ to retrieve all values when an attributesToRetrieve setting is specified for your index.
-
attributesToHighlight: a string that contains the list of attributes you want to highlight according to the query. Attributes are separated by a comma. You can also use a string array encoding (for example [“name”,“address”]). If an attribute has no match for the query, the raw value is returned. By default all indexed text attributes are highlighted. You can use ‘*` if you want to highlight all textual attributes. Numerical attributes are not highlighted. A matchLevel is returned for each highlighted attribute and can contain:
- full: if all the query terms were found in the attribute, - partial: if only some of the query terms were found, - none: if none of the query terms were found.
-
attributesToSnippet: a string that contains the list of attributes to snippet alongside the number of words to return (syntax is ‘attributeName:nbWords`).
Attributes are separated by a comma (Example: attributesToSnippet=name:10,content:10). You can also use a string array encoding (Example: attributesToSnippet: ["name:10","content:10"]). By default no snippet is computed.
-
minWordSizefor1Typo: the minimum number of characters in a query word to accept one typo in this word. Defaults to 3.
-
minWordSizefor2Typos: the minimum number of characters in a query word to accept two typos in this word. Defaults to 7.
-
getRankingInfo: if set to 1, the result hits will contain ranking information in _rankingInfo attribute.
-
aroundLatLng: search for entries around a given latitude/longitude (specified as two floats separated by a comma). For example aroundLatLng=47.316669,5.016670). You can specify the maximum distance in meters with the aroundRadius parameter (in meters) and the precision for ranking with aroundPrecision (for example if you set aroundPrecision=100, two objects that are distant of less than 100m will be considered as identical for “geo” ranking parameter). At indexing, you should specify geoloc of an object with the _geoloc attribute (in the form “lng”:2.348800})
-
insideBoundingBox: search entries inside a given area defined by the two extreme points of a rectangle (defined by 4 floats: p1Lat,p1Lng,p2Lat,p2Lng). For example insideBoundingBox=47.3165,4.9665,47.3424,5.0201). At indexing, you should specify geoloc of an object with the _geoloc attribute (in the form “lng”:2.348800})
-
numericFilters: a string that contains the list of numeric filters you want to apply separated by a comma. The syntax of one filter is ‘attributeName` followed by `operand` followed by `value`. Supported operands are `<`, `<=`, `=`, `>` and `>=`. You can have multiple conditions on one attribute like for example numericFilters=price>100,price<1000. You can also use a string array encoding (for example numericFilters: [“price>100”,“price<1000”]).
-
tagFilters: filter the query by a set of tags. You can AND tags by separating them by commas. To OR tags, you must add parentheses. For example, tags=tag1,(tag2,tag3) means tag1 AND (tag2 OR tag3). You can also use a string array encoding, for example tagFilters: [“tag1”,] means tag1 AND (tag2 OR tag3). At indexing, tags should be added in the _tags** attribute of objects (for example href=""tag1","tag2"">_tags”:).
-
facetFilters: filter the query by a list of facets. Facets are separated by commas and each facet is encoded as ‘attributeName:value`. For example: `facetFilters=category:Book,author:John%20Doe`. You can also use a string array encoding (for example `[“category:Book”,“author:John%20Doe”]`).
-
facets: List of object attributes that you want to use for faceting. Attributes are separated with a comma (for example ‘“category,author”` ). You can also use a JSON string array encoding (for example [“category”,“author”]). Only attributes that have been added in attributesForFaceting index setting can be used in this parameter. You can also use `*` to perform faceting on all attributes specified in attributesForFaceting.
-
queryType: select how the query words are interpreted, it can be one of the following value:
- prefixAll: all query words are interpreted as prefixes, - prefixLast: only the last word is interpreted as a prefix (default behavior), - prefixNone: no query word is interpreted as a prefix. This option is not recommended.
-
optionalWords: a string that contains the list of words that should be considered as optional when found in the query. The list of words is comma separated. #
132 133 134 135 |
# File 'lib/algolia/index.rb', line 132 def search(query, params = {}) encoded_params = Hash[params.map { |k,v| [k.to_s, v.is_a?(Array) ? v.to_json : v] }] Algolia.client.get(Protocol.search_uri(name, query, encoded_params)) end |
#set_settings(new_settings) ⇒ Object
Set settings for this index
-
minWordSizefor1Typo: (integer) the minimum number of characters to accept one typo (default = 3).
-
minWordSizefor2Typos: (integer) the minimum number of characters to accept two typos (default = 7).
-
hitsPerPage: (integer) the number of hits per page (default = 10).
-
attributesToRetrieve: (array of strings) default list of attributes to retrieve in objects. If set to null, all attributes are retrieved.
-
attributesToHighlight: (array of strings) default list of attributes to highlight. If set to null, all indexed attributes are highlighted.
-
attributesToSnippet**: (array of strings) default list of attributes to snippet alongside the number of words to return (syntax is attributeName:nbWords). By default no snippet is computed. If set to null, no snippet is computed.
-
attributesToIndex: (array of strings) the list of fields you want to index. If set to null, all textual and numerical attributes of your objects are indexed, but you should update it to get optimal results. This parameter has two important uses:
- Limit the attributes to index: For example if you store a binary image in base64, you want to store it and be able to retrieve it but you don't want to search in the base64 string. - Control part of the ranking*: (see the ranking parameter for full explanation) Matches in attributes at the beginning of the list will be considered more important than matches in attributes further down the list. In one attribute, matching text at the beginning of the attribute will be considered more important than text after, you can disable this behavior if you add your attribute inside `unordered(AttributeName)`, for example attributesToIndex: ["title", "unordered(text)"].
-
attributesForFaceting: (array of strings) The list of fields you want to use for faceting. All strings in the attribute selected for faceting are extracted and added as a facet. If set to null, no attribute is used for faceting.
-
ranking: (array of strings) controls the way results are sorted. We have six available criteria:
- typo: sort according to number of typos, - geo: sort according to decreassing distance when performing a geo-location based search, - proximity: sort according to the proximity of query words in hits, - attribute: sort according to the order of attributes defined by attributesToIndex, - exact: sort according to the number of words that are matched identical to query word (and not as a prefix), - custom: sort according to a user defined formula set in **customRanking** attribute.
The standard order is [“typo”, “geo”, “proximity”, “attribute”, “exact”, “custom”]
-
customRanking: (array of strings) lets you specify part of the ranking. The syntax of this condition is an array of strings containing attributes prefixed by asc (ascending order) or desc (descending order) operator. For example ‘“customRanking” => [“desc(population)”, “asc(name)”]`
-
queryType: Select how the query words are interpreted, it can be one of the following value:
-
prefixAll: all query words are interpreted as prefixes,
-
prefixLast: only the last word is interpreted as a prefix (default behavior),
-
prefixNone: no query word is interpreted as a prefix. This option is not recommended.
-
-
highlightPreTag: (string) Specify the string that is inserted before the highlighted parts in the query result (default to “<em>”).
-
highlightPostTag: (string) Specify the string that is inserted after the highlighted parts in the query result (default to “</em>”).
-
optionalWords: (array of strings) Specify a list of words that should be considered as optional when found in the query.
339 340 341 |
# File 'lib/algolia/index.rb', line 339 def set_settings(new_settings) Algolia.client.put(Protocol.settings_uri(name), new_settings.to_json) end |
#wait_task(taskID, timeBeforeRetry = 100) ⇒ Object
Wait the publication of a task on the server. All server task are asynchronous and you can check with this method that the task is published.
157 158 159 160 161 162 163 164 165 |
# File 'lib/algolia/index.rb', line 157 def wait_task(taskID, timeBeforeRetry = 100) loop do status = Algolia.client.get(Protocol.task_uri(name, taskID))["status"] if status == "published" return end sleep(timeBeforeRetry.to_f / 1000) end end |