algoliasearch 1.12.5 → 1.12.6

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 58149dfb195329c0f545aa3f3f7fb7393aa2c17d
4
- data.tar.gz: 72aef58e1c731284f4c4b62acca29c7eb19a2dbe
3
+ metadata.gz: ee4e08848e1a0b3f4469563e6cba2f4f568d6b58
4
+ data.tar.gz: db1a5a733ecaab566798530819e6375dce7437d7
5
5
  SHA512:
6
- metadata.gz: 03b13e5680346176be1feb0908b15be7781b8b0e38348137bcf165591ae4fce66af47d402ecb789705e055c17e03f1d66dc1a7b3216acf9738e82633293735c9
7
- data.tar.gz: d2ced7f61da48579ec7aff36810170b330b5bca11a7f7fdd79822e85735fa7026b49fe6feb2d7200c8e6f47de9195eee76ae7799bb68a162b75facb8ac89f50d
6
+ metadata.gz: 4c7a3c6d0a7edb20799e6e9629913d3bc9153a56b8ebc4fa9373d44c30d64b30b254fe5be6ba37e6efdb3500ad3dbe0ff5f69a7ec4628ea07793814af1fd5db5
7
+ data.tar.gz: ab6d24dc66f42a09f96745bf76fcb9e7683d8b15058b2b81f93421fccb8c1bc025ae7680e575735dc34f4ab99fbf7ee258900c1f96893ccc1f7ddb60de324072
data/ChangeLog CHANGED
@@ -1,5 +1,8 @@
1
1
  CHANGELOG
2
2
 
3
+ 2017-01-25 1.12.6
4
+ * Upgraded `httpclient` to 2.8.3
5
+
3
6
  2016-12-07 1.12.5
4
7
  * Fixed retry strategy not keeping the `current_host` first #163
5
8
 
data/Gemfile CHANGED
@@ -1,6 +1,6 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
- gem 'httpclient', '~> 2.8.2.4'
3
+ gem 'httpclient', '~> 2.8.3'
4
4
  gem 'json', '>= 1.5.1'
5
5
  gem 'rubysl', '~> 2.0', :platform => :rbx
6
6
 
data/Gemfile.lock CHANGED
@@ -31,7 +31,7 @@ GEM
31
31
  net-http-persistent (>= 2.7)
32
32
  net-http-pipeline
33
33
  highline (1.6.21)
34
- httpclient (2.8.2.4)
34
+ httpclient (2.8.3)
35
35
  json (1.8.3)
36
36
  json (1.8.3-java)
37
37
  launchy (2.4.3)
@@ -311,7 +311,7 @@ PLATFORMS
311
311
  DEPENDENCIES
312
312
  coveralls
313
313
  highline (< 1.7.0)
314
- httpclient (~> 2.8.2.4)
314
+ httpclient (~> 2.8.3)
315
315
  json (>= 1.5.1)
316
316
  mime-types (< 2.0)
317
317
  rake
@@ -323,3 +323,6 @@ DEPENDENCIES
323
323
  simplecov
324
324
  travis
325
325
  webmock
326
+
327
+ BUNDLED WITH
328
+ 1.13.6
data/README.md CHANGED
@@ -1,11 +1,14 @@
1
1
  # Algolia Search API Client for Ruby
2
2
 
3
3
  [Algolia Search](https://www.algolia.com) is a hosted full-text, numerical, and faceted search engine capable of delivering realtime results from the first keystroke.
4
+ The **Algolia Search API Client for Ruby** lets you easily use the [Algolia Search REST API](https://www.algolia.com/doc/rest-api/search) from your Ruby code.
4
5
 
5
- Our Ruby client lets you easily use the [Algolia Search API](https://www.algolia.com/doc/rest) from your backend. It wraps the [Algolia Search REST API](https://www.algolia.com/doc/rest).
6
6
  [![Build Status](https://travis-ci.org/algolia/algoliasearch-client-ruby.svg?branch=master)](https://travis-ci.org/algolia/algoliasearch-client-ruby) [![Gem Version](https://badge.fury.io/rb/algoliasearch.svg)](http://badge.fury.io/rb/algoliasearch) [![Code Climate](https://codeclimate.com/github/algolia/algoliasearch-client-ruby.svg)](https://codeclimate.com/github/algolia/algoliasearch-client-ruby) [![Coverage Status](https://coveralls.io/repos/algolia/algoliasearch-client-ruby/badge.svg)](https://coveralls.io/r/algolia/algoliasearch-client-ruby)
7
7
 
8
8
 
9
+ **Note:** An easier-to-read version of this documentation is available on
10
+ [Algolia's website](https://www.algolia.com/doc/api-client/ruby/).
11
+
9
12
  # Table of Contents
10
13
 
11
14
 
@@ -17,10 +20,10 @@ Our Ruby client lets you easily use the [Algolia Search API](https://www.algolia
17
20
 
18
21
  **Search**
19
22
 
20
- 1. [Search in an index - `search`](#search-in-an-index---search)
23
+ 1. [Search an index - `search`](#search-an-index---search)
21
24
  1. [Search Response Format](#search-response-format)
22
25
  1. [Search Parameters](#search-parameters)
23
- 1. [Search in indices - `multiple_queries`](#search-in-indices---multiplequeries)
26
+ 1. [Search multiple indices - `multiple_queries`](#search-multiple-indices---multiplequeries)
24
27
  1. [Get Objects - `get_objects`](#get-objects---getobjects)
25
28
  1. [Search for facet values - `search_for_facet_values`](#search-for-facet-values---searchforfacetvalues)
26
29
 
@@ -51,15 +54,15 @@ Our Ruby client lets you easily use the [Algolia Search API](https://www.algolia
51
54
  1. [Typos](#typos)
52
55
  1. [Geo-Search](#geo-search)
53
56
  1. [Query Strategy](#query-strategy)
54
- 1. [performance](#performance)
57
+ 1. [Performance](#performance)
55
58
  1. [Advanced](#advanced)
56
59
 
57
60
  **Manage Indices**
58
61
 
59
62
  1. [Create an index](#create-an-index)
60
63
  1. [List indices - `list_indexes`](#list-indices---listindexes)
61
- 1. [Delete index - `delete_index`](#delete-index---deleteindex)
62
- 1. [Clear index - `clear_index`](#clear-index---clearindex)
64
+ 1. [Delete an index - `delete_index`](#delete-an-index---deleteindex)
65
+ 1. [Clear an index - `clear_index`](#clear-an-index---clearindex)
63
66
  1. [Copy index - `copy_index`](#copy-index---copyindex)
64
67
  1. [Move index - `move_index`](#move-index---moveindex)
65
68
 
@@ -87,7 +90,7 @@ Our Ruby client lets you easily use the [Algolia Search API](https://www.algolia
87
90
  1. [Update user key - `update_user_key`](#update-user-key---updateuserkey)
88
91
  1. [Delete user key - `delete_user_key`](#delete-user-key---deleteuserkey)
89
92
  1. [Get key permissions - `get_user_key_acl`](#get-key-permissions---getuserkeyacl)
90
- 1. [Get last logs - `get_logs`](#get-last-logs---getlogs)
93
+ 1. [Get latest logs - `get_logs`](#get-latest-logs---getlogs)
91
94
  1. [REST API](#rest-api)
92
95
 
93
96
  **Mocking**
@@ -185,7 +188,7 @@ puts index.search('or').to_json
185
188
  puts index.search('jim').to_json
186
189
  ```
187
190
 
188
- **Note:** If you are building a web application, you may be more interested in using our [JavaScript client](https://github.com/algolia/algoliasearch-client-javascript) to perform queries.
191
+ **Note:** **Note:** If you are building a web application, you may be more interested in using our [JavaScript client](https://github.com/algolia/algoliasearch-client-javascript) to perform queries.
189
192
 
190
193
  It brings two benefits:
191
194
  * Your users get a better response time by not going through your servers
@@ -226,7 +229,7 @@ function searchCallback(err, content) {
226
229
 
227
230
 
228
231
 
229
- ## Search in an index - `search`
232
+ ## Search an index - `search`
230
233
 
231
234
  **Notes:** If you are building a web application, you may be more interested in using our [JavaScript client](https://github.com/algolia/algoliasearch-client-javascript) to perform queries. It brings two benefits:
232
235
  * Your users get a better response time by not going through your servers
@@ -293,7 +296,7 @@ The server response will look like:
293
296
 
294
297
  - `value` (string): Markup text with occurrences highlighted. The tags used for highlighting are specified via [highlightPreTag](#highlightpretag) and [highlightPostTag](#highlightposttag).
295
298
 
296
- - `matchLevel` (string, enum) = {`none` | `partial` | `full`}: Indicates how well the attribute matched the search query.
299
+ - `matchLevel` (string, enum) = {`none` \| `partial` \| `full`}: Indicates how well the attribute matched the search query.
297
300
 
298
301
  - `matchedWords` (array): List of words *from the query* that matched the object.
299
302
 
@@ -305,7 +308,7 @@ The server response will look like:
305
308
 
306
309
  - `value` (string): Markup text with occurrences highlighted and optional ellipsis indicators. The tags used for highlighting are specified via [highlightPreTag](#highlightpretag) and [highlightPostTag](#highlightposttag). The text used to indicate ellipsis is specified via [snippetEllipsisText](#snippetellipsistext).
307
310
 
308
- - `matchLevel` (string, enum) = {`none` | `partial` | `full`}: Indicates how well the attribute matched the search query.
311
+ - `matchLevel` (string, enum) = {`none` \| `partial` \| `full`}: Indicates how well the attribute matched the search query.
309
312
 
310
313
  - `_rankingInfo` (object, optional): Ranking information. *Note: Only returned when [getRankingInfo](#getrankinginfo) is `true`.*
311
314
 
@@ -327,6 +330,14 @@ The server response will look like:
327
330
 
328
331
  - `filters` (integer): *This field is reserved for advanced usage.* It will be zero in most cases.
329
332
 
333
+ - `matchedGeoLocation` (object): Geo location that matched the query. *Note: Only returned for a geo search.*
334
+
335
+ - `lat` (float): Latitude of the matched location.
336
+
337
+ - `lng` (float): Longitude of the matched location.
338
+
339
+ - `distance` (integer): Distance between the matched location and the search location (in meters). **Caution:** Contrary to `geoDistance`, this value is *not* divided by the geo precision.
340
+
330
341
  - `_distinctSeqID` (integer): *Note: Only returned when [distinct](#distinct) is non-zero.* When two consecutive results have the same value for the attribute used for "distinct", this field is used to distinguish between them.
331
342
 
332
343
  - `nbHits` (integer): Number of hits that the search query matched.
@@ -357,9 +368,9 @@ When [getRankingInfo](#getrankinginfo) is set to `true`, the following additiona
357
368
 
358
369
  - `parsedQuery` (string): The query string that will be searched, after normalization. Normalization includes removing stop words (if [removeStopWords](#removestopwords) is enabled), and transforming portions of the query string into phrase queries (see [advancedSyntax](#advancedsyntax)).
359
370
 
360
- - `timeoutCounts` (boolean): Whether a timeout was hit when computing the facet counts. When `true`, the counts will be interpolated (i.e. approximate). See also `exhaustiveFacetsCount`.
371
+ - `timeoutCounts` (boolean) - DEPRECATED: Please use `exhaustiveFacetsCount` in remplacement.
361
372
 
362
- - `timeoutHits` (boolean): Whether a timeout was hit when retrieving the hits. When true, some results may be missing.
373
+ - `timeoutHits` (boolean) - DEPRECATED: Please use `exhaustiveFacetsCount` in remplacement.
363
374
 
364
375
  ... and ranking information is also added to each of the hits (see above).
365
376
 
@@ -383,7 +394,7 @@ When [facets](#facets) is non-empty, the following additional fields are returne
383
394
 
384
395
  - `sum` (integer | float): The sum of all values in the result set.
385
396
 
386
- - `exhaustiveFacetsCount` (boolean): Whether the counts are exhaustive (`true`) or approximate (`false`). *Note: When using [distinct](#distinct), the facet counts cannot be exhaustive.*
397
+ - `exhaustiveFacetsCount` (boolean): Whether the counts are exhaustive (`true`) or approximate (`false`). *Note: In some conditions when [distinct](#distinct) is greater than 1 and an empty query without refinement is sent, the facet counts may not always be exhaustive.*
387
398
 
388
399
  ## Search Parameters
389
400
 
@@ -443,6 +454,7 @@ Parameters that can also be used in a setSettings also have the `indexing` [scop
443
454
 
444
455
  **Query Strategy**
445
456
 
457
+ - [queryType](#querytype) `search`, `settings`
446
458
  - [removeWordsIfNoResults](#removewordsifnoresults) `settings`, `search`
447
459
  - [advancedSyntax](#advancedsyntax) `settings`, `search`
448
460
  - [optionalWords](#optionalwords) `settings`, `search`
@@ -452,18 +464,18 @@ Parameters that can also be used in a setSettings also have the `indexing` [scop
452
464
 
453
465
  **Advanced**
454
466
 
455
- - [minProximity](#minproximity) `settings`, `search`
456
- - [responseFields](#responsefields) `settings`, `search`
457
467
  - [distinct](#distinct) `settings`, `search`
458
468
  - [getRankingInfo](#getrankinginfo) `search`
459
469
  - [numericFilters](#numericfilters) `search`
460
- - [tagFilters (deprecated)](#tagfilters-deprecated) `search`
470
+ - [tagFilters](#tagfilters) `search`
461
471
  - [analytics](#analytics) `search`
462
472
  - [analyticsTags](#analyticstags) `search`
463
473
  - [synonyms](#synonyms) `search`
464
474
  - [replaceSynonymsInHighlight](#replacesynonymsinhighlight) `settings`, `search`
475
+ - [minProximity](#minproximity) `settings`, `search`
476
+ - [responseFields](#responsefields) `settings`, `search`
465
477
 
466
- ## Search in indices - `multiple_queries`
478
+ ## Search multiple indices - `multiple_queries`
467
479
 
468
480
  You can send multiple queries with a single API call using a batch of queries:
469
481
 
@@ -487,7 +499,7 @@ You can specify a `strategy` parameter to optimize your multiple queries:
487
499
 
488
500
  The resulting JSON contains the following fields:
489
501
 
490
- - `results` (array): The results for each request, in the order they were submitted. The contents are the same as in [Search in an index](#search-in-an-index).
502
+ - `results` (array): The results for each request, in the order they were submitted. The contents are the same as in [Search an index](#search-an-index).
491
503
  Each result also includes the following additional fields:
492
504
 
493
505
  - `index` (string): The name of the targeted index.
@@ -529,7 +541,7 @@ that both:
529
541
  1. match the facet query; and
530
542
  2. are contained in objects matching the regular search query.
531
543
 
532
- **Warning:** *For a facet to be searchable, it must have been declared with the `searchable()` modifier in the [attributesForFaceting](#attributesforfaceting) index setting.*
544
+ **Warning:** For a facet to be searchable, it must have been declared with the `searchable()` modifier in the [attributesForFaceting](#attributesforfaceting) index setting.
533
545
 
534
546
  #### Example
535
547
 
@@ -728,7 +740,7 @@ index.partial_update_object({"price" => {"value" => 42, "_operation" => "Decreme
728
740
  Note: Here we are decrementing the value by `42`. To decrement just by one, put
729
741
  `value:1`.
730
742
 
731
- To partial update multiple objects using one API call, you can use the `[Partial update objects](#partial-update-objects)` method:
743
+ To partial update multiple objects using one API call, you can use the following method:
732
744
 
733
745
  ```ruby
734
746
  res = index.partial_update_objects([{"firstname" => "Jimmie",
@@ -745,7 +757,7 @@ You can delete objects using their `objectID`:
745
757
  res = index.delete_objects(["myID1", "myID2"])
746
758
  ```
747
759
 
748
- To delete a single object, you can use the `[Delete objects](#delete-objects)` method:
760
+ To delete a single object, you can use the following method:
749
761
 
750
762
  ```ruby
751
763
  index.delete_object("myID")
@@ -868,15 +880,16 @@ Parameters that can be overridden at search time also have the `search` [scope](
868
880
 
869
881
  **Query Strategy**
870
882
 
871
- - [queryType](#querytype) `settings`
883
+ - [queryType](#querytype) `search`, `settings`
872
884
  - [removeWordsIfNoResults](#removewordsifnoresults) `settings`, `search`
873
885
  - [advancedSyntax](#advancedsyntax) `settings`, `search`
874
886
  - [optionalWords](#optionalwords) `settings`, `search`
875
887
  - [removeStopWords](#removestopwords) `settings`, `search`
888
+ - [disablePrefixOnAttributes](#disableprefixonattributes) `settings`
876
889
  - [disableExactOnAttributes](#disableexactonattributes) `settings`
877
890
  - [exactOnSingleWordQuery](#exactonsinglewordquery) `settings`, `search`
878
891
 
879
- **performance**
892
+ **Performance**
880
893
 
881
894
  - [numericAttributesForFiltering](#numericattributesforfiltering) `settings`
882
895
  - [allowCompressionOfIntegerArray](#allowcompressionofintegerarray) `settings`
@@ -884,12 +897,12 @@ Parameters that can be overridden at search time also have the `search` [scope](
884
897
  **Advanced**
885
898
 
886
899
  - [attributeForDistinct](#attributefordistinct) `settings`
900
+ - [distinct](#distinct) `settings`, `search`
901
+ - [replaceSynonymsInHighlight](#replacesynonymsinhighlight) `settings`, `search`
887
902
  - [placeholders](#placeholders) `settings`
888
903
  - [altCorrections](#altcorrections) `settings`
889
904
  - [minProximity](#minproximity) `settings`, `search`
890
905
  - [responseFields](#responsefields) `settings`, `search`
891
- - [distinct](#distinct) `settings`, `search`
892
- - [replaceSynonymsInHighlight](#replacesynonymsinhighlight) `settings`, `search`
893
906
 
894
907
 
895
908
  # Parameters
@@ -901,13 +914,13 @@ Parameters that can be overridden at search time also have the `search` [scope](
901
914
  ### Scope
902
915
 
903
916
  Each parameter in this page has a scope. Depending on the scope, you can use the parameter within the `setSettings`
904
- and/or the `search` method
917
+ and/or the `search` method.
905
918
 
906
- They are three scopes:
919
+ There are three scopes:
907
920
 
908
- - `settings`: The setting can only be used in the `setSettings` method
909
- - `search`: The setting can only be used in the `search` method
910
- - `settings` `search`: The setting can be used in the `setSettings` method and be override in the`search` method
921
+ - `settings`: The setting can only be used in the `setSettings` method.
922
+ - `search`: The setting can only be used in the `search` method.
923
+ - `settings` `search`: The setting can be used in the `setSettings` method and be overridden in the`search` method.
911
924
 
912
925
  ### Parameters List
913
926
 
@@ -976,17 +989,17 @@ They are three scopes:
976
989
 
977
990
  **Query Strategy**
978
991
 
979
- - [queryType](#querytype) `settings`
992
+ - [queryType](#querytype) `search`, `settings`
980
993
  - [removeWordsIfNoResults](#removewordsifnoresults) `settings`, `search`
981
994
  - [advancedSyntax](#advancedsyntax) `settings`, `search`
982
995
  - [optionalWords](#optionalwords) `settings`, `search`
983
996
  - [removeStopWords](#removestopwords) `settings`, `search`
984
- - [disablePrefixOnAttributes](#disableprefixonattributes) `seetings`
997
+ - [disablePrefixOnAttributes](#disableprefixonattributes) `settings`
985
998
  - [disableExactOnAttributes](#disableexactonattributes) `settings`
986
999
  - [exactOnSingleWordQuery](#exactonsinglewordquery) `settings`, `search`
987
1000
  - [alternativesAsExact](#alternativesasexact) `setting`, `search`
988
1001
 
989
- **performance**
1002
+ **Performance**
990
1003
 
991
1004
  - [numericAttributesForFiltering](#numericattributesforfiltering) `settings`
992
1005
  - [allowCompressionOfIntegerArray](#allowcompressionofintegerarray) `settings`
@@ -994,453 +1007,552 @@ They are three scopes:
994
1007
  **Advanced**
995
1008
 
996
1009
  - [attributeForDistinct](#attributefordistinct) `settings`
997
- - [placeholders](#placeholders) `settings`
998
- - [altCorrections](#altcorrections) `settings`
999
- - [minProximity](#minproximity) `settings`, `search`
1000
- - [responseFields](#responsefields) `settings`, `search`
1001
1010
  - [distinct](#distinct) `settings`, `search`
1002
1011
  - [getRankingInfo](#getrankinginfo) `search`
1003
1012
  - [numericFilters](#numericfilters) `search`
1004
- - [tagFilters (deprecated)](#tagfilters-deprecated) `search`
1013
+ - [tagFilters](#tagfilters) `search`
1005
1014
  - [analytics](#analytics) `search`
1006
1015
  - [analyticsTags](#analyticstags) `search`
1007
1016
  - [synonyms](#synonyms) `search`
1008
1017
  - [replaceSynonymsInHighlight](#replacesynonymsinhighlight) `settings`, `search`
1018
+ - [placeholders](#placeholders) `settings`
1019
+ - [altCorrections](#altcorrections) `settings`
1020
+ - [minProximity](#minproximity) `settings`, `search`
1021
+ - [responseFields](#responsefields) `settings`, `search`
1009
1022
 
1010
1023
  ## Search
1011
1024
 
1012
1025
  #### query
1013
1026
 
1014
1027
  - scope: `search`
1015
- - type: `string`
1016
- - default: ""
1028
+ - type: string
1029
+ - default: `""`
1017
1030
 
1018
- The search query string, used to set the string you want to search in your index.
1019
- If no query parameter is set, the textual search will match with all the objects.
1031
+ The text to search for in the index. If empty or absent, the textual search will match any object.
1020
1032
 
1021
1033
  ## Attributes
1022
1034
 
1023
1035
  #### searchableAttributes
1024
1036
 
1025
1037
  - scope: `settings`
1026
- - type: `array of strings`
1027
- - default: * (all string attributes)
1038
+ - type: array of strings
1039
+ - default: `[]` (all string attributes)
1028
1040
  - formerly known as: `attributesToIndex`
1029
1041
 
1030
- The list of attributes you want index (i.e. to make searchable).
1042
+ List of attributes eligible for textual search.
1043
+ In search engine parlance, those attributes will be "indexed", i.e. their content will be made searchable.
1031
1044
 
1032
- If set to null, all textual and numerical attributes of your objects are indexed.
1033
- Make sure you updated this setting to get optimal results.
1045
+ If not specified or empty, all string values of all attributes are indexed.
1046
+ If specified, only the specified attributes are indexed; any numerical values within those attributes are converted to strings and indexed.
1047
+
1048
+ When an attribute is listed, it is *recursively* processed, i.e. all of its nested attributes, at any depth, are indexed
1049
+ according to the same policy.
1050
+
1051
+ **Note:** Make sure you adjust this setting to get optimal results.
1034
1052
 
1035
1053
  This parameter has two important uses:
1036
1054
 
1037
- 1. **Limit the attributes to index.** For example, if you store the URL of a picture, you want to store it and be able to retrieve it,
1038
- but you probably don't want to search in the URL.
1055
+ 1. **Limit the scope of the search.**
1056
+ Restricting the searchable attributes to those containing meaningful text guarantees a better relevance.
1057
+ For example, if your objects have associated pictures, you need to store the picture URLs in the records
1058
+ in order to retrieve them for display at query time, but you probably don't want to *search* inside the URLs.
1059
+
1060
+ A side effect of limiting the attributes is **increased performance**: it keeps the index size at a minimum, which
1061
+ has a direct and positive impact on both build time and search speed.
1039
1062
 
1040
1063
  2. **Control part of the ranking.** The contents of the `searchableAttributes` parameter impacts ranking in two complementary ways:
1041
- First, the order in which attributes are listed defines their ranking priority: matches in attributes at the beginning of the
1042
- list will be considered more important than matches in attributes further down the list. To assign the same priority to several attributes,
1043
- pass them within the same string, separated by commas. For example, by specifying `["title,"alternative_title", "text"]`,
1044
- `title` and `alternative_title` will have the same priority, but a higher priority than `text`.
1045
1064
 
1046
- Then, within the same attribute, matches near the beginning of the text will be considered more important than matches near the end.
1047
- You can disable this behavior by wrapping your attribute name inside an `unordered()` modifier. For example, `["title", "unordered(text)"]`
1048
- will consider all positions inside the `text` attribute as equal, but positions inside the `title` attribute will still matter.
1065
+ - **Attribute priority**: The order in which attributes are listed defines their ranking priority:
1066
+ matches in attributes at the beginning of the list will be considered more important than matches in
1067
+ attributes further down the list.
1068
+
1069
+ To assign the same priority to several attributes, pass them within the same string, separated by commas.
1070
+ For example, by specifying `["title,alternative_title", "text"]`, `title` and `alternative_title` will have
1071
+ the same priority, but a higher priority than `text`.
1049
1072
 
1050
- You can decide to have the same priority for several attributes by passing them in the same string using comma as separator.
1051
- For example: \n`title` and `alternative_title` have the same priority in this example: `searchableAttributes:["title,alternative_title", "text"]`
1073
+ - **Importance of word positions**: Within a given attribute, matches near the beginning of the text are considered more
1074
+ important than matches near the end.
1075
+ You can disable this behavior by wrapping your attribute name inside an `unordered()` modifier.
1076
+ For example, `["title", "unordered(text)"]` will consider all positions inside the `text` attribute as equal,
1077
+ but positions inside the `title` attribute will still matter.
1052
1078
 
1053
- To get a full description of how the ranking works, you can have a look at our [Ranking guide](https://www.algolia.com/doc/guides/relevance/ranking).
1079
+ **Note:** To get a full description of how the ranking works, you can have a look at our [Ranking guide](https://www.algolia.com/doc/guides/relevance/ranking).
1054
1080
 
1055
1081
  #### attributesForFaceting
1056
1082
 
1057
1083
  - scope: `settings`
1058
- - type: `array of strings`
1084
+ - type: array of strings
1085
+ - default: `[]`
1086
+
1087
+ List of attributes you want to use for faceting.
1059
1088
 
1060
- The list of attributes you want to use for faceting.
1061
1089
  All strings within these attributes will be extracted and added as facets.
1062
- If set to `null`, no attribute is used for faceting.
1090
+ If not specified or empty, no attribute will be faceted.
1091
+
1092
+ If you only need to filter on a given facet, but are not interested in value counts for this facet,
1093
+ you can improve performances by specifying `filterOnly(${attributeName})`. This decreases the size of the index
1094
+ and the time required to build it.
1063
1095
 
1064
- If you only need to filter on a given facet, you can specify filterOnly(attributeName). It reduces the size of the index and the build time.
1096
+ If you want to search inside values of a given facet (using the [Search for facet values](#search-for-facet-values) method)
1097
+ you need to specify `searchable(${attributeName})`.
1065
1098
 
1066
- If you want to search inside values of a given facet (using the [Search for facet values](#search-for-facet-values) method) you need to specify searchable(attributeName).
1099
+ **Note:** The `filterOnly()` and `searchable()` modifiers are mutually exclusive.
1067
1100
 
1068
1101
  #### unretrievableAttributes
1069
1102
 
1070
1103
  - scope: `settings`
1071
- - type: `array of strings`
1104
+ - type: array of strings
1105
+ - default: `[]`
1106
+
1107
+ List of attributes that cannot be retrieved at query time.
1072
1108
 
1073
- The list of attributes that cannot be retrieved at query time.
1074
- This feature allows you to have attributes that are used for indexing
1075
- and/or ranking but cannot be retrieved.
1109
+ These attributes can still be used for indexing and/or ranking.
1076
1110
 
1077
- This setting will be bypassed if the query is done with the ADMIN API key
1078
- {.alert .alert-info}
1111
+ **Note:** This setting is bypassed when the query is authenticated with the **admin API key**.
1079
1112
 
1080
1113
  #### attributesToRetrieve
1081
1114
 
1082
1115
  - scope: `settings` `search`
1083
- - type: `array of strings`
1084
- - default: * (all attributes)
1116
+ - type: array of strings
1117
+ - default: `*` (all attributes)
1118
+ - formerly known as: `attributes`
1085
1119
 
1086
- List of attributes you want to retrieve in the search response.
1087
- This can be use to minimize the size of the JSON answer.
1120
+ List of object attributes you want to retrieve.
1121
+ This can be used to minimize the size of the response.
1088
1122
 
1089
1123
  You can use `*` to retrieve all values.
1090
1124
 
1091
1125
  **Note:** `objectID` is always retrieved, even when not specified.
1092
1126
 
1127
+ **Note:** Attributes listed in [unretrievableAttributes](#unretrievableattributes) will not be retrieved even if requested,
1128
+ unless the request is authenticated with the admin API key.
1129
+
1093
1130
  #### restrictSearchableAttributes
1094
1131
 
1095
1132
  - scope: `search`
1096
- - type: `array of strings`
1097
- - default: all attributes in searchableAttributes
1098
-
1099
- List of attributes you want to use for textual search.
1133
+ - type: array of strings
1134
+ - default: all attributes in `searchableAttributes`
1100
1135
 
1101
- It must be a subset of the `searchableAttributes` index setting.
1136
+ List of attributes to be considered for textual search.
1102
1137
 
1103
- SearchableAttributes must not be empty/null to be able to use this parameter.
1138
+ **Note:** It must be a subset of the [searchableAttributes](#searchableattributes) index setting.
1139
+ Consequently, `searchableAttributes` must not be empty nor null for `restrictSearchableAttributes` to be allowed.
1104
1140
 
1105
1141
  ## Ranking
1106
1142
 
1107
1143
  #### ranking
1108
1144
 
1109
1145
  - scope: `settings`
1110
- - type: `array of strings`
1111
- - default: ['typo', 'geo', 'words', 'filters', 'proximity', 'attribute', 'exact', 'custom']
1146
+ - type: array of strings
1147
+ - default: `["typo", "geo", "words", "filters", "proximity", "attribute", "exact", "custom"]`
1112
1148
 
1113
1149
  Controls the way results are sorted.
1114
1150
 
1115
- We have nine available criterion:
1151
+ You must specify a list of ranking criteria. They will be applied in sequence by the tie-breaking algorithm
1152
+ in the order they are specified.
1116
1153
 
1117
- * `typo`: Sort according to number of typos.
1118
- * `geo`: Sort according to decreasing distance when performing a geo location based search.
1119
- * `words`: Sort according to the number of query words matched by decreasing order. This parameter is useful when you use the `optionalWords` query parameter to have results with the most matched words first.
1120
- * `proximity`: Sort according to the proximity of the query words in hits.
1121
- * `attribute`: Sort according to the order of attributes defined by searchableAttributes.
1154
+ The following ranking criteria are available:
1155
+
1156
+ * `typo`: Sort by increasing number of typos.
1157
+ * `geo`: Sort by decreasing geo distance when performing a geo search.
1158
+ This criterion is ignored when not performing a geo search.
1159
+ * `words`: Sort by decreasing number of matched query words.
1160
+ This parameter is useful when you use the [optionalWords](#optionalwords) query parameter to rank hits with the most matched words first.
1161
+ * `proximity`: Sort by increasing proximity of query words in hits.
1162
+ * `attribute`: Sort according to the order of attributes defined by [searchableAttributes](#searchableattributes).
1122
1163
  * `exact`:
1123
- * If the user query contains one word: sort objects having an attribute that is exactly the query word before others. For example, if you search for the TV show "V", you want to find it with the "V" query and avoid getting all popular TV shows starting by the letter V before it.
1124
- * If the user query contains multiple words: sort according to the number of words that matched exactly (not as a prefix).
1125
- * `custom`: Sort according to a user defined formula set in the `customRanking` attribute.
1126
- * `asc(attributeName)`: Sort according to a numeric attribute using ascending order. `attributeName` can be the name of any numeric attribute in your records (integer, double or boolean).
1127
- * `desc(attributeName)`: Sort according to a numeric attribute using descending order. `attributeName` can be the name of any numeric attribute in your records (integer, double or boolean).
1164
+ - **If the query contains only one word:** The behavior depends on the value of [exactOnSingleWordQuery](#exactonsinglewordquery).
1165
+ - **If the query contains multiple words:** Sort by decreasing number of words that matched exactly.
1166
+ What is considered to be an exact match depends on the value of [alternativesAsExact](#alternativesasexact).
1167
+ * `custom`: Sort according to a user-defined formula specified via the [customRanking](#customranking) setting.
1168
+ * Sort by value of a numeric attribute. Here, `${attributeName}` can be the name of any numeric attribute in your objects (integer, floating-point or boolean).
1169
+ * `asc(${attributeName})`: sort by increasing value of the attribute
1170
+ * `desc(${attributeName})`: sort by decreasing value of the attribute
1128
1171
 
1129
- To get a full description of how the Ranking works, you can have a look at our [Ranking guide](https://www.algolia.com/doc/guides/relevance/ranking).
1172
+ **Note:** To get a full description of how the ranking works, you can have a look at our [Ranking guide](https://www.algolia.com/doc/guides/relevance/ranking).
1130
1173
 
1131
1174
  #### customRanking
1132
1175
 
1133
1176
  - scope: `settings`
1134
- - type: `array of strings`
1135
- - default: []
1177
+ - type: array of strings
1178
+ - default: `[]`
1136
1179
 
1137
- Lets you specify part of the ranking.
1180
+ Specifies the `custom` ranking criterion.
1138
1181
 
1139
- The syntax of this condition is an array of strings containing attributes
1140
- prefixed by the asc (ascending order) or desc (descending order) operator.
1182
+ Each string must conform to the syntax `asc(${attributeName})` or `desc(${attributeName})` and specifies a
1183
+ (respectively) increasing or decreasing sort on an attribute. All sorts are applied in sequence by the tie-breaking
1184
+ algorithm in the order they are specified.
1141
1185
 
1142
- For example, `"customRanking" => ["desc(population)", "asc(name)"]`.
1186
+ **Example:** `["desc(population)", "asc(name)"]` will sort by decreasing value of the `population` attribute,
1187
+ then *in case of equality* by increasing value of the `name` attribute.
1143
1188
 
1144
- To get a full description of how the Custom Ranking works,
1189
+ **Note:** To get a full description of how custom ranking works,
1145
1190
  you can have a look at our [Ranking guide](https://www.algolia.com/doc/guides/relevance/ranking).
1146
1191
 
1147
1192
  #### replicas
1148
1193
 
1149
1194
  - scope: `settings`
1150
- - type: `array of strings`
1151
- - default: []
1195
+ - type: array of strings
1196
+ - default: `[]`
1152
1197
  - formerly known as: `slaves`
1153
1198
 
1154
- The list of indices on which you want to replicate all write operations.
1199
+ List of indices to which you want to replicate all write operations.
1155
1200
 
1156
- In order to get response times in milliseconds, we pre-compute part of the ranking during indexing.
1201
+ In order to get relevant results in milliseconds, we pre-compute part of the ranking during indexing.
1202
+ Consequently, if you want to use different ranking formulas depending on the use case,
1203
+ you need to create one index per ranking formula.
1157
1204
 
1158
- If you want to use different ranking configurations depending of the use case,
1159
- you need to create one index per ranking configuration.
1205
+ This option allows you to perform write operations on a single, master index and automatically
1206
+ perform the same operations on all of its replicas.
1160
1207
 
1161
- This option enables you to perform write operations only on this index and automatically
1162
- update replica indices with the same operations.
1208
+ **Note:** A master index can have as many replicas as needed. However, a replica can only have one master; in other words,
1209
+ two master indices cannot have the same replica. Furthermore, a replica cannot have its own replicas
1210
+ (i.e. you cannot "chain" replicas).
1163
1211
 
1164
1212
  ## Filtering / Faceting
1165
1213
 
1166
1214
  #### filters
1167
1215
 
1168
1216
  - scope: `search`
1169
- - type: `string`
1170
- - default: ""
1217
+ - type: string
1218
+ - default: `""`
1219
+
1220
+ Filter the query with numeric, facet and/or tag filters.
1221
+
1222
+ This parameter uses a SQL-like expression syntax, where you can use boolean operators and parentheses to combine individual filters.
1223
+
1224
+ The following **individual filters** are supported:
1225
+
1226
+ - **Numeric filter**:
1227
+
1228
+ - **Comparison**: `${attributeName} ${operator} ${operand}` matches all objects where the specified numeric attribute satisfies the numeric condition expressed by the operator and the operand. The operand must be a numeric value. Supported operators are `<`, `<=`, `=`, `!=`, `>=` and `>`, with the same semantics as in virtually all programming languages.
1229
+ Example: `inStock > 0`.
1171
1230
 
1172
- Filter the query with numeric, facet or/and tag filters.
1231
+ - **Range**: `${attributeName}:${lowerBound} TO ${upperBound}` matches all objects where the specified numeric
1232
+ attribute is within the range [`${lowerBound}`, `${upperBound}`] \(inclusive on both ends).
1233
+ Example: `publication_date: 1441745506 TO 1441755506`.
1173
1234
 
1174
- The syntax is a SQL like syntax, you can use the OR and AND keywords.
1175
- The syntax for the underlying numeric, facet and tag filters is the same than in the other filters:
1235
+ - **Facet filter**: `${facetName}:${facetValue}` matches all objects containing exactly the specified value in the specified facet attribute. *Facet matching is case sensitive*. Example: `category:Book`.
1176
1236
 
1177
- `available=1 AND (category:Book OR NOT category:Ebook) AND _tags:public`
1178
- `date: 1441745506 TO 1441755506 AND inStock > 0 AND author:"John Doe"`
1237
+ - **Tag filter**: `_tags:${value}` (or, alternatively, just `${value}`) matches all objects containing exactly the specified value in their `_tags` attribute. *Tag matching is case sensitive*. Example: `_tags:published`.
1238
+
1239
+ Individual filters can be combined via **boolean operators**. The following operators are supported:
1240
+
1241
+ - `OR`: must match any of the combined conditions (disjunction)
1242
+ - `AND`: must match all of the combined conditions (conjunction)
1243
+ - `NOT`: negate a filter
1244
+
1245
+ Finally, **parentheses** (`(` and `)`) can be used for grouping.
1246
+
1247
+ Putting it all together, an example is:
1248
+
1249
+ ```
1250
+ available = 1 AND (category:Book OR NOT category:Ebook) AND _tags:published AND publication_date:1441745506 TO 1441755506 AND inStock > 0 AND author:"John Doe"
1251
+ ```
1179
1252
 
1180
- The list of keywords is:
1253
+ **Warning:** Keywords are case-sensitive.
1181
1254
 
1182
- - **OR**: create a OR between two filters.
1183
- - **AND**: create a AND between two filters.
1184
- - **TO**: used to specify a range for a numeric filter.
1185
- - **NOT**: used to negate a filter.
1255
+ **Note:** If no attribute name is specified, the filter applies to `_tags`.
1256
+ For example: `public OR user_42` will translate into `_tags:public OR _tags:user_42`.
1186
1257
 
1187
- If no attribute name is specified,
1188
- the filter applies to `_tags`.
1189
- For example: `public OR user_42` will translate to `_tags:public OR _tags:user_42`.
1258
+ **Note:** If a value contains spaces, or conflicts with a keyword, you can use double quotes.
1190
1259
 
1191
- To specify a value with spaces or with a value equal to a keyword, it's possible to add quotes.
1260
+ **Note:** If a filtered attribute contains an array of values, any matching value will cause the filter to match.
1192
1261
 
1193
- Like for the other filter for performance reason, it's not possible to have FILTER1 OR (FILTER2 AND FILTER3).
1262
+ **Warning:** For performance reasons, filter expressions are limited to a disjunction of conjunctions.
1263
+ In other words, you can have ANDs of ORs (e.g. `filter1 AND (filter2 OR filter3)`),
1264
+ but not ORs of ANDs (e.g. `filter1 OR (filter2 AND filter3)`.
1194
1265
 
1195
- It's not possible to mix different category of filter inside a OR like num=3 OR tag1 OR facet:value
1266
+ **Warning:** You cannot mix different filter categories inside a disjunction (OR).
1267
+ For example, `num=3 OR tag1 OR facet:value` is not allowed.
1196
1268
 
1197
- It's not possible to negate an group, it's only possible to negate a filter: NOT(FILTER1 OR FILTER2) is not allowed.
1269
+ **Warning:** You cannot negate a group of filters, only an individual filter.
1270
+ For example, `NOT(filter1 OR filter2)` is not allowed.
1198
1271
 
1199
1272
  #### facets
1200
1273
 
1201
1274
  - scope: `search`
1202
- - type: `array of string`
1203
- - default: []
1275
+ - type: array of strings
1276
+ - default: `[]`
1204
1277
 
1205
- You can use [facets](#facets) to retrieve only a part of your attributes declared in
1206
- **[attributesForFaceting](#attributesforfaceting)** attributes.
1278
+ Facets to retrieve.
1279
+ If not specified or empty, no facets are retrieved.
1280
+ The special value `*` may be used to retrieve all facets.
1207
1281
 
1208
- For each of the declared attributes, you'll be able to retrieve a list of the most relevant facet values,
1209
- and their associated count for the current query.
1282
+ **Warning:** Facets must have been declared beforehand in the [attributesForFaceting](#attributesforfaceting) index setting.
1210
1283
 
1211
- It will not filter your results, if you want to filter results you should use [filters](#filters).
1284
+ For each of the retrieved facets, the response will contain a list of the most frequent facet values in objects
1285
+ matching the current query. Each value will be returned with its associated count (number of matched objects containing that value).
1212
1286
 
1213
- **Example**
1287
+ **Warning:** Faceting does **not** filter your results. If you want to filter results, you should use [filters](#filters).
1214
1288
 
1215
- If you have defined in your **[attributesForFaceting](#attributesforfaceting)**:
1289
+ **Example**:
1290
+
1291
+ If your settings contain:
1216
1292
 
1217
1293
  ```
1218
- ["category", "author", "nb_views", "nb_downloads"]
1294
+ {
1295
+ "attributesForFaceting": ["category", "author", "nb_views", "nb_downloads"]
1296
+ }
1219
1297
  ```
1220
1298
 
1221
1299
  ... but, for the current search, you want to retrieve facet values only for `category` and `author`, then you can specify:
1222
1300
 
1223
1301
  ```
1224
- ["category", "author"]
1302
+ "facets": ["category", "author"]
1225
1303
  ```
1226
1304
 
1227
- When using [facets](#facets) in a search query, only attributes that have been added in **attributesForFaceting** index setting can be used in this parameter.
1228
-
1229
- You can also use `*` to perform faceting on all attributes specified in `attributesForFaceting`.
1230
-
1231
- If the number of results is important, the count can be approximate, the attribute `exhaustiveFacetsCount` in the response is true when the count is exact.
1305
+ **Warning:** If the number of hits is high, facet counts may be approximate.
1306
+ The response field `exhaustiveFacetsCount` is true when the count is exact.
1232
1307
 
1233
1308
  #### maxValuesPerFacet
1234
1309
 
1235
1310
  - scope: `settings` `search`
1236
- - type: `integer`
1237
- - default: 100
1238
-
1239
- Limit the number of facet values returned for each facet.
1311
+ - type: integer
1312
+ - default: `100`
1240
1313
 
1241
- For example, `maxValuesPerFacet=10` will retrieve a maximum of 10 values per facet.
1314
+ Maximum number of facet values returned for each facet.
1242
1315
 
1243
- **Warnings**
1244
- - The engine has a hard limit on the `maxValuesPerFacet` of `1000`. Any value above that will be interpreted by the engine as being `1000`.
1316
+ **Warning:** The API enforces a hard limit of 1000 on `maxValuesPerFacet`.
1317
+ Any value above that limit will be interpreted as 1000.
1245
1318
 
1246
1319
  #### facetFilters
1247
1320
 
1248
1321
  - scope: `search`
1249
- - type: `array of string`
1250
- - default: ""
1322
+ - type: array of strings
1323
+ - default: `[]`
1324
+
1325
+ Filter hits by facet value.
1326
+
1327
+ **Note:** The [filters](#filters) parameter provides an easier to use, SQL-like syntax.
1328
+ We recommend using it instead of `facetFilters`.
1251
1329
 
1252
- **Warning**: We introduce the [filters](#filters) parameter that provide a SQL like syntax
1253
- and is easier to use for most usecases
1330
+ Each string represents a filter on a given facet value. It must follow the syntax `${attributeName}:${value}`.
1254
1331
 
1255
- Filter the query with a list of facets. A Facet is encoded as key value like this: `attributeName:value`.
1332
+ If you specify multiple filters, they are interpreted as a conjunction (AND). If you want to use a disjunction (OR),
1333
+ use a nested array.
1256
1334
 
1257
- `["category:Book","author:John%20Doe"]` will translate to `category:Book` AND `author:John%20Doe`
1335
+ Examples:
1258
1336
 
1259
- You can also OR facets: `[["category:Book","category:Movie"],"author:John%20Doe"]`, will translate to
1260
- `(category:Book OR category:Movie) AND author:John%20Doe`
1337
+ - `["category:Book", "author:John Doe"]` translates as `category:Book AND author:"John Doe"`
1338
+ - `[["category:Book", "category:Movie"], "author:John Doe"]` translates as `(category:Book OR category:Movie) AND author:"John Doe"`
1339
+
1340
+ Negation is supported by prefixing the value with a minus sign (`-`, a.k.a. dash).
1341
+ For example: `["category:Book", "category:-Movie"]` translates as `category:Book AND NOT category:Movie`.
1261
1342
 
1262
1343
  ## Highlighting / Snippeting
1263
1344
 
1264
1345
  #### attributesToHighlight
1265
1346
 
1266
1347
  - scope: `settings` `search`
1267
- - type: `array of string`
1348
+ - type: array of strings
1349
+ - default: all searchable attributes
1268
1350
 
1269
1351
  List of attributes to highlight.
1270
- If set to null, all indexed attributes are highlighted.
1352
+ If set to null, all **searchable** attributes are highlighted (see [searchableAttributes](#searchableattributes)).
1353
+ The special value `*` may be used to highlight all attributes.
1354
+
1355
+ **Note:** Only string values can be highlighted. Numerics will be ignored.
1356
+
1357
+ When highlighting is enabled, each hit in the response will contain an additional `_highlightResult` object
1358
+ (provided that at least one of its attributes is highlighted) with the following fields:
1359
+
1360
+ <!-- TODO: Factorize the following with the "Search Response Format" section in the API Client doc. -->
1271
1361
 
1272
- An attribute has no match for the query, the raw value is returned.
1362
+ - `value` (string): Markup text with occurrences highlighted.
1363
+ The tags used for highlighting are specified via [highlightPreTag](#highlightpretag) and [highlightPostTag](#highlightposttag).
1273
1364
 
1274
- By default, all indexed attributes are highlighted (as long as they are strings).
1275
- You can use `*` if you want to highlight all attributes.
1365
+ - `matchLevel` (string, enum) = {`none` \| `partial` \| `full`}: Indicates how well the attribute matched the search query.
1276
1366
 
1277
- A matchLevel is returned for each highlighted attribute and can contain:
1367
+ - `matchedWords` (array): List of words *from the query* that matched the object.
1278
1368
 
1279
- * `full`: If all the query terms were found in the attribute.
1280
- * `partial`: If only some of the query terms were found.
1281
- * `none`: If none of the query terms were found.
1369
+ - `fullyHighlighted` (boolean): Whether the entire attribute value is highlighted.
1282
1370
 
1283
1371
  #### attributesToSnippet
1284
1372
 
1285
1373
  - scope: `settings` `search`
1286
- - type: `array of strings`
1287
- - default: [] (no attribute is snippeted)
1374
+ - type: array of strings
1375
+ - default: `[]` (no attribute is snippeted)
1376
+
1377
+ List of attributes to snippet, with an optional maximum number of words to snippet.
1378
+ If set to null, no attributes are snippeted.
1379
+ The special value `*` may be used to snippet all attributes.
1380
+
1381
+ The syntax for each attribute is `${attributeName}:${nbWords}`.
1382
+ The number of words can be omitted, and defaults to 10.
1383
+
1384
+ **Note:** Only string values can be snippeted. Numerics will be ignored.
1288
1385
 
1289
- List of attributes to snippet alongside the number of words to return (syntax is `attributeName:nbWords`).
1386
+ When snippeting is enabled, each hit in the response will contain an additional `_snippetResult` object
1387
+ (provided that at least one of its attributes is snippeted) with the following fields:
1388
+
1389
+ <!-- TODO: Factorize the following with the "Search Response Format" section in the API Client doc. -->
1390
+
1391
+ - `value` (string): Markup text with occurrences highlighted and optional ellipsis indicators.
1392
+ The tags used for highlighting are specified via [highlightPreTag](#highlightpretag) and [highlightPostTag](#highlightposttag).
1393
+ The text used to indicate ellipsis is specified via [snippetEllipsisText](#snippetellipsistext).
1394
+
1395
+ - `matchLevel` (string, enum) = {`none` \| `partial` \| `full`}: Indicates how well the attribute matched the search query.
1290
1396
 
1291
1397
  #### highlightPreTag
1292
1398
 
1293
1399
  - scope: `settings` `search`
1294
- - type: `string`
1295
- - default: <em>
1400
+ - type: string
1401
+ - default: `"<em>"`
1296
1402
 
1297
- Specify the string that is inserted before the highlighted parts in the query result
1403
+ String inserted before highlighted parts in highlight and snippet results.
1298
1404
 
1299
1405
  #### highlightPostTag
1300
1406
 
1301
1407
  - scope: `settings` `search`
1302
- - type: `string`
1303
- - default: </em>
1408
+ - type: string
1409
+ - default: `"</em>"`
1304
1410
 
1305
- Specify the string that is inserted after the highlighted parts in the query result.
1411
+ String inserted after highlighted parts in highlight and snippet results.
1306
1412
 
1307
1413
  #### snippetEllipsisText
1308
1414
 
1309
1415
  - scope: `settings` `search`
1310
- - type: `string`
1311
- - default: ...
1416
+ - type: string
1417
+ - default: `…` (U+2026)
1312
1418
 
1313
1419
  String used as an ellipsis indicator when a snippet is truncated.
1314
1420
 
1315
- Defaults to an empty string for all accounts created before 10/2/2016, and to `…` (U+2026) for accounts created after that date.
1421
+ **Warning:** Defaults to an empty string for all accounts created before February 10th, 2016.
1422
+ Defaults to `…` (U+2026, HORIZONTAL ELLIPSIS) for accounts created after that date.
1316
1423
 
1317
1424
  #### restrictHighlightAndSnippetArrays
1318
1425
 
1319
1426
  - scope: `settings` `search`
1320
- - type: `boolean`
1321
- - default: false
1427
+ - type: boolean
1428
+ - default: `false`
1322
1429
 
1323
- If set to true, restrict arrays in highlights and snippets to items that matched the query at least partially else return all array items in highlights and snippets.
1430
+ When true, restrict arrays in highlight and snippet results to items that matched the query at least partially.
1431
+ When false, return all array items in highlight and snippet results.
1324
1432
 
1325
1433
  ## Pagination
1326
1434
 
1327
1435
  #### page
1328
1436
 
1329
1437
  - scope: `search`
1330
- - type: `integer`
1331
- - default: 0
1438
+ - type: integer
1439
+ - default: `0`
1332
1440
 
1333
- Pagination parameter used to select the page to retrieve.
1441
+ Number of the page to retrieve.
1334
1442
 
1335
- **Warning:** Page is zero based. Thus, to retrieve the 10th page, you need to set `page=9`.
1443
+ **Warning:** Page numbers are zero-based. Therefore, in order to retrieve the 10th page, you need to set `page=9`.
1336
1444
 
1337
1445
  #### hitsPerPage
1338
1446
 
1339
1447
  - scope: `settings` `search`
1340
- - type: `integer`
1341
- - default: 20
1448
+ - type: integer
1449
+ - default: `20`
1342
1450
 
1343
- Pagination parameter used to select the number of hits per page.
1451
+ Maximum number of hits per page.
1344
1452
 
1345
1453
  #### offset
1346
1454
 
1347
1455
  - scope: `search`
1348
- - type: `integer`
1456
+ - type: integer
1457
+ - default: `null`
1349
1458
 
1350
1459
  Offset of the first hit to return (zero-based).
1351
1460
 
1352
- **Warning:** In most cases, `page`/`hitsPerPage` is the recommended method for pagination.
1461
+ **Note:** In most cases, [page](#page)/[hitsPerPage](#hitsperpage) is the recommended method for pagination.
1353
1462
 
1354
1463
  #### length
1355
1464
 
1356
1465
  - scope: `search`
1357
- - type: `integer`
1466
+ - type: integer
1467
+ - default: `null`
1358
1468
 
1359
- Offset of the first hit to return (zero-based).
1469
+ Maximum number of hits to return.
1360
1470
 
1361
- **Warning:** In most cases, `page`/`hitsPerPage` is the recommended method for pagination.
1471
+ **Note:** In most cases, [page](#page)/[hitsPerPage](#hitsperpage) is the recommended method for pagination.
1362
1472
 
1363
1473
  #### paginationLimitedTo
1364
1474
 
1365
1475
  - scope: `settings`
1366
- - type: `integer`
1367
- - default: 1000
1476
+ - type: integer
1477
+ - default: `1000`
1368
1478
 
1369
- Allows to control the maximum number of hits accessible via pagination.
1370
- By default, this parameter is limited to 1000 to guarantee good performance.
1479
+ Maximum number of hits accessible via pagination.
1480
+ By default, this parameter is set to 1000 to guarantee good performance.
1371
1481
 
1372
- **Warning:** We recommend to keep the default value to guarantee excellent performance.
1373
- Increasing this limit will have a direct impact on the performance of search.
1374
- A big value will also make it very easy for anyone to download all your dataset.
1482
+ **Caution:** We recommend keeping the default value to guarantee excellent performance.
1483
+ Increasing the pagination limit will have a direct impact on the performance of search queries.
1484
+ A too high value will also make it very easy for anyone to retrieve ("scrape") your entire dataset.
1375
1485
 
1376
1486
  ## Typos
1377
1487
 
1378
1488
  #### minWordSizefor1Typo
1379
1489
 
1380
1490
  - scope: `settings` `search`
1381
- - type: `integer`
1382
- - default: 4
1491
+ - type: integer
1492
+ - default: `4`
1383
1493
 
1384
- The minimum number of characters in the query string needed to accept results matching with one typo.
1494
+ Minimum number of characters a word in the query string must contain to accept matches with one typo.
1385
1495
 
1386
1496
  #### minWordSizefor2Typos
1387
1497
 
1388
1498
  - scope: `settings` `search`
1389
- - type: `integer`
1390
- - default: 8
1499
+ - type: integer
1500
+ - default: `8`
1391
1501
 
1392
- The minimum number of characters in the query string needed to accept results matching with two typos.
1502
+ Minimum number of characters a word in the query string must contain to accept matches with two typos.
1393
1503
 
1394
1504
  #### typoTolerance
1395
1505
 
1396
1506
  - scope: `settings` `search`
1397
- - type: `string`
1398
- - default: true
1507
+ - type: string \| boolean
1508
+ - default: `true`
1399
1509
 
1400
- This option allows you to control the number of typos allowed in the result set:
1510
+ Controls whether typo tolerance is enabled and how it is applied:
1401
1511
 
1402
1512
  * `true`:
1403
- The typo tolerance is enabled and all matching hits are retrieved (default behavior).
1513
+ Typo tolerance is enabled and all matching hits are retrieved (default behavior).
1404
1514
 
1405
1515
  * `false`:
1406
- The typo tolerance is disabled. All results with typos will be hidden.
1516
+ Typo tolerance is entirely disabled. Hits matching with only typos are not retrieved.
1407
1517
 
1408
1518
  * `min`:
1409
- Only keep results with the minimum number of typos. For example, if one result matches without typos, then all results with typos will be hidden.
1519
+ Only keep results with the minimum number of typos. For example, if just one hit matches without typos, then all hits with only typos are not retrieved.
1410
1520
 
1411
1521
  * `strict`:
1412
- Hits matching with 2 typos or more are not retrieved if there are some matching without typos.
1413
- This option is useful if you want to avoid as much as possible false positive.
1522
+ Hits matching with 2 typos or more are not retrieved if there are some hits matching without typos.
1523
+ This option is useful to avoid "false positives" as much as possible.
1414
1524
 
1415
1525
  #### allowTyposOnNumericTokens
1416
1526
 
1417
1527
  - scope: `settings` `search`
1418
- - type: `boolean`
1419
- - default: true
1528
+ - type: boolean
1529
+ - default: `true`
1420
1530
 
1421
- If set to false, disable typo-tolerance on numeric tokens (numbers) in the query string.
1422
- For example the query `\"304\"` will match with `\"30450\"`, but not with `\"40450\"`
1423
- that would have been the case with typo-tolerance enabled.
1531
+ Whether to allow typos on numbers ("numeric tokens") in the query string.
1424
1532
 
1425
- This option can be very useful on serial numbers and zip codes searches.
1533
+ When false, typo tolerance is disabled on numeric tokens.
1534
+ For example, the query `304` will match `30450` but not `40450`
1535
+ (which would have been the case with typo tolerance enabled).
1536
+
1537
+ **Note:** This option can be very useful on serial numbers and zip codes searches.
1426
1538
 
1427
1539
  #### ignorePlurals
1428
1540
 
1429
1541
  - scope: `settings` `search`
1430
- - type: `boolean` `array of strings`
1431
- - default: true
1542
+ - type: boolean \| array of strings
1543
+ - default: `false`
1432
1544
 
1433
1545
  Consider singular and plurals forms a match without typo.
1434
- For example, car and cars, or foot and feet will be considered equivalent.
1546
+ For example, "car" and "cars", or "foot" and "feet" will be considered equivalent.
1435
1547
 
1436
- This parameter can be:
1548
+ This parameter may be:
1437
1549
 
1438
- - a **boolean**: enable or disable plurals for all 59 supported languages.
1550
+ - a **boolean**: enable or disable plurals for all supported languages;
1439
1551
  - a **list of language ISO codes** for which plurals should be enabled.
1440
1552
 
1441
1553
  This option is set to `false` by default.
1442
1554
 
1443
- Here is the list of supported languages:
1555
+ List of supported languages with their associated ISO code:
1444
1556
 
1445
1557
  Afrikaans=`af`, Arabic=`ar`, Azeri=`az`, Bulgarian=`bg`, Catalan=`ca`,
1446
1558
  Czech=`cs`, Welsh=`cy`, Danis=`da`, German=`de`, English=`en`,
@@ -1452,32 +1564,32 @@ Lithuanian=`lt`, Maori=`mi`, Mongolian=`mn`, Marathi=`mr`, Malay=`ms`,
1452
1564
  Maltese=`mt`, Norwegian=`nb`, Dutch=`nl`, Northern Sotho=`ns`, Polish=`pl`,
1453
1565
  Pashto=`ps`, Portuguese=`pt`, Quechua=`qu`, Romanian=`ro`, Russian=`ru`,
1454
1566
  Slovak=`sk`, Albanian=`sq`, Swedish=`sv`, Swahili=`sw`, Tamil=`ta`,
1455
- Telugu=`te`, Tagalog=`tl`, Tswana=`tn`, Turkish=`tr`, Tatar=`tt`,
1567
+ Telugu=`te`, Tagalog=`tl`, Tswana=`tn`, Turkish=`tr`, Tatar=`tt`
1456
1568
 
1457
1569
  #### disableTypoToleranceOnAttributes
1458
1570
 
1459
1571
  - scope: `settings` `search`
1460
- - type: `array of strings`
1461
- - default: []
1572
+ - type: array of strings
1573
+ - default: `[]`
1462
1574
 
1463
1575
  List of attributes on which you want to disable typo tolerance
1464
- (must be a subset of the `searchableAttributes` index setting).
1576
+ (must be a subset of the [searchableAttributes](#searchableattributes) index setting).
1465
1577
 
1466
1578
  #### disableTypoToleranceOnWords
1467
1579
 
1468
1580
  - scope: `settings`
1469
- - type: `array of strings`
1470
- - default: []
1581
+ - type: array of strings
1582
+ - default: `[]`
1471
1583
 
1472
- Specify a list of words on which the automatic typo tolerance will be disabled.
1584
+ List of words on which typo tolerance will be disabled.
1473
1585
 
1474
1586
  #### separatorsToIndex
1475
1587
 
1476
1588
  - scope: `settings`
1477
- - type: `string`
1478
- - default: ""
1589
+ - type: string
1590
+ - default: `""`
1479
1591
 
1480
- Specify the separators (punctuation characters) to index.
1592
+ Separators (punctuation characters) to index.
1481
1593
 
1482
1594
  By default, separators are not indexed.
1483
1595
 
@@ -1487,7 +1599,7 @@ By default, separators are not indexed.
1487
1599
 
1488
1600
  Geo search requires that you provide at least one geo location in each record at indexing time, under the `_geoloc` attribute. Each location must be an object with two numeric `lat` and `lng` attributes. You may specify either one location:
1489
1601
 
1490
- ```
1602
+ ```json
1491
1603
  {
1492
1604
  "_geoloc": {
1493
1605
  "lat": 48.853409,
@@ -1498,7 +1610,7 @@ Geo search requires that you provide at least one geo location in each record at
1498
1610
 
1499
1611
  ... or an array of locations:
1500
1612
 
1501
- ```
1613
+ ```json
1502
1614
  {
1503
1615
  "_geoloc": [
1504
1616
  {
@@ -1513,130 +1625,151 @@ Geo search requires that you provide at least one geo location in each record at
1513
1625
  }
1514
1626
  ```
1515
1627
 
1628
+ When performing a geo search (either via [aroundLatLng](#aroundlatlng) or [aroundLatLngViaIP](#aroundlatlngviaip)),
1629
+ the maximum distance is automatically guessed based on the density of the searched area.
1630
+ You may explicitly specify a maximum distance, however, via [aroundRadius](#aroundradius).
1631
+
1632
+ The precision for the ranking is set via [aroundPrecision](#aroundprecision).
1633
+
1516
1634
  #### aroundLatLng
1517
1635
 
1518
1636
  - scope: `search`
1519
- - type: `string`
1520
- - default: ""
1637
+ - type: (latitude, longitude) pair
1638
+ - default: `null`
1521
1639
 
1522
1640
  Search for entries around a given location (specified as two floats separated by a comma).
1523
1641
 
1524
1642
  For example, `aroundLatLng=47.316669,5.016670`.
1525
1643
 
1526
- - By default the maximum distance is automatically guessed based on the density of the area
1527
- but you can specify it manually in meters with the **aroundRadius** parameter.
1528
- The precision for ranking can be set with **aroundPrecision** parameter.
1529
- - If you set aroundPrecision=100, the distances will be considered by ranges of 100m.
1530
- - For example all distances 0 and 100m will be considered as identical for the "geo" ranking parameter.
1644
+ <!-- TODO: Only document serialization format for the REST API. -->
1531
1645
 
1532
1646
  #### aroundLatLngViaIP
1533
1647
 
1534
1648
  - scope: `search`
1535
- - type: `boolean`
1536
- - default: false
1649
+ - type: boolean
1650
+ - default: `false`
1537
1651
 
1538
- Search for entries around a given latitude/longitude automatically computed from user IP address.
1652
+ Search for entries around a given location automatically computed from the requester's IP address.
1539
1653
 
1540
- To enable it, use `aroundLatLngViaIP=true`.
1541
-
1542
- You can specify the maximum distance in meters with the `aroundRadius` parameter
1543
- and the precision for ranking with `aroundPrecision`.
1544
-
1545
- For example:
1546
- - if you set aroundPrecision=100,
1547
- two objects that are in the range 0-99m
1548
- will be considered as identical in the ranking for the "geo" ranking parameter (same for 100-199, 200-299, ... ranges).
1654
+ **Warning:** If you are sending the request from your servers, you must set the `X-Forwarded-For` HTTP header with the client's IP
1655
+ address for it to be used as the basis for the computation of the search location.
1549
1656
 
1550
1657
  #### aroundRadius
1551
1658
 
1552
1659
  - scope: `search`
1553
- - type: `integer` `string`
1660
+ - type: integer \| `"all"`
1661
+ - default: `null`
1554
1662
 
1555
- Control the radius associated with a geo search. Defined in meters.
1663
+ Maximum radius for geo search (in meters).
1556
1664
 
1557
- If not set, the radius is computed automatically using the density of the area.
1558
- You can retrieve the computed radius in the `automaticRadius` attribute of the response.
1559
- You can also specify a minimum value for the automatic radius by using the `minimumAroundRadius` query parameter.
1665
+ If set, only hits within the specified radius from the searched location will be returned.
1560
1666
 
1561
- You can specify `aroundRadius=all` if you want to compute the geo distance without filtering in a geo area;
1562
- this option will be faster than specifying a big integer value.
1667
+ If not set, the radius is automatically computed from the density of the searched area.
1668
+ You can retrieve the computed radius in the `automaticRadius` response field.
1669
+ You may also specify a minimum value for the automatic radius via [minimumAroundRadius](#minimumaroundradius).
1670
+
1671
+ The special value `all` causes the geo distance to be computed and taken into account for ranking, but without filtering;
1672
+ this option is faster than specifying a high integer value.
1563
1673
 
1564
1674
  #### aroundPrecision
1565
1675
 
1566
1676
  - scope: `search`
1567
- - type: `integer`
1677
+ - type: integer
1678
+ - default: `1`
1679
+
1680
+ Precision of geo search (in meters).
1568
1681
 
1569
- Control the precision of a geo search.
1570
- Defined in meters.
1682
+ When ranking hits, geo distances are grouped into ranges of `aroundPrecision` size. All hits within the same range
1683
+ are considered equal with respect to the `geo` ranking parameter.
1571
1684
 
1572
- For example, if you set `aroundPrecision=100`, two objects that are in the range 0-99m will be considered as
1573
- identical in the ranking for the `geo` ranking parameter (same for 100-199, 200-299, ranges).
1685
+ For example, if you set `aroundPrecision` to `100`, any two objects lying in the range `[0, 99m]` from the searched
1686
+ location will be considered equal; same for `[100, 199]`, `[200, 299]`, etc.
1574
1687
 
1575
1688
  #### minimumAroundRadius
1576
1689
 
1577
1690
  - scope: `search`
1578
- - type: `integer`
1691
+ - type: integer
1692
+ - default: `null`
1579
1693
 
1580
- Define the minimum radius used for a geo search when `aroundRadius` is not set.
1581
- The radius is computed automatically using the density of the area.
1582
- You can retrieve the computed radius in the `automaticRadius` attribute of the answer.
1694
+ Minimum radius used for a geo search when [aroundRadius](#aroundradius) is not set.
1695
+
1696
+ **Note:** This parameter is ignored when `aroundRadius` is set.
1583
1697
 
1584
1698
  #### insideBoundingBox
1585
1699
 
1586
1700
  - scope: `search`
1587
- - type: `string`
1701
+ - type: geo rectangle(s)
1702
+ - default: `null`
1703
+
1704
+ Search inside a rectangular area (in geo coordinates).
1588
1705
 
1589
- Search entries inside a given area defined by the two extreme points of a rectangle
1590
- (defined by 4 floats: p1Lat,p1Lng,p2Lat,p2Lng).
1706
+ The rectange is defined by two diagonally opposite points (hereafter `p1` and `p2`),
1707
+ hence by 4 floats: `p1Lat`, `p1Lng`, `p2Lat`, `p2Lng`.
1591
1708
 
1592
1709
  For example:
1593
1710
 
1594
- - `insideBoundingBox=47.3165,4.9665,47.3424,5.0201`
1711
+ `insideBoundingBox=47.3165,4.9665,47.3424,5.0201`
1595
1712
 
1596
- You can use several bounding boxes (OR) by passing more than 4 values.
1597
- For example: instead of having 4 values you can pass 8 to search inside the UNION of two bounding boxes.
1713
+ You may specify multiple bounding boxes, in which case the search will use the **union** (OR) of the rectangles.
1714
+ To specify multiple rectangles, pass either:
1715
+
1716
+ - more than 4 values (must be a multiple of 4: 8, 12...);
1717
+ example: `47.3165,4.9665,47.3424,5.0201,40.9234,2.1185,38.6430,1.9916`; or
1718
+ - an array of arrays of floats (each inner array must contain exactly 4 values);
1719
+ example: `[[47.3165, 4.9665, 47.3424, 5.0201], [40.9234, 2.1185, 38.6430, 1.9916]`.
1598
1720
 
1599
1721
  #### insidePolygon
1600
1722
 
1601
1723
  - scope: `search`
1602
- - type: `string`
1603
- - default: ""
1724
+ - type: geo polygon(s)
1725
+ - default: `null`
1604
1726
 
1605
- Search entries inside a given area defined by a set of points
1606
- (defined by a minimum of 6 floats: p1Lat,p1Lng,p2Lat,p2Lng,p3Lat,p3Long).
1727
+ Search inside a polygon (in geo coordinates).
1607
1728
 
1608
- For example:
1609
-
1610
- - `InsidePolygon=47.3165,4.9665,47.3424,5.0201,47.32,4.98`
1611
-
1729
+ The polygon is defined by a set of points (minimum 3), each defined by its latitude and longitude.
1730
+ You therefore need an even number of floats, with a minimum of 6: `p1Lat`, `p1Lng`, `p2Lat`, `p2Lng`, `p3Lat`, `p3Long`.
1731
+
1732
+ For example:
1733
+
1734
+ `insidePolygon=47.3165,4.9665,47.3424,5.0201,47.32,4.98`
1735
+
1736
+ You may specify multiple polygons, in which case the search will use the **union** (OR) of the polygons.
1737
+ To specify multiple polygons, pass an array of arrays of floats (each inner array must contain an even number of
1738
+ values, with a minimum of 6);
1739
+ example: `[[47.3165, 4.9665, 47.3424, 5.0201, 47.32, 4.9], [40.9234, 2.1185, 38.6430, 1.9916, 39.2587, 2.0104]]`.
1612
1740
 
1613
1741
  ## Query Strategy
1614
1742
 
1615
1743
  #### queryType
1616
1744
 
1617
- - scope: `settings`
1618
- - type: `string`
1619
- - default: prefixLast
1745
+ - scope: `search` `settings`
1746
+ - type: string
1747
+ - default: `"prefixLast"`
1620
1748
 
1621
- Selects how the query words are interpreted. It can be one of the following values:
1749
+ Controls if and how query words are interpreted as prefixes.
1750
+
1751
+ It may be one of the following values:
1622
1752
 
1623
1753
  * `prefixLast`:
1624
1754
  Only the last word is interpreted as a prefix (default behavior).
1625
1755
 
1626
1756
  * `prefixAll`:
1627
- All query words are interpreted as prefixes. This option is not recommended.
1757
+ All query words are interpreted as prefixes. This option is not recommended, as it tends to yield counterintuitive
1758
+ results and has a negative impact on performance.
1628
1759
 
1629
1760
  * `prefixNone`:
1630
- No query word is interpreted as a prefix. This option is not recommended.
1761
+ No query word is interpreted as a prefix. This option is not recommended, especially in an instant search setup,
1762
+ as the user will have to type the entire word(s) before getting any relevant results.
1631
1763
 
1632
1764
  #### removeWordsIfNoResults
1633
1765
 
1634
1766
  - scope: `settings` `search`
1635
- - type: `string`
1636
- - default: none
1767
+ - type: string
1768
+ - default: `"none"`
1769
+
1770
+ Selects a strategy to remove words from the query when it doesn't match any hits.
1637
1771
 
1638
- This option is used to select a removing of words strategy when the query doesn't retrieve any results.
1639
- It can be used to avoid having an empty result page
1772
+ The goal is to avoid empty results by progressively loosening the query until hits are matched.
1640
1773
 
1641
1774
  There are four different options:
1642
1775
 
@@ -1644,77 +1777,96 @@ There are four different options:
1644
1777
  No specific processing is done when a query does not return any results (default behavior).
1645
1778
 
1646
1779
  - `lastWords`:
1647
- When a query does not return any results, the last word will be added as optional.
1648
- The process is repeated with n-1 word, n-2 word, ... until there are results.
1780
+ When a query does not return any results, treat the last word as optional.
1781
+ The process is repeated with words N-1, N-2, etc. until there are results, or the beginning of the query string has been reached.
1649
1782
 
1650
1783
  - `firstWords`:
1651
- When a query does not return any results, the first word will be added as optional.
1652
- The process is repeated with second word, third word, ... until there are results.
1784
+ When a query does not return any results, treat the first word as optional.
1785
+ The process is repeated with words 2, 3, etc. until there are results, or the end of the query string has been reached.
1786
+
1653
1787
  - `allOptional`:
1654
- When a query does not return any results, a second trial will be made with all words as optional.
1655
- This is equivalent to transforming the AND operand between query terms to an OR operand.
1788
+ When a query does not return any results, make a second attempt treating all words as optional.
1789
+ This is equivalent to transforming the implicit AND operator applied between query words to an OR.
1656
1790
 
1657
1791
  #### advancedSyntax
1658
1792
 
1659
1793
  - scope: `settings` `search`
1660
- - type: `boolean`
1661
- - default: false
1794
+ - type: boolean
1795
+ - default: `false`
1662
1796
 
1663
1797
  Enables the advanced query syntax.
1664
1798
 
1665
- This syntax allow to do two things:
1799
+ This advanced syntax brings two additional features:
1666
1800
 
1667
- - **Phrase query**: A phrase query defines a particular sequence of terms. A phrase query needs to be surrounded by `"`.
1668
- For example, `"search engine"` will retrieve records having `search` next to `engine` only.
1801
+ - **Phrase query**: a specific sequence of terms that must be matched next to one another.
1802
+ A phrase query needs to be surrounded by double quotes (`"`).
1803
+ For example, `"search engine"` will only match records having `search` next to `engine`.
1669
1804
 
1670
- Typo tolerance is disabled inside the phrase (inside the `"`).
1805
+ Typo tolerance is disabled inside the phrase (i.e. within the quotes).
1671
1806
 
1672
1807
 
1673
- - **Prohibit operator**: The prohibit operator excludes records that contain the term after the `-` symbol.
1674
- For example, `search -engine` will retrieve records containing `search` but not `engine`.
1808
+ - **Prohibit operator**: excludes records that contain a specific term.
1809
+ This term has to be prefixed by a minus (`-`, a.k.a dash).
1810
+ For example, `search -engine` will only match records containing `search` but not `engine`.
1675
1811
 
1676
1812
  #### optionalWords
1677
1813
 
1678
1814
  - scope: `settings` `search`
1679
- - type: `string` `array of string`
1680
- - default: ""
1815
+ - type: string \| array of strings
1816
+ - default: `[]`
1681
1817
 
1682
- The list of words that should be considered as optional when found in the query.
1818
+ List of words that should be considered as optional when found in the query.
1683
1819
 
1684
- If you use the specify the optionnal words with a string you don't need to put coma in between words.
1685
- The engine will tokenize the string into words that will all be considered as optional.
1820
+ This parameter can be useful when you want to do an **OR** between all words of the query.
1821
+ To do that you can set optionalWords equals to the search query.
1822
+
1823
+ ```js
1824
+ var query = 'the query';
1825
+ var params = {'optionalWords': query};
1826
+ ```
1827
+
1828
+ **Note:** You don't need to put commas between words.
1829
+ Each string will automatically be tokenized into words, all of which will be considered as optional.
1686
1830
 
1687
1831
  #### removeStopWords
1688
1832
 
1689
1833
  - scope: `settings` `search`
1690
- - type: `boolean` `array of string`
1691
- - default: false
1834
+ - type: boolean \| array of strings
1835
+ - default: `false`
1692
1836
 
1693
- Remove stop words from the query **before** executing it. It can be:
1837
+ Remove stop words from the query **before** executing it.
1694
1838
 
1695
- - a **boolean**: enable or disable stop words for all 41 supported languages; or
1696
- - a **list of language ISO codes** (as a comma-separated string) for which stop words should be enabled.
1839
+ This parameter may be:
1697
1840
 
1698
- In most use-cases, **we don’t recommend enabling this option**.
1841
+ - a **boolean**: enable or disable stop words for all supported languages; or
1842
+ - a **list of language ISO codes** for which stop word removal should be enabled.
1699
1843
 
1700
- List of 41 supported languages with their associated iso code: Arabic=`ar`, Armenian=`hy`, Basque=`eu`, Bengali=`bn`, Brazilian=`pt-br`, Bulgarian=`bg`, Catalan=`ca`, Chinese=`zh`, Czech=`cs`, Danish=`da`, Dutch=`nl`, English=`en`, Finnish=`fi`, French=`fr`, Galician=`gl`, German=`de`, Greek=`el`, Hindi=`hi`, Hungarian=`hu`, Indonesian=`id`, Irish=`ga`, Italian=`it`, Japanese=`ja`, Korean=`ko`, Kurdish=`ku`, Latvian=`lv`, Lithuanian=`lt`, Marathi=`mr`, Norwegian=`no`, Persian (Farsi)=`fa`, Polish=`pl`, Portugese=`pt`, Romanian=`ro`, Russian=`ru`, Slovak=`sk`, Spanish=`es`, Swedish=`sv`, Thai=`th`, Turkish=`tr`, Ukranian=`uk`, Urdu=`ur`.
1844
+ **Warning:** In most use-cases, **we don't recommend enabling stop word removal**.
1701
1845
 
1702
- Stop words removal is applied on query words that are not interpreted as a prefix. The behavior depends of the `queryType` parameter:
1846
+ Stop word removal is useful when you have a query in natural language, e.g. "what is a record?".
1847
+ In that case, the engine will remove "what", "is" and "a" before executing the query, and therefore just search for "record".
1848
+ This will remove false positives caused by stop words, especially when combined with optional words
1849
+ (see [optionalWords](#optionalwords) and [removeWordsIfNoResults](#removewordsifnoresults)).
1850
+ For most use cases, however, it is better not to use this feature, as people tend to search by keywords on search engines
1851
+ (i.e. they naturally omit stop words).
1703
1852
 
1704
- * `queryType=prefixLast` means the last query word is a prefix and it won’t be considered for stop words removal
1705
- * `queryType=prefixNone` means no query word are prefix, stop words removal will be applied on all query words
1706
- * `queryType=prefixAll` means all query terms are prefix, stop words won’t be removed
1853
+ **Note:** Stop words removal is only applied on query words that are *not* interpreted as prefixes.
1707
1854
 
1708
- This parameter is useful when you have a query in natural language like “what is a record?”.
1709
- In this case, before executing the query, we will remove “what”, “is” and “a” in order to just search for “record”.
1710
- This removal will remove false positive because of stop words, especially when combined with optional words.
1711
- For most use cases, it is better to not use this feature as people search by keywords on search engines.
1855
+ As a consequence, the behavior of `removeStopWords` also depends on the [queryType](#querytype) parameter:
1856
+
1857
+ * `queryType=prefixLast` means the last query word is a prefix and won't be considered for stop word removal;
1858
+ * `queryType=prefixNone` means no query word is a prefix, therefore stop word removal will be applied to all query words;
1859
+ * `queryType=prefixAll` means all query words are prefixes, therefore no stop words will be removed.
1860
+
1861
+ List of supported languages with their associated ISO code:
1862
+
1863
+ Arabic=`ar`, Armenian=`hy`, Basque=`eu`, Bengali=`bn`, Brazilian=`pt-br`, Bulgarian=`bg`, Catalan=`ca`, Chinese=`zh`, Czech=`cs`, Danish=`da`, Dutch=`nl`, English=`en`, Finnish=`fi`, French=`fr`, Galician=`gl`, German=`de`, Greek=`el`, Hindi=`hi`, Hungarian=`hu`, Indonesian=`id`, Irish=`ga`, Italian=`it`, Japanese=`ja`, Korean=`ko`, Kurdish=`ku`, Latvian=`lv`, Lithuanian=`lt`, Marathi=`mr`, Norwegian=`no`, Persian (Farsi)=`fa`, Polish=`pl`, Portugese=`pt`, Romanian=`ro`, Russian=`ru`, Slovak=`sk`, Spanish=`es`, Swedish=`sv`, Thai=`th`, Turkish=`tr`, Ukranian=`uk`, Urdu=`ur`.
1712
1864
 
1713
1865
  #### disablePrefixOnAttributes
1714
1866
 
1715
- - scope: `seetings`
1716
- - type: `array of strings`
1717
- - default: []
1867
+ - scope: `settings`
1868
+ - type: array of strings
1869
+ - default: `[]`
1718
1870
 
1719
1871
  List of attributes on which you want to disable prefix matching
1720
1872
  (must be a subset of the `searchableAttributes` index setting).
@@ -1725,90 +1877,256 @@ This setting is useful on attributes that contain string that should not be matc
1725
1877
  #### disableExactOnAttributes
1726
1878
 
1727
1879
  - scope: `settings`
1728
- - type: `search`
1729
- - default: []
1880
+ - type: search
1881
+ - default: `[]`
1730
1882
 
1731
- List of attributes on which you want to disable the computation of `exact` criteria
1883
+ List of attributes on which you want to disable computation of the `exact` ranking criterion
1732
1884
  (must be a subset of the `searchableAttributes` index setting).
1733
1885
 
1734
1886
  #### exactOnSingleWordQuery
1735
1887
 
1736
1888
  - scope: `settings` `search`
1737
- - type: `string`
1738
- - default: attribute
1889
+ - type: string
1890
+ - default: `attribute`
1739
1891
 
1740
- This parameter control how the `exact` ranking criterion is computed when the query contains one word. There are three different values:
1892
+ Controls how the `exact` ranking criterion is computed when the query contains only one word.
1741
1893
 
1742
- * `none`: no exact on single word query
1743
- * `word`: exact set to 1 if the query word is found in the record. The query word needs to have at least 3 chars and not be part of our stop words dictionary
1744
- * `attribute` (default): exact set to 1 if there is an attribute containing a string equals to the query
1894
+ The following values are allowed:
1895
+
1896
+ * `none`: the `exact` ranking criterion is ignored on single word queries;
1897
+ * `word`: the `exact` ranking criterion is set to 1 if the query word is found in the record.
1898
+ The query word must be at least 3 characters long and must not be a stop word in any supported language.
1899
+ * `attribute` (default): the `exact` ranking criterion is set to 1 if the query string exactly matches an entire attribute value.
1900
+ For example, if you search for the TV show "V", you want it to match the query "V" *before* all popular TV shows starting with the letter V.
1745
1901
 
1746
1902
  #### alternativesAsExact
1747
1903
 
1748
1904
  - scope: `setting` `search`
1749
- - type: `array of string`
1750
- - default: ['ignorePlurals', 'singleWordSynonym']
1905
+ - type: array of strings
1906
+ - default: `["ignorePlurals", "singleWordSynonym"]`
1907
+
1908
+ List of alternatives that should be considered an exact match by the `exact` ranking criterion.
1751
1909
 
1752
- Specify the list of approximation that should be considered as an exact match in the ranking formula:
1910
+ The following values are allowed:
1753
1911
 
1754
- * `ignorePlurals`: alternative words added by the ignorePlurals feature
1755
- * `singleWordSynonym`: single-word synonym (For example "NY" = "NYC")
1756
- * `multiWordsSynonym`: multiple-words synonym (For example "NY" = "New York")
1912
+ * `ignorePlurals`: alternative words added by the [ignorePlurals](#ignoreplurals) feature;
1913
+ * `singleWordSynonym`: single-word synonyms (example: "NY" = "NYC");
1914
+ * `multiWordsSynonym`: multiple-words synonyms (example: "NY" = "New York").
1757
1915
 
1758
- ## performance
1916
+ ## Performance
1759
1917
 
1760
1918
  #### numericAttributesForFiltering
1761
1919
 
1762
1920
  - scope: `settings`
1763
- - type: `array of strings`
1764
- - default: []
1921
+ - type: array of strings
1922
+ - default: all numeric attributes
1765
1923
  - formerly known as: `numericAttributesToIndex`
1766
1924
 
1767
- All numerical attributes are automatically indexed as numerical filters
1768
- (allowing filtering operations like `<` and `<=`).
1769
- If you don't need filtering on some of your numerical attributes,
1770
- you can specify this list to speed up the indexing.
1925
+ List of numeric attributes that can be used as numerical filters.
1926
+
1927
+ If not specified, all numeric attributes are automatically indexed and available as numerical filters
1928
+ (via the [filters](#filters) parameter).
1929
+ If specified, only attributes explicitly listed are available as numerical filters.
1930
+ If empty, no numerical filters are allowed.
1931
+
1932
+ If you don't need filtering on some of your numerical attributes, you can use `numericAttributesForFiltering` to
1933
+ speed up the indexing.
1771
1934
 
1772
- If you only need to filter on a numeric value with the operator `=` or `!=`,
1773
- you can speed up the indexing by specifying the attribute with `equalOnly(AttributeName)`.
1774
- The other operators will be disabled.
1935
+ If you only need to filter on a numeric value based on equality (i.e. with the operators `=` or `!=`),
1936
+ you can speed up the indexing by specifying `equalOnly(${attributeName})`.
1937
+ Other operators will be disabled.
1775
1938
 
1776
1939
  #### allowCompressionOfIntegerArray
1777
1940
 
1778
1941
  - scope: `settings`
1779
- - type: `boolean`
1780
- - default: false
1942
+ - type: boolean
1943
+ - default: `false`
1781
1944
 
1782
- Allows compression of big integer arrays.
1945
+ Enables compression of large integer arrays.
1783
1946
 
1784
- In data-intensive use-cases,
1785
- we recommended enabling this feature and then storing the list of user IDs or rights as an integer array.
1786
- When enabled, the integer array is reordered to reach a better compression ratio.
1947
+ In data-intensive use-cases, we recommended enabling this feature to reach a better compression ratio on arrays
1948
+ exclusively containing integers (as is typical of lists of user IDs or ACLs).
1949
+
1950
+ **Note:** When enabled, integer arrays may be reordered.
1787
1951
 
1788
1952
  ## Advanced
1789
1953
 
1790
1954
  #### attributeForDistinct
1791
1955
 
1792
1956
  - scope: `settings`
1793
- - type: `string`
1957
+ - type: string
1958
+ - default: `null`
1959
+
1960
+ Name of the de-duplication attribute for the [distinct](#distinct) feature.
1961
+
1962
+ #### distinct
1963
+
1964
+ - scope: `settings` `search`
1965
+ - type: integer \| boolean
1966
+ - default: `0`
1967
+
1968
+ Controls de-duplication of results.
1969
+
1970
+ A non-zero value enables de-duplication; a zero value disables it.
1971
+ Booleans are also accepted (though not recommended): false is treated as 0, and true is treated as 1.
1972
+
1973
+ **Note:** De-duplication requires a **de-duplication attribute** to be configured via the [attributeForDistinct](#attributefordistinct) index setting.
1974
+ If not configured, `distinct` will be accepted at query time but silently ignored.
1975
+
1976
+ This feature is similar to the SQL `distinct` keyword. When set to N (where N > 0), at most N hits will be returned
1977
+ with the same value for the de-duplication attribute.
1978
+
1979
+ **Example:** If the de-duplication attribute is `show_name` and `distinct` is set to 1, then if several hits have the
1980
+ same value for `show_name`, only the most relevant one is kept (with respect to the ranking formula); the others are removed.
1981
+
1982
+ To get a full understanding of how `distinct` works,
1983
+ you can have a look at our [Guides](https://www.algolia.com/doc/guides/search/distinct).
1984
+
1985
+ #### getRankingInfo
1986
+
1987
+ - scope: `search`
1988
+ - type: boolean
1989
+ - default: `false`
1990
+
1991
+ Enables detailed ranking information.
1992
+
1993
+ When true, each hit in the response contains an additional `_rankingInfo` object containing the following fields:
1794
1994
 
1795
- The name of the attribute used for the `Distinct` feature.
1995
+ <!-- TODO: Factorize this list with the Search Response Format section. -->
1796
1996
 
1797
- This feature is similar to the SQL "distinct" keyword.
1798
- When enabled in queries with the `distinct=1` parameter,
1799
- all hits containing a duplicate value for this attribute are removed from the results.
1997
+ - `nbTypos` (integer): Number of typos encountered when matching the record. Corresponds to the `typos` ranking criterion in the ranking formula.
1800
1998
 
1801
- For example, if the chosen attribute is `show_name` and several hits have the same value for `show_name`,
1802
- then only the first one is kept and the others are removed from the results.
1999
+ - `firstMatchedWord` (integer): Position of the most important matched attribute in the attributes to index list. Corresponds to the `attribute` ranking criterion in the ranking formula.
1803
2000
 
1804
- To get a full understanding of how `Distinct` works,
1805
- you can have a look at our [guide on distinct](https://www.algolia.com/doc/search/distinct).
2001
+ - `proximityDistance` (integer): When the query contains more than one word, the sum of the distances between matched words. Corresponds to the `proximity` criterion in the ranking formula.
2002
+
2003
+ - `userScore` (integer): Custom ranking for the object, expressed as a single numerical value. Conceptually, it's what the position of the object would be in the list of all objects sorted by custom ranking. Corresponds to the `custom` criterion in the ranking formula.
2004
+
2005
+ - `geoDistance` (integer): Distance between the geo location in the search query and the best matching geo location in the record, divided by the geo precision.
2006
+
2007
+ - `geoPrecision` (integer): Precision used when computed the geo distance, in meters. All distances will be floored to a multiple of this precision.
2008
+
2009
+ - `nbExactWords` (integer): Number of exactly matched words. If `alternativeAsExact` is set, it may include plurals and/or synonyms.
2010
+
2011
+ - `words` (integer): Number of matched words, including prefixes and typos.
2012
+
2013
+ - `filters` (integer): *This field is reserved for advanced usage.* It will be zero in most cases.
2014
+
2015
+ In addition, the response contains the following additional top-level fields:
2016
+
2017
+ - `serverUsed` (string): Actual host name of the server that processed the request. (Our DNS supports automatic failover and load balancing, so this may differ from the host name used in the request.)
2018
+
2019
+ - `parsedQuery` (string): The query string that will be searched, after normalization. Normalization includes removing stop words (if [removeStopWords](#removestopwords) is enabled), and transforming portions of the query string into phrase queries (see [advancedSyntax](#advancedsyntax)).
2020
+
2021
+ - `timeoutCounts` (boolean): Whether a timeout was hit when computing the facet counts. When `true`, the counts will be interpolated (i.e. approximate). See also `exhaustiveFacetsCount`.
2022
+
2023
+ - `timeoutHits` (boolean): Whether a timeout was hit when retrieving the hits. When true, some results may be missing.
2024
+
2025
+ #### numericFilters
2026
+
2027
+ - scope: `search`
2028
+ - type: array of strings
2029
+ - default: `[]`
2030
+
2031
+ Filter hits based on values of numeric attributes.
2032
+
2033
+ **Note:** The [filters](#filters) parameter provides an easier to use, SQL-like syntax.
2034
+ We recommend using it instead of `numericFilters`.
2035
+
2036
+ Each string represents a filter on a numeric attribute. Two forms are supported:
2037
+
2038
+ - **Comparison**: `${attributeName} ${operator} ${operand}` matches all objects where the specified numeric attribute satisfies the numeric condition expressed by the operator and the operand. The operand must be a numeric value. Supported operators are `<`, `<=`, `=`, `!=`, `>=` and `>`, with the same semantics as in virtually all programming languages.
2039
+ Example: `inStock > 0`.
2040
+
2041
+ - **Range**: `${attributeName}:${lowerBound} TO ${upperBound}` matches all objects where the specified numeric
2042
+ attribute is within the range [`${lowerBound}`, `${upperBound}`] \(inclusive on both ends).
2043
+ Example: `price: 0 TO 1000`.
2044
+
2045
+ If you specify multiple filters, they are interpreted as a conjunction (AND). If you want to use a disjunction (OR),
2046
+ use a nested array.
2047
+
2048
+ Examples:
2049
+
2050
+ - `["inStock > 0", "price < 1000"]` translates as `inStock > 0 AND price < 1000`
2051
+ - `[["inStock > 0", "deliveryDate < 1441755506"], "price < 1000"]` translates as `(inStock > 0 OR deliveryDate < 1441755506) AND price < 1000`
2052
+
2053
+ #### tagFilters
2054
+
2055
+ - scope: `search`
2056
+ - type: array of strings
2057
+ - default: `[]`
2058
+
2059
+ Filter hits by tags.
2060
+
2061
+ Tags must be contained in a top-level `_tags` attribute of your objects at indexing time.
2062
+
2063
+ **Note:** Tags are essentially an implicit facet on the `_tags` attribute.
2064
+ We therefore recommend that you use facets instead.
2065
+ See [attributesForFaceting](#attributesforfaceting) and [facets](#facets).
2066
+
2067
+ **Note:** The [filters](#filters) parameter provides an easier to use, SQL-like syntax.
2068
+ We recommend using it instead of `tagFilters`.
2069
+
2070
+ Each string represents a given tag value that must be matched.
2071
+
2072
+ If you specify multiple tags, they are interpreted as a conjunction (AND). If you want to use a disjunction (OR),
2073
+ use a nested array.
2074
+
2075
+ Examples:
2076
+
2077
+ - `["Book", "Movie"]` translates as `Book AND Movie`
2078
+ - `[["Book", "Movie"], "SciFi"]` translates as `(Book OR Movie) AND SciFi"`
2079
+
2080
+ Negation is supported by prefixing the tag value with a minus sign (`-`, a.k.a. dash).
2081
+ For example: `["tag1", "-tag2"]` translates as `tag1 AND NOT tag2`.
2082
+
2083
+ #### analytics
2084
+
2085
+ - scope: `search`
2086
+ - type: boolean
2087
+ - default: `true`
2088
+
2089
+ Whether the current query will be taken into account in the Analytics.
2090
+
2091
+ #### analyticsTags
2092
+
2093
+ - scope: `search`
2094
+ - type: array of strings
2095
+ - default: `[]`
2096
+
2097
+ List of tags to apply to the query in the Analytics.
2098
+
2099
+ Tags can be used in the Analytics to filter searches.
2100
+
2101
+ #### synonyms
2102
+
2103
+ - scope: `search`
2104
+ - type: boolean
2105
+ - default: `true`
2106
+
2107
+ Whether to take into account synonyms defined for the targeted index.
2108
+
2109
+ #### replaceSynonymsInHighlight
2110
+
2111
+ - scope: `settings` `search`
2112
+ - type: boolean
2113
+ - default: `true`
2114
+
2115
+ Whether to replace words matched via synonym expansion by the matched synonym in highlight and snippet results.
2116
+
2117
+ When true, highlighting and snippeting will use words from the query rather than the original words from the objects.
2118
+ When false, highlighting and snippeting will always display the original words from the objects.
2119
+
2120
+ **Note:** Multiple words can be replaced by a one-word synonym, but not the other way round.
2121
+ For example, if "NYC" and "New York City" are synonyms, searching for "NYC" will replace "New York City" with "NYC"
2122
+ in highlights and snippets, but searching for "New York City" will *not* replace "NYC" with "New York City" in
2123
+ highlights and snippets.
1806
2124
 
1807
2125
  #### placeholders
1808
2126
 
1809
2127
  - scope: `settings`
1810
- - type: `hash of array of words`
1811
- - default: ""
2128
+ - type: object of array of words
2129
+ - default: `{}`
1812
2130
 
1813
2131
  This is an advanced use-case to define a token substitutable by a list of words
1814
2132
  without having the original token searchable.
@@ -1829,8 +2147,8 @@ For example:
1829
2147
  #### altCorrections
1830
2148
 
1831
2149
  - scope: `settings`
1832
- - type: `array of objects`
1833
- - default: []
2150
+ - type: array of objects
2151
+ - default: `[]`
1834
2152
 
1835
2153
  Specify alternative corrections that you want to consider.
1836
2154
 
@@ -1852,24 +2170,26 @@ For example:
1852
2170
  #### minProximity
1853
2171
 
1854
2172
  - scope: `settings` `search`
1855
- - type: `integer`
1856
- - default: 1
2173
+ - type: integer
2174
+ - default: `1`
1857
2175
 
1858
- Configure the precision of the `proximity` ranking criterion.
1859
- By default, the minimum (and best) proximity value distance between 2 matching words is 1.
2176
+ Precision of the `proximity` ranking criterion.
1860
2177
 
1861
- Setting it to 2 (or 3) would allow 1 (or 2) words to be found between the matching words without degrading the proximity ranking value.
2178
+ By default, the minimum (and best) proximity value between two matching words is 1.
1862
2179
 
1863
- Considering the query *“javascript framework”*, if you set `minProximity=2`, the records *“JavaScript framework”* and *“JavaScript charting framework”*
1864
- will get the same proximity score, even if the second contains a word between the two matching words.
2180
+ Setting it to 2 (respectively N) would allow 1 (respectively N-1) additional word(s) to be found between two matching words without degrading the proximity ranking value.
1865
2181
 
1866
- **Note:** the maximum `minProximity` that can be set is 7. Any higher value will disable the `proximity` criterion from the ranking formula.
2182
+ **Example:** considering the query *"javascript framework"*, if you set `minProximity` to 2,
2183
+ two records containing respectively *"JavaScript framework"* and *"JavaScript charting framework"*
2184
+ will get the same proximity score, even if the latter contains an additional word between the two matching words.
2185
+
2186
+ **Note:** The maximum value for `minProximity` is 7. Any higher value will **disable** the `proximity` criterion in the ranking formula.
1867
2187
 
1868
2188
  #### responseFields
1869
2189
 
1870
2190
  - scope: `settings` `search`
1871
- - type: `array of strings`
1872
- - default: * (all fields)
2191
+ - type: array of strings
2192
+ - default: `*` (all fields)
1873
2193
 
1874
2194
  Choose which fields the response will contain. Applies to search and browse queries.
1875
2195
 
@@ -1878,9 +2198,9 @@ listed will be returned, unless `*` is used, in which case all fields are return
1878
2198
  Specifying an empty list or unknown field names is an error.
1879
2199
 
1880
2200
  This parameter is mainly intended to limit the response size.
1881
- For example, for complex queries, echoing of request parameters in the response's `params` field can be undesirable.
2201
+ For example, in complex queries, echoing of request parameters in the response's `params` field can be undesirable.
1882
2202
 
1883
- Here is the list of field that can be filtered:
2203
+ List of fields that can be filtered out:
1884
2204
 
1885
2205
  - `aroundLatLng`
1886
2206
  - `automaticRadius`
@@ -1900,119 +2220,16 @@ Here is the list of field that can be filtered:
1900
2220
  - `query`
1901
2221
  - `queryAfterRemoval`
1902
2222
 
1903
- Here is the list of fields cannot be filtered out:
2223
+ List of fields that *cannot* be filtered out:
1904
2224
 
1905
2225
  - `message`
1906
2226
  - `warning`
1907
2227
  - `cursor`
1908
2228
  - `serverUsed`
1909
- - `timeoutCounts`
1910
- - `timeoutHits`
2229
+ - `timeoutCounts` (deprecated, please use `exhaustiveFacetsCount` instead)
2230
+ - `timeoutHits` (deprecated, please use `exhaustiveFacetsCount` instead)
1911
2231
  - `parsedQuery`
1912
- - fields triggered explicitly via [getRankingInfo](#getrankinginfo)
1913
-
1914
- #### distinct
1915
-
1916
- - scope: `settings` `search`
1917
- - type: `boolean`
1918
- - default: 0
1919
-
1920
- If set to 1 it
1921
- enables the distinct feature, disabled by default, if the `attributeForDistinct` index setting is set.
1922
-
1923
- This feature is similar to the SQL "distinct" keyword.
1924
- When enabled in a query with the `distinct=1` parameter,
1925
- all hits containing a duplicate value for the attributeForDistinct attribute are removed from results.
1926
-
1927
- For example, if the chosen attribute is `show_name` and several hits have the same value for `show_name`,
1928
- then only the best one is kept and the others are removed.
1929
-
1930
- To get a full understanding of how `Distinct` works,
1931
- you can have a look at our [guide on distinct](https://www.algolia.com/doc/search/distinct).
1932
-
1933
- #### getRankingInfo
1934
-
1935
- - scope: `search`
1936
- - type: `boolean`
1937
- - default: false
1938
-
1939
- If set to true,
1940
- the result hits will contain ranking information in the **_rankingInfo** attribute.
1941
-
1942
- #### numericFilters
1943
-
1944
- - scope: `search`
1945
- - type: `array of strings`
1946
- - default: []
1947
-
1948
- *If you are not using this parameter to generate filters programatically you should use [filters](#filters) instead*
1949
-
1950
- List of numeric filters you want to apply.
1951
- The filter syntax is `attributeName` followed by `operand` followed by `value`.
1952
- Supported operands are `<`, `<=`, `=`, `>` and `>=`.
1953
-
1954
- You can easily perform range queries via the `:` operator.
1955
- This is equivalent to combining a `>=` and `<=` operand.
1956
- For example, `numericFilters=price:10 to 1000`.
1957
-
1958
- You can also mix OR and AND operators.
1959
- The OR operator is defined with a parenthesis syntax.
1960
- For example, `code=1 AND (price:[0-100] OR price:[1000-2000])`
1961
- translates to `code=1,(price:0 to 100,price:1000 to 2000)`.
1962
-
1963
- #### tagFilters (deprecated)
1964
-
1965
- - scope: `search`
1966
- - type: `array of string`
1967
- - default: ""
1968
-
1969
- **This parameter is deprecated. You should use [filters](#filters) instead.**
1970
-
1971
- Filter the query by a set of tags.
1972
-
1973
- You can AND tags by separating them with commas.
1974
- To OR tags, you must add parentheses.
1975
-
1976
- For example: `["tag1",["tag2","tag3"]]` means `tag1 AND (tag2 OR tag3)`.
1977
-
1978
- Negations are supported via the `-` operator, prefixing the value.
1979
-
1980
- For example: `["tag1", "-tag2"]`.
1981
-
1982
- At indexing, tags should be added in the **_tags** attribute of objects.
1983
-
1984
- For example `{"_tags":["tag1","tag2"]}`.
1985
-
1986
- #### analytics
1987
-
1988
- - scope: `search`
1989
- - type: `boolean`
1990
- - default: true
1991
-
1992
- If set to false, this query will not be taken into account in the analytics.
1993
-
1994
- #### analyticsTags
1995
-
1996
- - scope: `search`
1997
- - type: `array of strings`
1998
-
1999
- If set, tag your query with the specified identifiers. Tags can then be used in the Analytics to analyze a subset of searches only.
2000
-
2001
- #### synonyms
2002
-
2003
- - scope: `search`
2004
- - type: `boolean`
2005
- - default: true
2006
-
2007
- If set to `false`, the search will not use the synonyms defined for the targeted index.
2008
-
2009
- #### replaceSynonymsInHighlight
2010
-
2011
- - scope: `settings` `search`
2012
- - type: `boolean`
2013
- - default: true
2014
-
2015
- If set to `false`, words matched via synonyms expansion will not be replaced by the matched synonym in the highlighted result.
2232
+ - all fields triggered by [getRankingInfo](#getrankinginfo)
2016
2233
 
2017
2234
 
2018
2235
  # Manage Indices
@@ -2033,7 +2250,7 @@ You can list all your indices along with their associated information (number of
2033
2250
  Algolia.list_indexes
2034
2251
  ```
2035
2252
 
2036
- ## Delete index - `delete_index`
2253
+ ## Delete an index - `delete_index`
2037
2254
 
2038
2255
  You can delete an index using its name:
2039
2256
 
@@ -2042,7 +2259,7 @@ index = Algolia::Index.new("contacts")
2042
2259
  index.delete_index
2043
2260
  ```
2044
2261
 
2045
- ## Clear index - `clear_index`
2262
+ ## Clear an index - `clear_index`
2046
2263
 
2047
2264
  You can delete the index contents without removing settings and index specific API keys by using the `clearIndex` command:
2048
2265
 
@@ -2072,27 +2289,23 @@ move using the `move_index` method.
2072
2289
  puts Algolia.move_index("MyNewIndex", "MyIndex")
2073
2290
  ```
2074
2291
 
2075
- **Note**:
2076
-
2077
- The move_index method will overwrite the destination index, and delete the temporary index.
2078
-
2079
- **Warning**
2080
-
2081
- The move_index operation will override all settings of the destination,
2082
- There is one exception for the [replicas](#replicas) parameter which is not impacted.
2292
+ **Note:** The move_index method overrides the destination index, and deletes the temporary one.
2293
+ In other words, there is no need to call the `clear_index` or `delete_index` methods to clean the temporary index.
2294
+ It also overrides all the settings of the destination index (except the [replicas](#replicas) parameter that need to not be part of the temporary index settings).
2083
2295
 
2084
- For example, if you want to fully update your index `MyIndex` every night, we recommend the following process:
2296
+ **Recommended steps**
2297
+ If you want to fully update your index `MyIndex` every night, we recommend the following process:
2085
2298
 
2086
2299
  1. Get settings and synonyms from the old index using [Get settings](#get-settings)
2087
2300
  and [Get synonym](#get-synonym).
2088
2301
  1. Apply settings and synonyms to the temporary index `MyTmpIndex`, (this will create the `MyTmpIndex` index)
2089
- using [Set settings](#set-settings) and [Batch synonyms](#batch-synonyms)
2090
- (make sure to remove the [replicas](#replicas) parameter from the settings if it exists).
2091
- 1. Import your records into a new index using [Add Objects](#add-objects).
2302
+ using [Set settings](#set-settings) and [Batch synonyms](#batch-synonyms) ([!] Make sure to remove the [replicas](#replicas) parameter from the settings if it exists.
2303
+ 1. Import your records into a new index using [Add Objects](#add-objects)).
2092
2304
  1. Atomically replace the index `MyIndex` with the content and settings of the index `MyTmpIndex`
2093
2305
  using the [Move index](#move-index) method.
2094
2306
  This will automatically override the old index without any downtime on the search.
2095
- 1. You'll end up with only one index called `MyIndex`, that contains the records and settings pushed to `MyTmpIndex`
2307
+
2308
+ You'll end up with only one index called `MyIndex`, that contains the records and settings pushed to `MyTmpIndex`
2096
2309
  and the replica-indices that were initially attached to `MyIndex` will be in sync with the new data.
2097
2310
 
2098
2311
 
@@ -2590,7 +2803,7 @@ Algolia.get_user_key("f420238212c54dcfad07ea0aa6d5c45f")
2590
2803
  index.get_user_key("71671c38001bf3ac857bc82052485107")
2591
2804
  ```
2592
2805
 
2593
- ## Get last logs - `get_logs`
2806
+ ## Get latest logs - `get_logs`
2594
2807
 
2595
2808
  You can retrieve the latest logs via this API. Each log entry contains:
2596
2809