From 0747fa2be9421031243b7a81979f48dd347a1226 Mon Sep 17 00:00:00 2001 From: paoloredis Date: Fri, 7 Mar 2025 10:54:23 +0100 Subject: [PATCH 1/2] Remove baseurl usage --- content/commands/acl-setuser/index.md | 2 +- content/commands/bf.add/index.md | 4 +- content/commands/bf.exists/index.md | 2 +- content/commands/bf.insert/index.md | 6 +- content/commands/bf.loadchunk/index.md | 10 +-- content/commands/bf.madd/index.md | 6 +- content/commands/bf.mexists/index.md | 2 +- content/commands/bf.scandump/index.md | 2 +- content/commands/cf.add/index.md | 2 +- content/commands/cf.addnx/index.md | 6 +- content/commands/cf.count/index.md | 4 +- content/commands/cf.exists/index.md | 4 +- content/commands/cf.insert/index.md | 4 +- content/commands/cf.insertnx/index.md | 8 +- content/commands/cf.loadchunk/index.md | 10 +-- content/commands/cf.mexists/index.md | 4 +- content/commands/cf.scandump/index.md | 2 +- content/commands/command-getkeys/index.md | 2 +- .../commands/command-getkeysandflags/index.md | 4 +- content/commands/command-list/index.md | 2 +- content/commands/eval/index.md | 4 +- content/commands/eval_ro/index.md | 2 +- content/commands/evalsha_ro/index.md | 2 +- content/commands/fcall_ro/index.md | 2 +- content/commands/ft.aggregate/index.md | 18 ++-- content/commands/ft.aliasadd/index.md | 2 +- content/commands/ft.aliasdel/index.md | 2 +- content/commands/ft.aliasupdate/index.md | 2 +- content/commands/ft.alter/index.md | 4 +- content/commands/ft.config-get/index.md | 2 +- content/commands/ft.config-help/index.md | 2 +- content/commands/ft.config-set/index.md | 2 +- content/commands/ft.create/index.md | 6 +- content/commands/ft.cursor-del/index.md | 2 +- content/commands/ft.cursor-read/index.md | 6 +- content/commands/ft.dictadd/index.md | 2 +- content/commands/ft.dictdel/index.md | 2 +- content/commands/ft.dictdump/index.md | 2 +- content/commands/ft.dropindex/index.md | 8 +- content/commands/ft.explain/index.md | 6 +- content/commands/ft.explaincli/index.md | 6 +- content/commands/ft.info/index.md | 4 +- content/commands/ft.profile/index.md | 8 +- content/commands/ft.search/index.md | 14 +-- content/commands/ft.spellcheck/index.md | 6 +- content/commands/ft.sugadd/index.md | 4 +- content/commands/ft.sugdel/index.md | 2 +- content/commands/ft.sugget/index.md | 2 +- content/commands/ft.suglen/index.md | 2 +- content/commands/ft.syndump/index.md | 2 +- content/commands/ft.synupdate/index.md | 2 +- content/commands/ft.tagvals/index.md | 4 +- content/commands/function-list/index.md | 2 +- content/commands/function-load/index.md | 2 +- content/commands/json.arrappend/index.md | 4 +- content/commands/json.arrindex/index.md | 4 +- content/commands/json.arrinsert/index.md | 4 +- content/commands/json.arrlen/index.md | 4 +- content/commands/json.arrpop/index.md | 4 +- content/commands/json.arrtrim/index.md | 2 +- content/commands/json.clear/index.md | 2 +- content/commands/json.debug-help/index.md | 4 +- content/commands/json.debug-memory/index.md | 2 +- content/commands/json.del/index.md | 2 +- content/commands/json.forget/index.md | 2 +- content/commands/json.get/index.md | 2 +- content/commands/json.merge/index.md | 2 +- content/commands/json.mget/index.md | 2 +- content/commands/json.mset/index.md | 2 +- content/commands/json.numincrby/index.md | 2 +- content/commands/json.nummultby/index.md | 2 +- content/commands/json.objkeys/index.md | 2 +- content/commands/json.objlen/index.md | 2 +- content/commands/json.resp/index.md | 2 +- content/commands/json.set/index.md | 2 +- content/commands/json.strappend/index.md | 2 +- content/commands/json.strlen/index.md | 2 +- content/commands/json.toggle/index.md | 2 +- content/commands/json.type/index.md | 2 +- content/commands/keys/index.md | 2 +- content/commands/scan/index.md | 2 +- content/commands/sort/index.md | 2 +- content/commands/ts.add/index.md | 28 +++--- content/commands/ts.alter/index.md | 12 +-- content/commands/ts.create/index.md | 20 ++--- content/commands/ts.createrule/index.md | 4 +- content/commands/ts.decrby/index.md | 20 ++--- content/commands/ts.del/index.md | 2 +- content/commands/ts.deleterule/index.md | 2 +- content/commands/ts.get/index.md | 2 +- content/commands/ts.incrby/index.md | 20 ++--- content/commands/ts.info/index.md | 10 +-- content/commands/ts.madd/index.md | 8 +- content/commands/ts.mget/index.md | 2 +- content/commands/ts.mrange/index.md | 2 +- content/commands/ts.mrevrange/index.md | 2 +- content/commands/ts.queryindex/index.md | 2 +- content/commands/ts.range/index.md | 2 +- content/commands/ts.revrange/index.md | 2 +- content/develop/ai/index.md | 8 +- .../develop/clients/client-side-caching.md | 2 +- content/develop/data-types/json/_index.md | 12 +-- content/develop/data-types/json/path.md | 6 +- content/develop/data-types/json/ram.md | 2 +- .../probabilistic/count-min-sketch.md | 2 +- .../data-types/probabilistic/cuckoo-filter.md | 2 +- .../data-types/probabilistic/t-digest.md | 10 +-- .../develop/data-types/probabilistic/top-k.md | 10 +-- .../data-types/timeseries/configuration.md | 12 +-- .../data-types/timeseries/quickstart.md | 12 +-- .../develop/get-started/document-database.md | 6 +- .../develop/get-started/vector-database.md | 14 +-- .../interact/programmability/_index.md | 6 +- .../interact/programmability/eval-intro.md | 18 ++-- .../programmability/functions-intro.md | 14 +-- .../interact/programmability/lua-api.md | 36 ++++---- .../search-and-query/administration/design.md | 2 +- .../administration/overview.md | 6 +- .../advanced-concepts/_index.md | 4 +- .../advanced-concepts/aggregations.md | 14 +-- .../advanced-concepts/autocomplete.md | 6 +- .../advanced-concepts/dialects.md | 20 ++--- .../advanced-concepts/query_syntax.md | 14 +-- .../advanced-concepts/scoring.md | 2 +- .../advanced-concepts/sorting.md | 2 +- .../advanced-concepts/spellcheck.md | 4 +- .../advanced-concepts/stemming.md | 2 +- .../advanced-concepts/stopwords.md | 4 +- .../advanced-concepts/vectors.md | 34 +++---- .../configuration-parameters.md | 24 ++--- .../field-and-type-options.md | 8 +- .../basic-constructs/schema-definition.md | 4 +- .../dev-to-prod-best-practices.md | 6 +- .../index-mgmt-best-practices.md | 24 ++--- .../scalable-query-best-practices.md | 4 +- .../search-and-query/deprecated/payloads.md | 2 +- .../search-and-query/indexing/_index.md | 24 ++--- .../interact/search-and-query/query/_index.md | 6 +- .../search-and-query/query/aggregation.md | 6 +- .../search-and-query/query/combined.md | 4 +- .../search-and-query/query/geo-spatial.md | 2 +- .../interact/search-and-query/query/range.md | 4 +- .../search-and-query/query/vector-search.md | 6 +- content/develop/reference/protocol-spec.md | 4 +- content/develop/use/patterns/indexes/index.md | 6 +- .../develop/whats-new/redis-feature-sets.md | 4 +- .../json-active-active-command-differences.md | 2 +- .../integrate/amazon-bedrock/set-up-redis.md | 6 +- content/integrate/redisom-for-java/_index.md | 4 +- .../install-redis-from-source.md | 2 +- .../operate/oss_and_stack/management/admin.md | 4 +- .../management/optimization/latency.md | 4 +- .../oss_and_stack/management/replication.md | 2 +- .../oss_and_stack/management/security/acl.md | 2 +- .../stack-with-enterprise/bloom/commands.md | 88 +++++++++---------- .../graph/graph-quickstart.md | 2 +- .../triggers-and-functions/Debugging.md | 2 +- .../triggers-and-functions/Quick_Start_CLI.md | 2 +- .../triggers-and-functions/Quick_Start_RI.md | 2 +- .../concepts/Cluster_Support.md | 2 +- .../concepts/triggers/KeySpace_Triggers.md | 2 +- .../concepts/triggers/Stream_Triggers.md | 2 +- .../stack-with-enterprise/json/commands.md | 48 +++++----- .../redisbloom-2.2-release-notes.md | 10 +-- .../redisbloom-2.4-release-notes.md | 10 +-- .../redisearch-2.4-release-notes.md | 12 +-- .../redisearch-2.8-release-notes.md | 4 +- .../redisjson/redisjson-2.6-release-notes.md | 4 +- .../redistimeseries-1.6-release-notes.md | 14 +-- .../redistimeseries-1.8-release-notes.md | 22 ++--- .../stack-with-enterprise/search/_index.md | 12 +-- .../stack-with-enterprise/search/commands.md | 50 +++++------ .../stack-with-enterprise/search/config.md | 2 +- .../search/redisearch-2-upgrade.md | 2 +- .../search/scalable-query-best-practices.md | 2 +- .../search/search-active-active.md | 12 +-- .../timeseries/_index.md | 10 +-- .../timeseries/commands.md | 34 +++---- .../rs-6-2-18-releases/rs-6-2-18-43.md | 8 +- .../rs-6-2-18-releases/rs-6-2-18-49.md | 8 +- .../rs-6-2-18-releases/rs-6-2-18-58.md | 4 +- .../rs-6-2-18-releases/rs-6-2-18-65.md | 4 +- .../rs-6-4-2-releases/rs-6-4-2-103.md | 10 +-- .../rs-6-4-2-releases/rs-6-4-2-110.md | 10 +-- .../rs-6-4-2-releases/rs-6-4-2-115.md | 10 +-- .../rs-6-4-2-releases/rs-6-4-2-121.md | 10 +-- .../rs-6-4-2-releases/rs-6-4-2-30.md | 8 +- .../rs-6-4-2-releases/rs-6-4-2-94.md | 10 +-- .../release-notes/rs-7-2-4-releases/_index.md | 2 +- .../rs-7-2-4-releases/rs-7-2-4-109.md | 8 +- .../rs-7-2-4-releases/rs-7-2-4-122.md | 8 +- .../rs-7-2-4-releases/rs-7-2-4-52.md | 10 +-- layouts/shortcodes/baseurl.html | 1 - 193 files changed, 671 insertions(+), 672 deletions(-) delete mode 100644 layouts/shortcodes/baseurl.html diff --git a/content/commands/acl-setuser/index.md b/content/commands/acl-setuser/index.md index 518a8d722e..b35291fa6d 100644 --- a/content/commands/acl-setuser/index.md +++ b/content/commands/acl-setuser/index.md @@ -131,7 +131,7 @@ This is a list of all the supported Redis ACL rules: * `#`: Adds the specified hashed password to the list of user passwords. A Redis hashed password is hashed with SHA256 and translated into a hexadecimal string. Example: `#c3ab8ff13720e8ad9047dd39466b3c8974e592c2fa383d4a3960714caef0c4f2`. * `password` but removes the password instead of adding it. * `!`: Like `#` but removes the password instead of adding it. -* `()`: (Available in Redis 7.0 and later) Creates a new selector to match rules against. Selectors are evaluated after the user permissions, and are evaluated according to the order they are defined. If a command matches either the user permissions or any selector, it is allowed. See [selectors]({{< baseurl >}}operate/oss_and_stack/management/security/acl#selectors) for more information. +* `()`: (Available in Redis 7.0 and later) Creates a new selector to match rules against. Selectors are evaluated after the user permissions, and are evaluated according to the order they are defined. If a command matches either the user permissions or any selector, it is allowed. See [selectors]({{< relref "operate/oss_and_stack/management/security/acl#selectors" >}}) for more information. * `clearselectors`: (Available in Redis 7.0 and later) Deletes all of the selectors attached to the user. * `reset`: Removes any capability from the user. They are set to off, without passwords, unable to execute any command, unable to access any key. diff --git a/content/commands/bf.add/index.md b/content/commands/bf.add/index.md index 50760837a9..e7f4145534 100644 --- a/content/commands/bf.add/index.md +++ b/content/commands/bf.add/index.md @@ -29,7 +29,7 @@ title: BF.ADD --- Adds an item to a Bloom filter. -This command is similar to [`BF.MADD`]({{< baseurl >}}commands/bf.madd/), except that only one item can be added. +This command is similar to [`BF.MADD`]({{< relref "commands/bf.madd/" >}}), except that only one item can be added. ## Required arguments @@ -37,7 +37,7 @@ This command is similar to [`BF.MADD`]({{< baseurl >}}commands/bf.madd/), except is key name for a Bloom filter to add the item to. -If `key` does not exist - a new Bloom filter is created with default error rate, capacity, and expansion (see [`BF.RESERVE`]({{< baseurl >}}commands/bf.reserve/)). +If `key` does not exist - a new Bloom filter is created with default error rate, capacity, and expansion (see [`BF.RESERVE`]({{< relref "commands/bf.reserve/" >}})).
item diff --git a/content/commands/bf.exists/index.md b/content/commands/bf.exists/index.md index 94659696b3..9d9694dee7 100644 --- a/content/commands/bf.exists/index.md +++ b/content/commands/bf.exists/index.md @@ -29,7 +29,7 @@ title: BF.EXISTS --- Determines whether a given item was added to a Bloom filter. -This command is similar to [`BF.MEXISTS`]({{< baseurl >}}commands/bf.mexists/), except that only one item can be checked. +This command is similar to [`BF.MEXISTS`]({{< relref "commands/bf.mexists/" >}}), except that only one item can be checked. ## Required arguments diff --git a/content/commands/bf.insert/index.md b/content/commands/bf.insert/index.md index 7211338fcf..4efb8e0227 100644 --- a/content/commands/bf.insert/index.md +++ b/content/commands/bf.insert/index.md @@ -58,7 +58,7 @@ title: BF.INSERT --- Creates a new Bloom filter if the `key` does not exist using the specified error rate, capacity, and expansion, then adds all specified items to the Bloom Filter. -This command is similar to [`BF.MADD`]({{< baseurl >}}commands/bf.madd/), except that the error rate, capacity, and expansion can be specified. It is a sugarcoated combination of [`BF.RESERVE`]({{< baseurl >}}commands/bf.reserve/) and [`BF.MADD`]({{< baseurl >}}commands/bf.madd/). +This command is similar to [`BF.MADD`]({{< relref "commands/bf.madd/" >}}), except that the error rate, capacity, and expansion can be specified. It is a sugarcoated combination of [`BF.RESERVE`]({{< relref "commands/bf.reserve/" >}}) and [`BF.MADD`]({{< relref "commands/bf.madd/" >}}). ## Required arguments @@ -89,14 +89,14 @@ It is an error to specify `NOCREATE` together with either `CAPACITY` or `ERROR`. Specifies the desired `capacity` for the filter to be created. This parameter is ignored if the filter already exists. If the filter is automatically created and this parameter is absent, then the module-level `capacity` is used. -See [`BF.RESERVE`]({{< baseurl >}}commands/bf.reserve/) for more information about the impact of this value. +See [`BF.RESERVE`]({{< relref "commands/bf.reserve/" >}}) for more information about the impact of this value.
ERROR error Specifies the `error` ratio of the newly created filter if it does not yet exist. If the filter is automatically created and `error` is not specified then the module-level error rate is used. -See [`BF.RESERVE`]({{< baseurl >}}commands/bf.reserve/) for more information about the format of this value. +See [`BF.RESERVE`]({{< relref "commands/bf.reserve/" >}}) for more information about the format of this value.
NONSCALING diff --git a/content/commands/bf.loadchunk/index.md b/content/commands/bf.loadchunk/index.md index 4e56567773..078454d5cc 100644 --- a/content/commands/bf.loadchunk/index.md +++ b/content/commands/bf.loadchunk/index.md @@ -29,9 +29,9 @@ syntax_fmt: BF.LOADCHUNK key iterator data syntax_str: iterator data title: BF.LOADCHUNK --- -Restores a Bloom filter previously saved using [`BF.SCANDUMP`]({{< baseurl >}}commands/bf.scandump/). +Restores a Bloom filter previously saved using [`BF.SCANDUMP`]({{< relref "commands/bf.scandump/" >}}). -See the [`BF.SCANDUMP`]({{< baseurl >}}commands/bf.scandump/) command for example usage. +See the [`BF.SCANDUMP`]({{< relref "commands/bf.scandump/" >}}) command for example usage. Notes @@ -49,12 +49,12 @@ is key name for a Bloom filter to restore.
iterator -Iterator value associated with `data` (returned by [`BF.SCANDUMP`]({{< baseurl >}}commands/bf.scandump/)) +Iterator value associated with `data` (returned by [`BF.SCANDUMP`]({{< relref "commands/bf.scandump/" >}}))
data -Current data chunk (returned by [`BF.SCANDUMP`]({{< baseurl >}}commands/bf.scandump/)) +Current data chunk (returned by [`BF.SCANDUMP`]({{< relref "commands/bf.scandump/" >}}))
## Return value @@ -66,4 +66,4 @@ Returns one of these replies: ## Examples -See [`BF.SCANDUMP`]({{< baseurl >}}commands/bf.scandump/) for an example. +See [`BF.SCANDUMP`]({{< relref "commands/bf.scandump/" >}}) for an example. diff --git a/content/commands/bf.madd/index.md b/content/commands/bf.madd/index.md index 1a41c0b320..76c9f7d01d 100644 --- a/content/commands/bf.madd/index.md +++ b/content/commands/bf.madd/index.md @@ -33,9 +33,9 @@ title: BF.MADD --- Adds one or more items to a Bloom filter. -This command is similar to [`BF.ADD`]({{< baseurl >}}commands/bf.add/), except that you can add more than one item. +This command is similar to [`BF.ADD`]({{< relref "commands/bf.add/" >}}), except that you can add more than one item. -This command is similar to [`BF.INSERT`]({{< baseurl >}}commands/bf.insert/), except that the error rate, capacity, and expansion cannot be specified. +This command is similar to [`BF.INSERT`]({{< relref "commands/bf.insert/" >}}), except that the error rate, capacity, and expansion cannot be specified. ## Required arguments @@ -43,7 +43,7 @@ This command is similar to [`BF.INSERT`]({{< baseurl >}}commands/bf.insert/), ex is key name for a Bloom filter to add the items to. -If `key` does not exist - a new Bloom filter is created with default error rate, capacity, and expansion (see [`BF.RESERVE`]({{< baseurl >}}commands/bf.reserve/)). +If `key` does not exist - a new Bloom filter is created with default error rate, capacity, and expansion (see [`BF.RESERVE`]({{< relref "commands/bf.reserve/" >}})).
item... diff --git a/content/commands/bf.mexists/index.md b/content/commands/bf.mexists/index.md index 24e5976f9c..ff6732a5b5 100644 --- a/content/commands/bf.mexists/index.md +++ b/content/commands/bf.mexists/index.md @@ -31,7 +31,7 @@ title: BF.MEXISTS --- Determines whether one or more items were added to a Bloom filter. -This command is similar to [`BF.EXISTS`]({{< baseurl >}}commands/bf.exists/), except that more than one item can be checked. +This command is similar to [`BF.EXISTS`]({{< relref "commands/bf.exists/" >}}), except that more than one item can be checked. ## Required arguments diff --git a/content/commands/bf.scandump/index.md b/content/commands/bf.scandump/index.md index d5f6a82888..2a03a7610f 100644 --- a/content/commands/bf.scandump/index.md +++ b/content/commands/bf.scandump/index.md @@ -55,7 +55,7 @@ Returns one of these replies: The Iterator is passed as input to the next invocation of `BF.SCANDUMP`. If _Iterator_ is 0, then it means iteration has completed. - The iterator-data pair should also be passed to [`BF.LOADCHUNK`]({{< baseurl >}}commands/bf.loadchunk/) when restoring the filter. + The iterator-data pair should also be passed to [`BF.LOADCHUNK`]({{< relref "commands/bf.loadchunk/" >}}) when restoring the filter. - [] on error (invalid arguments, key not found, wrong key type, etc.) diff --git a/content/commands/cf.add/index.md b/content/commands/cf.add/index.md index 290441ce61..e706961217 100644 --- a/content/commands/cf.add/index.md +++ b/content/commands/cf.add/index.md @@ -30,7 +30,7 @@ title: CF.ADD Adds an item to the cuckoo filter. Cuckoo filters can contain the same item multiple times, and consider each addition as separate. -Use [`CF.ADDNX`]({{< baseurl >}}commands/cf.addnx/) to add an item only if it does not exist. +Use [`CF.ADDNX`]({{< relref "commands/cf.addnx/" >}}) to add an item only if it does not exist. ## Required arguments diff --git a/content/commands/cf.addnx/index.md b/content/commands/cf.addnx/index.md index 67a63e5f80..1b3bf2049c 100644 --- a/content/commands/cf.addnx/index.md +++ b/content/commands/cf.addnx/index.md @@ -29,12 +29,12 @@ title: CF.ADDNX --- Adds an item to a cuckoo filter if the item does not exist. -This command is similar to the combination of [`CF.EXISTS`]({{< baseurl >}}commands/cf.exists/) and [`CF.ADD`]({{< baseurl >}}commands/cf.add/). It does not add an item into the filter if its fingerprint already exists. +This command is similar to the combination of [`CF.EXISTS`]({{< relref "commands/cf.exists/" >}}) and [`CF.ADD`]({{< relref "commands/cf.add/" >}}). It does not add an item into the filter if its fingerprint already exists. Notes: -- This command is slower than [`CF.ADD`]({{< baseurl >}}commands/cf.add/) because it first checks whether the item exists. -- Since [`CF.EXISTS`]({{< baseurl >}}commands/cf.exists/) can result in false positive, `CF.ADDNX` may not add an item because it is supposedly already exist, which may be wrong. +- This command is slower than [`CF.ADD`]({{< relref "commands/cf.add/" >}}) because it first checks whether the item exists. +- Since [`CF.EXISTS`]({{< relref "commands/cf.exists/" >}}) can result in false positive, `CF.ADDNX` may not add an item because it is supposedly already exist, which may be wrong. diff --git a/content/commands/cf.count/index.md b/content/commands/cf.count/index.md index bfa5784ccd..766b8d81af 100644 --- a/content/commands/cf.count/index.md +++ b/content/commands/cf.count/index.md @@ -29,7 +29,7 @@ title: CF.COUNT --- Returns an estimation of the number of times a given item was added to a cuckoo filter. -If you just want to check that a given item was added to a cuckoo filter, use [`CF.EXISTS`]({{< baseurl >}}commands/cf.exists/). +If you just want to check that a given item was added to a cuckoo filter, use [`CF.EXISTS`]({{< relref "commands/cf.exists/" >}}). ## Required arguments @@ -48,7 +48,7 @@ is an item to check. Returns one of these replies: -- [Integer reply]({{< relref "/develop/reference/protocol-spec#integers" >}}), where a positive value is an estimation of the number of times `item` was added to the filter. An overestimation is possible, but not an underestimation. `0` means that `key` does not exist or that `item` had not been added to the filter. See note in [`CF.DEL`]({{< baseurl >}}commands/cf.del/). +- [Integer reply]({{< relref "/develop/reference/protocol-spec#integers" >}}), where a positive value is an estimation of the number of times `item` was added to the filter. An overestimation is possible, but not an underestimation. `0` means that `key` does not exist or that `item` had not been added to the filter. See note in [`CF.DEL`]({{< relref "commands/cf.del/" >}}). - [] on error (invalid arguments, wrong key type, etc.) ## Examples diff --git a/content/commands/cf.exists/index.md b/content/commands/cf.exists/index.md index 49a6abdabd..43bc2a9380 100644 --- a/content/commands/cf.exists/index.md +++ b/content/commands/cf.exists/index.md @@ -29,7 +29,7 @@ title: CF.EXISTS --- Determines whether a given item was added to a cuckoo filter. -This command is similar to [`CF.MEXISTS`]({{< baseurl >}}commands/cf.mexists/), except that only one item can be checked. +This command is similar to [`CF.MEXISTS`]({{< relref "commands/cf.mexists/" >}}), except that only one item can be checked. ## Required arguments @@ -48,7 +48,7 @@ is an item to check. Returns one of these replies: -- [Integer reply]({{< relref "/develop/reference/protocol-spec#integers" >}}), where `1` means that, with high probability, `item` had already been added to the filter, and `0` means that `key` does not exist or that `item` had not been added to the filter. See note in [`CF.DEL`]({{< baseurl >}}commands/cf.del/). +- [Integer reply]({{< relref "/develop/reference/protocol-spec#integers" >}}), where `1` means that, with high probability, `item` had already been added to the filter, and `0` means that `key` does not exist or that `item` had not been added to the filter. See note in [`CF.DEL`]({{< relref "commands/cf.del/" >}}). - [] on error (invalid arguments, wrong key type, and so on) ## Examples diff --git a/content/commands/cf.insert/index.md b/content/commands/cf.insert/index.md index 008d2f44a4..b869e3a841 100644 --- a/content/commands/cf.insert/index.md +++ b/content/commands/cf.insert/index.md @@ -44,7 +44,7 @@ title: CF.INSERT --- Adds one or more items to a cuckoo filter, allowing the filter to be created with a custom capacity if it does not exist yet. -This command is similar to [`CF.ADD`]({{< baseurl >}}commands/cf.add/), except that more than one item can be added and capacity can be specified. +This command is similar to [`CF.ADD`]({{< relref "commands/cf.add/" >}}), except that more than one item can be added and capacity can be specified. ## Required arguments @@ -70,7 +70,7 @@ If the filter already exists, then this parameter is ignored. If the filter does not exist yet and this parameter is *not* specified, then the filter is created with the module-level default capacity which is 1024. -See [`CF.RESERVE`]({{< baseurl >}}commands/cf.reserve/) for more information on cuckoo filter capacities. +See [`CF.RESERVE`]({{< relref "commands/cf.reserve/" >}}) for more information on cuckoo filter capacities.
NOCREATE diff --git a/content/commands/cf.insertnx/index.md b/content/commands/cf.insertnx/index.md index b957c787ef..632d0cfe8d 100644 --- a/content/commands/cf.insertnx/index.md +++ b/content/commands/cf.insertnx/index.md @@ -44,12 +44,12 @@ title: CF.INSERTNX --- Adds one or more items to a cuckoo filter if they did not exist previously, allowing the filter to be created with a custom capacity if it does not exist yet. -This command is similar to [`CF.ADDNX`]({{< baseurl >}}commands/cf.addnx/), except that more than one item can be added and capacity can be specified. +This command is similar to [`CF.ADDNX`]({{< relref "commands/cf.addnx/" >}}), except that more than one item can be added and capacity can be specified. Notes: -- This command is slower than [`CF.INSERT`]({{< baseurl >}}commands/cf.insert/) because it first checks whether each item exists. -- Since [`CF.EXISTS`]({{< baseurl >}}commands/cf.exists/) can result in false positive, `CF.INSERTNX` may not add an item because it is supposedly already exist, which may be wrong. +- This command is slower than [`CF.INSERT`]({{< relref "commands/cf.insert/" >}}) because it first checks whether each item exists. +- Since [`CF.EXISTS`]({{< relref "commands/cf.exists/" >}}) can result in false positive, `CF.INSERTNX` may not add an item because it is supposedly already exist, which may be wrong. @@ -77,7 +77,7 @@ If the filter already exists, then this parameter is ignored. If the filter does not exist yet and this parameter is *not* specified, then the filter is created with the module-level default capacity which is 1024. -See [`CF.RESERVE`]({{< baseurl >}}commands/cf.reserve/) for more information on cuckoo filter capacities. +See [`CF.RESERVE`]({{< relref "commands/cf.reserve/" >}}) for more information on cuckoo filter capacities.
NOCREATE diff --git a/content/commands/cf.loadchunk/index.md b/content/commands/cf.loadchunk/index.md index 4f8e720ee1..81d728bda7 100644 --- a/content/commands/cf.loadchunk/index.md +++ b/content/commands/cf.loadchunk/index.md @@ -29,9 +29,9 @@ syntax_fmt: CF.LOADCHUNK key iterator data syntax_str: iterator data title: CF.LOADCHUNK --- -Restores a cuckoo filter previously saved using [`CF.SCANDUMP`]({{< baseurl >}}commands/cf.scandump/). +Restores a cuckoo filter previously saved using [`CF.SCANDUMP`]({{< relref "commands/cf.scandump/" >}}). -See the [`CF.SCANDUMP`]({{< baseurl >}}commands/cf.scandump/) command for example usage. +See the [`CF.SCANDUMP`]({{< relref "commands/cf.scandump/" >}}) command for example usage. Notes @@ -49,12 +49,12 @@ is key name for a cuckoo filter to restore.
iterator -Iterator value associated with `data` (returned by [`CF.SCANDUMP`]({{< baseurl >}}commands/cf.scandump/)) +Iterator value associated with `data` (returned by [`CF.SCANDUMP`]({{< relref "commands/cf.scandump/" >}}))
data -Current data chunk (returned by [`CF.SCANDUMP`]({{< baseurl >}}commands/cf.scandump/)) +Current data chunk (returned by [`CF.SCANDUMP`]({{< relref "commands/cf.scandump/" >}}))
## Return value @@ -66,4 +66,4 @@ Returns one of these replies: ## Examples -See [`CF.SCANDUMP`]({{< baseurl >}}commands/cf.scandump/) for an example. +See [`CF.SCANDUMP`]({{< relref "commands/cf.scandump/" >}}) for an example. diff --git a/content/commands/cf.mexists/index.md b/content/commands/cf.mexists/index.md index 7011e69fe1..2e9539f2e6 100644 --- a/content/commands/cf.mexists/index.md +++ b/content/commands/cf.mexists/index.md @@ -31,7 +31,7 @@ title: CF.MEXISTS --- Determines whether one or more items were added to a cuckoo filter. -This command is similar to [`CF.EXISTS`]({{< baseurl >}}commands/cf.exists/), except that more than one item can be checked. +This command is similar to [`CF.EXISTS`]({{< relref "commands/cf.exists/" >}}), except that more than one item can be checked. ## Required arguments @@ -50,7 +50,7 @@ One or more items to check. Returns one of these replies: -- [Array reply]({{< relref "/develop/reference/protocol-spec#arrays" >}}) of [Integer reply]({{< relref "/develop/reference/protocol-spec#integers" >}}) - where "1" means that, with high probability, `item` was already added to the filter, and "0" means that `key` does not exist or that `item` had not added to the filter. See note in [`CF.DEL`]({{< baseurl >}}commands/cf.del/). +- [Array reply]({{< relref "/develop/reference/protocol-spec#arrays" >}}) of [Integer reply]({{< relref "/develop/reference/protocol-spec#integers" >}}) - where "1" means that, with high probability, `item` was already added to the filter, and "0" means that `key` does not exist or that `item` had not added to the filter. See note in [`CF.DEL`]({{< relref "commands/cf.del/" >}}). - [] on error (invalid arguments, wrong key type, etc.) ## Examples diff --git a/content/commands/cf.scandump/index.md b/content/commands/cf.scandump/index.md index 5f3cc114fc..26f59c52b8 100644 --- a/content/commands/cf.scandump/index.md +++ b/content/commands/cf.scandump/index.md @@ -55,7 +55,7 @@ Returns one of these replies: The Iterator is passed as input to the next invocation of `CF.SCANDUMP`. If _Iterator_ is 0, then it means iteration has completed. - The iterator-data pair should also be passed to [`CF.LOADCHUNK`]({{< baseurl >}}commands/cf.loadchunk/) when restoring the filter. + The iterator-data pair should also be passed to [`CF.LOADCHUNK`]({{< relref "commands/cf.loadchunk/" >}}) when restoring the filter. - [] on error (invalid arguments, key not found, wrong key type, etc.) diff --git a/content/commands/command-getkeys/index.md b/content/commands/command-getkeys/index.md index a50ae6f08b..d87254aa32 100644 --- a/content/commands/command-getkeys/index.md +++ b/content/commands/command-getkeys/index.md @@ -41,7 +41,7 @@ Returns [Array reply]({{< relref "/develop/reference/protocol-spec#arrays" >}}) `COMMAND GETKEYS` is a helper command to let you find the keys from a full Redis command. -[`COMMAND`]({{< relref "/commands/command" >}}) provides information on how to find the key names of each command (see `firstkey`, [key specifications]({{< baseurl >}}develop/reference/key-specs#logical-operation-flags), and `movablekeys`), +[`COMMAND`]({{< relref "/commands/command" >}}) provides information on how to find the key names of each command (see `firstkey`, [key specifications]({{< relref "develop/reference/key-specs#logical-operation-flags" >}}), and `movablekeys`), but in some cases it's not possible to find keys of certain commands and then the entire command must be parsed to discover some / all key names. You can use `COMMAND GETKEYS` or [`COMMAND GETKEYSANDFLAGS`]({{< relref "/commands/command-getkeysandflags" >}}) to discover key names directly from how Redis parses the commands. diff --git a/content/commands/command-getkeysandflags/index.md b/content/commands/command-getkeysandflags/index.md index 4e389ab7de..1fb0a41d7f 100644 --- a/content/commands/command-getkeysandflags/index.md +++ b/content/commands/command-getkeysandflags/index.md @@ -40,11 +40,11 @@ Returns [Array reply]({{< relref "/develop/reference/protocol-spec#arrays" >}}) `COMMAND GETKEYSANDFLAGS` is a helper command to let you find the keys from a full Redis command together with flags indicating what each key is used for. -[`COMMAND`]({{< relref "/commands/command" >}}) provides information on how to find the key names of each command (see `firstkey`, [key specifications]({{< baseurl >}}develop/reference/key-specs#logical-operation-flags), and `movablekeys`), +[`COMMAND`]({{< relref "/commands/command" >}}) provides information on how to find the key names of each command (see `firstkey`, [key specifications]({{< relref "develop/reference/key-specs#logical-operation-flags" >}}), and `movablekeys`), but in some cases it's not possible to find keys of certain commands and then the entire command must be parsed to discover some / all key names. You can use [`COMMAND GETKEYS`]({{< relref "/commands/command-getkeys" >}}) or `COMMAND GETKEYSANDFLAGS` to discover key names directly from how Redis parses the commands. -Refer to [key specifications]({{< baseurl >}}develop/reference/key-specs#logical-operation-flags) for information about the meaning of the key flags. +Refer to [key specifications]({{< relref "develop/reference/key-specs#logical-operation-flags" >}}) for information about the meaning of the key flags. ## Examples diff --git a/content/commands/command-list/index.md b/content/commands/command-list/index.md index 51e9be7adc..2e1cc3415c 100644 --- a/content/commands/command-list/index.md +++ b/content/commands/command-list/index.md @@ -53,5 +53,5 @@ Return an array of the server's command names. You can use the optional _FILTERBY_ modifier to apply one of the following filters: - **MODULE module-name**: get the commands that belong to the module specified by _module-name_. - - **ACLCAT category**: get the commands in the [ACL category]({{< baseurl >}}operate/oss_and_stack/management/security/acl#command-categories) specified by _category_. + - **ACLCAT category**: get the commands in the [ACL category]({{< relref "operate/oss_and_stack/management/security/acl#command-categories" >}}) specified by _category_. - **PATTERN pattern**: get the commands that match the given glob-like _pattern_. diff --git a/content/commands/eval/index.md b/content/commands/eval/index.md index 670c9999ad..7ea5fd9311 100644 --- a/content/commands/eval/index.md +++ b/content/commands/eval/index.md @@ -66,10 +66,10 @@ title: EVAL Invoke the execution of a server-side Lua script. The first argument is the script's source code. -Scripts are written in [Lua](https://lua.org) and executed by the embedded [Lua 5.1]({{< baseurl >}}develop/interact/programmability/lua-api) interpreter in Redis. +Scripts are written in [Lua](https://lua.org) and executed by the embedded [Lua 5.1]({{< relref "develop/interact/programmability/lua-api" >}}) interpreter in Redis. The second argument is the number of input key name arguments, followed by all the keys accessed by the script. -These names of input keys are available to the script as the [_KEYS_ global runtime variable]({{< baseurl >}}develop/interact/programmability/lua-api#the-keys-global-variable) +These names of input keys are available to the script as the [_KEYS_ global runtime variable]({{< relref "develop/interact/programmability/lua-api#the-keys-global-variable" >}}) Any additional input arguments **should not** represent names of keys. **Important:** diff --git a/content/commands/eval_ro/index.md b/content/commands/eval_ro/index.md index 5a514d9c93..715c454f54 100644 --- a/content/commands/eval_ro/index.md +++ b/content/commands/eval_ro/index.md @@ -65,7 +65,7 @@ title: EVAL_RO --- This is a read-only variant of the [`EVAL`]({{< relref "/commands/eval" >}}) command that cannot execute commands that modify data. -For more information about when to use this command vs [`EVAL`]({{< relref "/commands/eval" >}}), please refer to [Read-only scripts]({{< baseurl >}}develop/interact/programmability#read-only-scripts). +For more information about when to use this command vs [`EVAL`]({{< relref "/commands/eval" >}}), please refer to [Read-only scripts]({{< relref "develop/interact/programmability#read-only-scripts" >}}). For more information about [`EVAL`]({{< relref "/commands/eval" >}}) scripts please refer to [Introduction to Eval Scripts]({{< relref "/develop/interact/programmability/eval-intro" >}}). diff --git a/content/commands/evalsha_ro/index.md b/content/commands/evalsha_ro/index.md index 946f601290..4ecff77a24 100644 --- a/content/commands/evalsha_ro/index.md +++ b/content/commands/evalsha_ro/index.md @@ -64,6 +64,6 @@ title: EVALSHA_RO --- This is a read-only variant of the [`EVALSHA`]({{< relref "/commands/evalsha" >}}) command that cannot execute commands that modify data. -For more information about when to use this command vs [`EVALSHA`]({{< relref "/commands/evalsha" >}}), please refer to [Read-only scripts]({{< baseurl >}}develop/interact/programmability#read-only-scripts). +For more information about when to use this command vs [`EVALSHA`]({{< relref "/commands/evalsha" >}}), please refer to [Read-only scripts]({{< relref "develop/interact/programmability#read-only-scripts" >}}). For more information about [`EVALSHA`]({{< relref "/commands/evalsha" >}}) scripts please refer to [Introduction to Eval Scripts]({{< relref "/develop/interact/programmability/eval-intro" >}}). diff --git a/content/commands/fcall_ro/index.md b/content/commands/fcall_ro/index.md index 4a25453693..dd7bda14fc 100644 --- a/content/commands/fcall_ro/index.md +++ b/content/commands/fcall_ro/index.md @@ -65,6 +65,6 @@ title: FCALL_RO --- This is a read-only variant of the [`FCALL`]({{< relref "/commands/fcall" >}}) command that cannot execute commands that modify data. -For more information about when to use this command vs [`FCALL`]({{< relref "/commands/fcall" >}}), please refer to [Read-only scripts]({{< baseurl >}}develop/interact/programmability/#read-only_scripts). +For more information about when to use this command vs [`FCALL`]({{< relref "/commands/fcall" >}}), please refer to [Read-only scripts]({{< relref "develop/interact/programmability/#read-only_scripts" >}}). For more information please refer to [Introduction to Redis Functions]({{< relref "/develop/interact/programmability/functions-intro" >}}). diff --git a/content/commands/ft.aggregate/index.md b/content/commands/ft.aggregate/index.md index 5fae90109a..f1e702bb18 100644 --- a/content/commands/ft.aggregate/index.md +++ b/content/commands/ft.aggregate/index.md @@ -214,7 +214,7 @@ Run a search query on an index, and perform aggregate transformations on the res
index -is index name against which the query is executed. You must first create the index using [`FT.CREATE`]({{< baseurl >}}commands/ft.create/). +is index name against which the query is executed. You must first create the index using [`FT.CREATE`]({{< relref "commands/ft.create/" >}}).
@@ -252,7 +252,7 @@ groups the results in the pipeline based on one or more properties. Each group s reduces the matching results in each group into a single record, using a reduction function. For example, `COUNT` counts the number of records in the group. The reducers can have their own property names using the `AS {name}` optional argument. If a name is not given, the resulting name will be the name of the reduce function and the group properties. For example, if a name is not given to `COUNT_DISTINCT` by property `@foo`, the resulting name will be `count_distinct(@foo)`. -See [Supported GROUPBY reducers]({{< baseurl >}}develop/interact/search-and-query/advanced-concepts/aggregations#supported-groupby-reducers) for more details. +See [Supported GROUPBY reducers]({{< relref "develop/interact/search-and-query/advanced-concepts/aggregations#supported-groupby-reducers" >}}) for more details.
@@ -284,7 +284,7 @@ applies a 1-to-1 transformation on one or more properties and either stores the `expr` is an expression that can be used to perform arithmetic operations on numeric properties, or functions that can be applied on properties depending on their types (see below), or any combination thereof. For example, `APPLY "sqrt(@foo)/log(@bar) + 5" AS baz` evaluates this expression dynamically for each record in the pipeline and store the result as a new property called `baz`, which can be referenced by further `APPLY`/`SORTBY`/`GROUPBY`/`REDUCE` operations down the pipeline. -See [APPLY expressions]({{< baseurl >}}develop/interact/search-and-query/advanced-concepts/aggregations/#apply-expressions) for details. +See [APPLY expressions]({{< relref "develop/interact/search-and-query/advanced-concepts/aggregations/#apply-expressions" >}}) for details.
@@ -308,7 +308,7 @@ filters the results using predicate expressions relating to values in each resul WITHCURSOR {COUNT} {read_size} [MAXIDLE {idle_time}] Scan part of the results with a quicker alternative than `LIMIT`. -See [Cursor API]({{< baseurl >}}develop/interact/search-and-query/advanced-concepts/aggregations#cursor-api) for more details. +See [Cursor API]({{< relref "develop/interact/search-and-query/advanced-concepts/aggregations#cursor-api" >}}) for more details.
@@ -343,18 +343,18 @@ You can use `@__score` in a pipeline as shown in the following example:
DIALECT {dialect_version} -selects the dialect version under which to execute the query. If not specified, the query will execute under the default dialect version set during module initial loading or via [`FT.CONFIG SET`]({{< baseurl >}}commands/ft.config-set/) command. +selects the dialect version under which to execute the query. If not specified, the query will execute under the default dialect version set during module initial loading or via [`FT.CONFIG SET`]({{< relref "commands/ft.config-set/" >}}) command.
## Return FT.AGGREGATE returns an array reply where each row is an array reply and represents a single aggregate result. -The [integer reply]({{< baseurl >}}develop/reference/protocol-spec#resp-integers) at position `1` does not represent a valid value. +The [integer reply]({{< relref "develop/reference/protocol-spec#resp-integers" >}}) at position `1` does not represent a valid value. ### Return multiple values -See [Return multiple values]({{< baseurl >}}commands/ft.search#return-multiple-values/) in [`FT.SEARCH`]({{< baseurl >}}commands/ft.search/) -The `DIALECT` can be specified as a parameter in the FT.AGGREGATE command. If it is not specified, the `DEFAULT_DIALECT` is used, which can be set using [`FT.CONFIG SET`]({{< baseurl >}}commands/ft.config-set/) or by passing it as an argument to the `redisearch` module when it is loaded. +See [Return multiple values]({{< relref "commands/ft.search#return-multiple-values/" >}}) in [`FT.SEARCH`]({{< relref "commands/ft.search/" >}}) +The `DIALECT` can be specified as a parameter in the FT.AGGREGATE command. If it is not specified, the `DEFAULT_DIALECT` is used, which can be set using [`FT.CONFIG SET`]({{< relref "commands/ft.config-set/" >}}) or by passing it as an argument to the `redisearch` module when it is loaded. For example, with the following document and index: @@ -483,7 +483,7 @@ Next, count GitHub events by user (actor), to produce the most active users. ## See also -[`FT.CONFIG SET`]({{< baseurl >}}commands/ft.config-set/) | [`FT.SEARCH`]({{< baseurl >}}commands/ft.search/) +[`FT.CONFIG SET`]({{< relref "commands/ft.config-set/" >}}) | [`FT.SEARCH`]({{< relref "commands/ft.search/" >}}) ## Related topics diff --git a/content/commands/ft.aliasadd/index.md b/content/commands/ft.aliasadd/index.md index c1b7101cc4..34441868f0 100644 --- a/content/commands/ft.aliasadd/index.md +++ b/content/commands/ft.aliasadd/index.md @@ -74,7 +74,7 @@ Attempting to add the same alias returns a message that the alias already exists ## See also -[`FT.ALIASDEL`]({{< baseurl >}}commands/ft.aliasdel/) | [`FT.ALIASUPDATE`]({{< baseurl >}}commands/ft.aliasupdate/) +[`FT.ALIASDEL`]({{< relref "commands/ft.aliasdel/" >}}) | [`FT.ALIASUPDATE`]({{< relref "commands/ft.aliasupdate/" >}}) ## Related topics diff --git a/content/commands/ft.aliasdel/index.md b/content/commands/ft.aliasdel/index.md index 289b20ee9d..4ea8da05c4 100644 --- a/content/commands/ft.aliasdel/index.md +++ b/content/commands/ft.aliasdel/index.md @@ -60,7 +60,7 @@ OK ## See also -[`FT.ALIASADD`]({{< baseurl >}}commands/ft.aliasadd/) | [`FT.ALIASUPDATE`]({{< baseurl >}}commands/ft.aliasupdate/) +[`FT.ALIASADD`]({{< relref "commands/ft.aliasadd/" >}}) | [`FT.ALIASUPDATE`]({{< relref "commands/ft.aliasupdate/" >}}) ## Related topics diff --git a/content/commands/ft.aliasupdate/index.md b/content/commands/ft.aliasupdate/index.md index 6a0a03369c..d5e55af55d 100644 --- a/content/commands/ft.aliasupdate/index.md +++ b/content/commands/ft.aliasupdate/index.md @@ -62,7 +62,7 @@ OK ## See also -[`FT.ALIASADD`]({{< baseurl >}}commands/ft.aliasadd/) | [`FT.ALIASDEL`]({{< baseurl >}}commands/ft.aliasdel/) +[`FT.ALIASADD`]({{< relref "commands/ft.aliasadd/" >}}) | [`FT.ALIASDEL`]({{< relref "commands/ft.aliasdel/" >}}) ## Related topics diff --git a/content/commands/ft.alter/index.md b/content/commands/ft.alter/index.md index c1e3476b45..6471225727 100644 --- a/content/commands/ft.alter/index.md +++ b/content/commands/ft.alter/index.md @@ -67,7 +67,7 @@ if set, does not scan and index. after the SCHEMA keyword, declares which fields to add: - `attribute` is attribute to add. -- `options` are attribute options. Refer to [`FT.CREATE`]({{< baseurl >}}commands/ft.create/) for more information. +- `options` are attribute options. Refer to [`FT.CREATE`]({{< relref "commands/ft.create/" >}}) for more information. Note: @@ -96,7 +96,7 @@ OK ## See also -[`FT.CREATE`]({{< baseurl >}}commands/ft.create/) +[`FT.CREATE`]({{< relref "commands/ft.create/" >}}) ## Related topics diff --git a/content/commands/ft.config-get/index.md b/content/commands/ft.config-get/index.md index 2bb9773708..783105a2e4 100644 --- a/content/commands/ft.config-get/index.md +++ b/content/commands/ft.config-get/index.md @@ -137,7 +137,7 @@ FT.CONFIG GET returns an array reply of the configuration name and value. ## See also -[`FT.CONFIG SET`]({{< baseurl >}}commands/ft.config-set/) | [`FT.CONFIG HELP`]({{< baseurl >}}commands/ft.config-help/) +[`FT.CONFIG SET`]({{< relref "commands/ft.config-set/" >}}) | [`FT.CONFIG HELP`]({{< relref "commands/ft.config-help/" >}}) ## Related topics diff --git a/content/commands/ft.config-help/index.md b/content/commands/ft.config-help/index.md index 4677d3ed5b..f6548535df 100644 --- a/content/commands/ft.config-help/index.md +++ b/content/commands/ft.config-help/index.md @@ -64,7 +64,7 @@ FT.CONFIG HELP returns an array reply of the configuration name and value. ## See also -[`FT.CONFIG SET`]({{< baseurl >}}commands/ft.config-set/) | [`FT.CONFIG GET`]({{< baseurl >}}commands/ft.config-get/) +[`FT.CONFIG SET`]({{< relref "commands/ft.config-set/" >}}) | [`FT.CONFIG GET`]({{< relref "commands/ft.config-get/" >}}) ## Related topics diff --git a/content/commands/ft.config-set/index.md b/content/commands/ft.config-set/index.md index 68223688c3..54a6d6aec4 100644 --- a/content/commands/ft.config-set/index.md +++ b/content/commands/ft.config-set/index.md @@ -74,7 +74,7 @@ OK ## See also -[`FT.CONFIG GET`]({{< baseurl >}}commands/ft.config-get/) | [`FT.CONFIG HELP`]({{< baseurl >}}commands/ft.config-help/) +[`FT.CONFIG GET`]({{< relref "commands/ft.config-get/" >}}) | [`FT.CONFIG HELP`]({{< relref "commands/ft.config-help/" >}}) ## Related topics diff --git a/content/commands/ft.create/index.md b/content/commands/ft.create/index.md index 208ae4a8a6..d417aac062 100644 --- a/content/commands/ft.create/index.md +++ b/content/commands/ft.create/index.md @@ -328,7 +328,7 @@ is document attribute that you use as a binary safe payload string to the docume
MAXTEXTFIELDS -forces RediSearch to encode indexes as if there were more than 32 text attributes, which allows you to add additional attributes (beyond 32) using [`FT.ALTER`]({{< baseurl >}}commands/ft.alter/). For efficiency, RediSearch encodes indexes differently if they are created with less than 32 text attributes. +forces RediSearch to encode indexes as if there were more than 32 text attributes, which allows you to add additional attributes (beyond 32) using [`FT.ALTER`]({{< relref "commands/ft.alter/" >}}). For efficiency, RediSearch encodes indexes differently if they are created with less than 32 text attributes.
@@ -345,7 +345,7 @@ creates a lightweight temporary index that expires after a specified period of i {{% alert title="Warning" color="warning" %}} When temporary indexes expire, they drop all the records associated with them. -[`FT.DROPINDEX`]({{< baseurl >}}commands/ft.dropindex/) was introduced with a default of not deleting docs and a `DD` flag that enforced deletion. +[`FT.DROPINDEX`]({{< relref "commands/ft.dropindex/" >}}) was introduced with a default of not deleting docs and a `DD` flag that enforced deletion. However, for temporary indexes, documents are deleted along with the index. Historically, RediSearch used an FT.ADD command, which made a connection between the document and the index. Then, FT.DROP, also a hystoric command, deleted documents by default. In version 2.x, RediSearch indexes hashes and JSONs, and the dependency between the index and documents no longer exists. @@ -463,7 +463,7 @@ The following example uses data similar to the hash examples above but uses JSON ## See also -[`FT.ALTER`]({{< baseurl >}}commands/ft.alter/) | [`FT.DROPINDEX`]({{< baseurl >}}commands/ft.dropindex/) +[`FT.ALTER`]({{< relref "commands/ft.alter/" >}}) | [`FT.DROPINDEX`]({{< relref "commands/ft.dropindex/" >}}) ## Related topics diff --git a/content/commands/ft.cursor-del/index.md b/content/commands/ft.cursor-del/index.md index 3e184f766b..d143e45505 100644 --- a/content/commands/ft.cursor-del/index.md +++ b/content/commands/ft.cursor-del/index.md @@ -73,7 +73,7 @@ Check that the cursor is deleted. ## See also -[`FT.CURSOR READ`]({{< baseurl >}}commands/ft.cursor-read/) +[`FT.CURSOR READ`]({{< relref "commands/ft.cursor-read/" >}}) ## Related topics diff --git a/content/commands/ft.cursor-read/index.md b/content/commands/ft.cursor-read/index.md index 32e1f4e6d2..1fbd5676fb 100644 --- a/content/commands/ft.cursor-read/index.md +++ b/content/commands/ft.cursor-read/index.md @@ -39,7 +39,7 @@ Read next results from an existing cursor [Examples](#examples) -See [Cursor API]({{< baseurl >}}develop/interact/search-and-query/advanced-concepts/aggregations#cursor-api) for more details. +See [Cursor API]({{< relref "develop/interact/search-and-query/advanced-concepts/aggregations#cursor-api" >}}) for more details. ## Required arguments @@ -58,7 +58,7 @@ is id of the cursor.
[COUNT read_size] -is number of results to read. This parameter overrides `COUNT` specified in [`FT.AGGREGATE`]({{< baseurl >}}commands/ft.aggregate/). +is number of results to read. This parameter overrides `COUNT` specified in [`FT.AGGREGATE`]({{< relref "commands/ft.aggregate/" >}}).
## Return @@ -77,7 +77,7 @@ FT.CURSOR READ returns an array reply where each row is an array reply and repre ## See also -[`FT.CURSOR DEL`]({{< baseurl >}}commands/ft.cursor-del/) | [`FT.AGGREGATE`]({{< baseurl >}}commands/ft.aggregate/) +[`FT.CURSOR DEL`]({{< relref "commands/ft.cursor-del/" >}}) | [`FT.AGGREGATE`]({{< relref "commands/ft.aggregate/" >}}) ## Related topics diff --git a/content/commands/ft.dictadd/index.md b/content/commands/ft.dictadd/index.md index 61faeb9d61..7c28c07f38 100644 --- a/content/commands/ft.dictadd/index.md +++ b/content/commands/ft.dictadd/index.md @@ -67,7 +67,7 @@ FT.DICTADD returns an integer reply, the number of new terms that were added. ## See also -[`FT.DICTDEL`]({{< baseurl >}}commands/ft.dictdel/) | [`FT.DICTDUMP`]({{< baseurl >}}commands/ft.dictdump/) +[`FT.DICTDEL`]({{< relref "commands/ft.dictdel/" >}}) | [`FT.DICTDUMP`]({{< relref "commands/ft.dictdump/" >}}) ## Related topics diff --git a/content/commands/ft.dictdel/index.md b/content/commands/ft.dictdel/index.md index 7cea848276..2409aac75c 100644 --- a/content/commands/ft.dictdel/index.md +++ b/content/commands/ft.dictdel/index.md @@ -67,7 +67,7 @@ FT.DICTDEL returns an integer reply, the number of new terms that were deleted. ## See also -[`FT.DICTADD`]({{< baseurl >}}commands/ft.dictadd/) | [`FT.DICTDUMP`]({{< baseurl >}}commands/ft.dictdump/) +[`FT.DICTADD`]({{< relref "commands/ft.dictadd/" >}}) | [`FT.DICTDUMP`]({{< relref "commands/ft.dictdump/" >}}) ## Related topics diff --git a/content/commands/ft.dictdump/index.md b/content/commands/ft.dictdump/index.md index eafe24a2b0..8c4e6a33d0 100644 --- a/content/commands/ft.dictdump/index.md +++ b/content/commands/ft.dictdump/index.md @@ -62,7 +62,7 @@ FT.DICTDUMP returns an array, where each element is term (string). ## See also -[`FT.DICTADD`]({{< baseurl >}}commands/ft.dictadd/) | [`FT.DICTDEL`]({{< baseurl >}}commands/ft.dictdel/) +[`FT.DICTADD`]({{< relref "commands/ft.dictadd/" >}}) | [`FT.DICTDEL`]({{< relref "commands/ft.dictdel/" >}}) ## Related topics diff --git a/content/commands/ft.dropindex/index.md b/content/commands/ft.dropindex/index.md index 048986c90d..34f875b047 100644 --- a/content/commands/ft.dropindex/index.md +++ b/content/commands/ft.dropindex/index.md @@ -44,7 +44,7 @@ Delete an index
index -is full-text index name. You must first create the index using [`FT.CREATE`]({{< baseurl >}}commands/ft.create/). +is full-text index name. You must first create the index using [`FT.CREATE`]({{< relref "commands/ft.create/" >}}).
## Optional arguments @@ -55,9 +55,9 @@ is full-text index name. You must first create the index using [`FT.CREATE`]({{< drop index operation that, if set, deletes the actual document keys. `FT.DROPINDEX index DD` is an asynchronous operation. By default, FT.DROPINDEX does not delete the documents associated with the index. Adding the `DD` option deletes the documents as well. -If an index creation is still running ([`FT.CREATE`]({{< baseurl >}}commands/ft.create/) is running asynchronously), only the document hashes that have already been indexed are deleted. +If an index creation is still running ([`FT.CREATE`]({{< relref "commands/ft.create/" >}}) is running asynchronously), only the document hashes that have already been indexed are deleted. The document hashes left to be indexed remain in the database. -To check the completion of the indexing, use [`FT.INFO`]({{< baseurl >}}commands/ft.info/). +To check the completion of the indexing, use [`FT.INFO`]({{< relref "commands/ft.info/" >}}).
@@ -78,7 +78,7 @@ OK ## See also -[`FT.CREATE`]({{< baseurl >}}commands/ft.create/) | [`FT.INFO`]({{< baseurl >}}commands/ft.info/) +[`FT.CREATE`]({{< relref "commands/ft.create/" >}}) | [`FT.INFO`]({{< relref "commands/ft.info/" >}}) ## Related topics diff --git a/content/commands/ft.explain/index.md b/content/commands/ft.explain/index.md index 1f6e04f5f7..2e3e192e8c 100644 --- a/content/commands/ft.explain/index.md +++ b/content/commands/ft.explain/index.md @@ -45,7 +45,7 @@ Return the execution plan for a complex query
index -is index name. You must first create the index using [`FT.CREATE`]({{< baseurl >}}commands/ft.create/). +is index name. You must first create the index using [`FT.CREATE`]({{< relref "commands/ft.create/" >}}).
@@ -59,7 +59,7 @@ is query string, as if sent to FT.SEARCH`.
DIALECT {dialect_version} -is dialect version under which to execute the query. If not specified, the query executes under the default dialect version set during module initial loading or via [`FT.CONFIG SET`]({{< baseurl >}}commands/ft.config-set/) command. +is dialect version under which to execute the query. If not specified, the query executes under the default dialect version set during module initial loading or via [`FT.CONFIG SET`]({{< relref "commands/ft.config-set/" >}}) command.
{{% alert title="Notes" color="warning" %}} @@ -103,7 +103,7 @@ INTERSECT { ## See also -[`FT.CREATE`]({{< baseurl >}}commands/ft.create/) | [`FT.SEARCH`]({{< baseurl >}}commands/ft.search/) | [`FT.CONFIG SET`]({{< baseurl >}}commands/ft.config-set/) +[`FT.CREATE`]({{< relref "commands/ft.create/" >}}) | [`FT.SEARCH`]({{< relref "commands/ft.search/" >}}) | [`FT.CONFIG SET`]({{< relref "commands/ft.config-set/" >}}) ## Related topics diff --git a/content/commands/ft.explaincli/index.md b/content/commands/ft.explaincli/index.md index 9cc7d63657..16af7cb94b 100644 --- a/content/commands/ft.explaincli/index.md +++ b/content/commands/ft.explaincli/index.md @@ -45,7 +45,7 @@ Return the execution plan for a complex query but formatted for easier reading w
index -is index name. You must first create the index using [`FT.CREATE`]({{< baseurl >}}commands/ft.create/). +is index name. You must first create the index using [`FT.CREATE`]({{< relref "commands/ft.create/" >}}).
@@ -59,7 +59,7 @@ is query string, as if sent to FT.SEARCH`.
DIALECT {dialect_version} -is dialect version under which to execute the query. If not specified, the query executes under the default dialect version set during module initial loading or via [`FT.CONFIG SET`]({{< baseurl >}}commands/ft.config-set/) command. +is dialect version under which to execute the query. If not specified, the query executes under the default dialect version set during module initial loading or via [`FT.CONFIG SET`]({{< relref "commands/ft.config-set/" >}}) command. {{% alert title="Note" color="warning" %}} @@ -116,7 +116,7 @@ $ redis-cli ## See also -[`FT.CREATE`]({{< baseurl >}}commands/ft.create/) | [`FT.SEARCH`]({{< baseurl >}}commands/ft.search/) | [`FT.CONFIG SET`]({{< baseurl >}}commands/ft.config-set/) +[`FT.CREATE`]({{< relref "commands/ft.create/" >}}) | [`FT.SEARCH`]({{< relref "commands/ft.search/" >}}) | [`FT.CONFIG SET`]({{< relref "commands/ft.config-set/" >}}) ## Related topics diff --git a/content/commands/ft.info/index.md b/content/commands/ft.info/index.md index bd89833049..41067e0821 100644 --- a/content/commands/ft.info/index.md +++ b/content/commands/ft.info/index.md @@ -35,7 +35,7 @@ Returns information and statistics about a given index. `index`
-is the name of the given index. You must first create the index using [`FT.CREATE`]({{< baseurl >}}commands/ft.create/). +is the name of the given index. You must first create the index using [`FT.CREATE`]({{< relref "commands/ft.create/" >}}). ## RESP reply @@ -354,7 +354,7 @@ The next two GC-related fields are relevant in scenarios where simultaneous chan ## See also -[`FT.CREATE`]({{< baseurl >}}commands/ft.create/) | [`FT.SEARCH`]({{< baseurl >}}commands/ft.search/) +[`FT.CREATE`]({{< relref "commands/ft.create/" >}}) | [`FT.SEARCH`]({{< relref "commands/ft.search/" >}}) ## Related topics diff --git a/content/commands/ft.profile/index.md b/content/commands/ft.profile/index.md index 774b164af2..2d9b646067 100644 --- a/content/commands/ft.profile/index.md +++ b/content/commands/ft.profile/index.md @@ -51,20 +51,20 @@ syntax_str: [LIMITED] QUERY query title: FT.PROFILE --- -Apply [`FT.SEARCH`]({{< baseurl >}}commands/ft.search/) or [`FT.AGGREGATE`]({{< baseurl >}}commands/ft.aggregate/) command to collect performance details. For usage, see [Examples](#examples). +Apply [`FT.SEARCH`]({{< relref "commands/ft.search/" >}}) or [`FT.AGGREGATE`]({{< relref "commands/ft.aggregate/" >}}) command to collect performance details. For usage, see [Examples](#examples). ## Required arguments
index -is the name of an index created using [`FT.CREATE`]({{< baseurl >}}commands/ft.create/). +is the name of an index created using [`FT.CREATE`]({{< relref "commands/ft.create/" >}}).
SEARCH | AGGREGATE -represents the profile type, either [`FT.SEARCH`]({{< baseurl >}}commands/ft.search/) or [`FT.AGGREGATE`]({{< baseurl >}}commands/ft.aggregate/). +represents the profile type, either [`FT.SEARCH`]({{< relref "commands/ft.search/" >}}) or [`FT.AGGREGATE`]({{< relref "commands/ft.aggregate/" >}}).
@@ -398,7 +398,7 @@ Here's an example of running the `FT.PROFILE` command for a vector query. ## See also -[`FT.SEARCH`]({{< baseurl >}}commands/ft.search/) | [`FT.AGGREGATE`]({{< baseurl >}}commands/ft.aggregate/) +[`FT.SEARCH`]({{< relref "commands/ft.search/" >}}) | [`FT.AGGREGATE`]({{< relref "commands/ft.aggregate/" >}}) ## Related topics diff --git a/content/commands/ft.search/index.md b/content/commands/ft.search/index.md index a5e350e6aa..76776103da 100644 --- a/content/commands/ft.search/index.md +++ b/content/commands/ft.search/index.md @@ -321,7 +321,7 @@ Search the index with a textual query, returning either documents or just ids
index -is index name. You must first create the index using [`FT.CREATE`]({{< baseurl >}}commands/ft.create/). +is index name. You must first create the index using [`FT.CREATE`]({{< relref "commands/ft.create/" >}}).
@@ -360,7 +360,7 @@ also returns the relative internal score of each document. This can be used to m
WITHPAYLOADS -retrieves optional document payloads. See [`FT.CREATE`]({{< baseurl >}}commands/ft.create/). The payloads follow the document id and, if `WITHSCORES` is set, the scores. +retrieves optional document payloads. See [`FT.CREATE`]({{< relref "commands/ft.create/" >}}). The payloads follow the document id and, if `WITHSCORES` is set, the scores.
@@ -372,7 +372,7 @@ returns the value of the sorting key, right after the id and score and/or payloa
FILTER numeric_attribute min max -limits results to those having numeric values ranging between `min` and `max`, if numeric_attribute is defined as a numeric attribute in [`FT.CREATE`]({{< baseurl >}}commands/ft.create/). +limits results to those having numeric values ranging between `min` and `max`, if numeric_attribute is defined as a numeric attribute in [`FT.CREATE`]({{< relref "commands/ft.create/" >}}). `min` and `max` follow [`ZRANGE`]({{< relref "/commands/zrange" >}}) syntax, and can be `-inf`, `+inf`, and use `(` for exclusive ranges. Multiple numeric filters for different attributes are supported in one query. **Deprecated since v2.10**: [Query dialect 2]({{< relref "/develop/interact/search-and-query/advanced-concepts/dialects#dialect-2" >}}) explains the query syntax for numeric fields that replaces this argument.
@@ -437,7 +437,7 @@ requires the terms in the document to have the same order as the terms in the qu use a stemmer for the supplied language during search for query expansion. If querying documents in Chinese, set to `chinese` to properly tokenize the query terms. Defaults to English. If an unsupported language is sent, the command returns an error. - See [`FT.CREATE`]({{< baseurl >}}commands/ft.create/) for the list of languages. If `LANGUAGE` was specified as part of index + See [`FT.CREATE`]({{< relref "commands/ft.create/" >}}) for the list of languages. If `LANGUAGE` was specified as part of index creation, it doesn't need to specified with `FT.SEARCH`.
@@ -508,7 +508,7 @@ to `2` or greater than `2` (this requires [RediSearch v2.4](https://github.com/R
DIALECT {dialect_version} -selects the dialect version under which to execute the query. If not specified, the query will execute under the default dialect version set during module initial loading or via [`FT.CONFIG SET`]({{< baseurl >}}commands/ft.config-set/) command. See [Query dialects]({{< relref "/develop/interact/search-and-query/advanced-concepts/dialects" >}}) for more information. +selects the dialect version under which to execute the query. If not specified, the query will execute under the default dialect version set during module initial loading or via [`FT.CONFIG SET`]({{< relref "commands/ft.config-set/" >}}) command. See [Query dialects]({{< relref "/develop/interact/search-and-query/advanced-concepts/dialects" >}}) for more information.
## Return @@ -533,7 +533,7 @@ In order to maintain backward compatibility, the default behavior with RediSearc To return all the values, use `DIALECT` 3 (or greater, when available). -The `DIALECT` can be specified as a parameter in the FT.SEARCH command. If it is not specified, the `DEFAULT_DIALECT` is used, which can be set using [`FT.CONFIG SET`]({{< baseurl >}}commands/ft.config-set/) or by passing it as an argument to the `redisearch` module when it is loaded. +The `DIALECT` can be specified as a parameter in the FT.SEARCH command. If it is not specified, the `DEFAULT_DIALECT` is used, which can be set using [`FT.CONFIG SET`]({{< relref "commands/ft.config-set/" >}}) or by passing it as an argument to the `redisearch` module when it is loaded. For example, with the following document and index: @@ -847,7 +847,7 @@ Query with `CONTAINS` operator: ## See also -[`FT.CREATE`]({{< baseurl >}}commands/ft.create/) | [`FT.AGGREGATE`]({{< baseurl >}}commands/ft.aggregate/) +[`FT.CREATE`]({{< relref "commands/ft.create/" >}}) | [`FT.AGGREGATE`]({{< relref "commands/ft.aggregate/" >}}) ## Related topics diff --git a/content/commands/ft.spellcheck/index.md b/content/commands/ft.spellcheck/index.md index a6e9fccc73..ab9cc21dad 100644 --- a/content/commands/ft.spellcheck/index.md +++ b/content/commands/ft.spellcheck/index.md @@ -90,7 +90,7 @@ See [Spellchecking]({{< relref "/develop/interact/search-and-query/advanced-conc
TERMS -specifies an inclusion (`INCLUDE`) or exclusion (`EXCLUDE`) of a custom dictionary. To learn more about managing custom dictionaries, see [`FT.DICTADD`]({{< baseurl >}}commands/ft.dictadd/), [`FT.DICTDEL`]({{< baseurl >}}commands/ft.dictdel/), and [`FT.DICTDUMP`]({{< baseurl >}}commands/ft.dictdump/). +specifies an inclusion (`INCLUDE`) or exclusion (`EXCLUDE`) of a custom dictionary. To learn more about managing custom dictionaries, see [`FT.DICTADD`]({{< relref "commands/ft.dictadd/" >}}), [`FT.DICTDEL`]({{< relref "commands/ft.dictdel/" >}}), and [`FT.DICTDUMP`]({{< relref "commands/ft.dictdump/" >}}). You can specify multiple inclusion and exclusion `TERMS`.
@@ -104,7 +104,7 @@ is maximum Levenshtein distance for spelling suggestions (default: 1, max: 4).
DIALECT {dialect_version} -selects the dialect version under which to execute the query. If not specified, the query will execute under the default dialect version set during module initial loading or via [`FT.CONFIG SET`]({{< baseurl >}}commands/ft.config-set/) command. +selects the dialect version under which to execute the query. If not specified, the query will execute under the default dialect version set during module initial loading or via [`FT.CONFIG SET`]({{< relref "commands/ft.config-set/" >}}) command.
## Return @@ -132,7 +132,7 @@ The score is calculated by dividing the number of documents in which the suggest ## See also -[`FT.CONFIG SET`]({{< baseurl >}}commands/ft.config-set/) | [`FT.DICTADD`]({{< baseurl >}}commands/ft.dictadd/) | [`FT.DICTDEL`]({{< baseurl >}}commands/ft.dictdel/) | [`FT.DICTDUMP`]({{< baseurl >}}commands/ft.dictdump/) +[`FT.CONFIG SET`]({{< relref "commands/ft.config-set/" >}}) | [`FT.DICTADD`]({{< relref "commands/ft.dictadd/" >}}) | [`FT.DICTDEL`]({{< relref "commands/ft.dictdel/" >}}) | [`FT.DICTDUMP`]({{< relref "commands/ft.dictdump/" >}}) ## Related topics diff --git a/content/commands/ft.sugadd/index.md b/content/commands/ft.sugadd/index.md index 9642cb1ab4..74bb63830d 100644 --- a/content/commands/ft.sugadd/index.md +++ b/content/commands/ft.sugadd/index.md @@ -79,7 +79,7 @@ increments the existing entry of the suggestion by the given score, instead of r
PAYLOAD {payload} -saves an extra payload with the suggestion, that can be fetched by adding the `WITHPAYLOADS` argument to [`FT.SUGGET`]({{< baseurl >}}commands/ft.sugget/). +saves an extra payload with the suggestion, that can be fetched by adding the `WITHPAYLOADS` argument to [`FT.SUGGET`]({{< relref "commands/ft.sugget/" >}}).
## Return @@ -99,7 +99,7 @@ FT.SUGADD returns an integer reply, which is the current size of the suggestion ## See also -[`FT.SUGGET`]({{< baseurl >}}commands/ft.sugget/) | [`FT.SUGDEL`]({{< baseurl >}}commands/ft.sugdel/) | [`FT.SUGLEN`]({{< baseurl >}}commands/ft.suglen/) +[`FT.SUGGET`]({{< relref "commands/ft.sugget/" >}}) | [`FT.SUGDEL`]({{< relref "commands/ft.sugdel/" >}}) | [`FT.SUGLEN`]({{< relref "commands/ft.suglen/" >}}) ## Related topics diff --git a/content/commands/ft.sugdel/index.md b/content/commands/ft.sugdel/index.md index 89de48f993..d10ce83908 100644 --- a/content/commands/ft.sugdel/index.md +++ b/content/commands/ft.sugdel/index.md @@ -68,7 +68,7 @@ FT.SUGDEL returns an integer reply, 1 if the string was found and deleted, 0 oth ## See also -[`FT.SUGGET`]({{< baseurl >}}commands/ft.sugget/) | [`FT.SUGADD`]({{< baseurl >}}commands/ft.sugadd/) | [`FT.SUGLEN`]({{< baseurl >}}commands/ft.suglen/) +[`FT.SUGGET`]({{< relref "commands/ft.sugget/" >}}) | [`FT.SUGADD`]({{< relref "commands/ft.sugadd/" >}}) | [`FT.SUGLEN`]({{< relref "commands/ft.suglen/" >}}) ## Related topics diff --git a/content/commands/ft.sugget/index.md b/content/commands/ft.sugget/index.md index c10eb6793f..474f1a8746 100644 --- a/content/commands/ft.sugget/index.md +++ b/content/commands/ft.sugget/index.md @@ -110,7 +110,7 @@ FT.SUGGET returns an array reply, which is a list of the top suggestions matchin ## See also -[`FT.SUGADD`]({{< baseurl >}}commands/ft.sugadd/) | [`FT.SUGDEL`]({{< baseurl >}}commands/ft.sugdel/) | [`FT.SUGLEN`]({{< baseurl >}}commands/ft.suglen/) +[`FT.SUGADD`]({{< relref "commands/ft.sugadd/" >}}) | [`FT.SUGDEL`]({{< relref "commands/ft.sugdel/" >}}) | [`FT.SUGLEN`]({{< relref "commands/ft.suglen/" >}}) ## Related topics diff --git a/content/commands/ft.suglen/index.md b/content/commands/ft.suglen/index.md index e9a5e66258..b06b84dbe8 100644 --- a/content/commands/ft.suglen/index.md +++ b/content/commands/ft.suglen/index.md @@ -58,7 +58,7 @@ FT.SUGLEN returns an integer reply, which is the current size of the suggestion ## See also -[`FT.SUGADD`]({{< baseurl >}}commands/ft.sugadd/) | [`FT.SUGDEL`]({{< baseurl >}}commands/ft.sugdel/) | [`FT.SUGGET`]({{< baseurl >}}commands/ft.sugget/) +[`FT.SUGADD`]({{< relref "commands/ft.sugadd/" >}}) | [`FT.SUGDEL`]({{< relref "commands/ft.sugdel/" >}}) | [`FT.SUGGET`]({{< relref "commands/ft.sugget/" >}}) ## Related topics diff --git a/content/commands/ft.syndump/index.md b/content/commands/ft.syndump/index.md index fc470f2ed7..1cf3a1c113 100644 --- a/content/commands/ft.syndump/index.md +++ b/content/commands/ft.syndump/index.md @@ -66,7 +66,7 @@ FT.SYNDUMP returns an array reply, with a pair of `term` and an array of synonym ## See also -[`FT.SYNUPDATE`]({{< baseurl >}}commands/ft.synupdate/) +[`FT.SYNUPDATE`]({{< relref "commands/ft.synupdate/" >}}) ## Related topics diff --git a/content/commands/ft.synupdate/index.md b/content/commands/ft.synupdate/index.md index ed2710d4af..42ddd048f7 100644 --- a/content/commands/ft.synupdate/index.md +++ b/content/commands/ft.synupdate/index.md @@ -88,7 +88,7 @@ OK ## See also -[`FT.SYNDUMP`]({{< baseurl >}}commands/ft.syndump/) +[`FT.SYNDUMP`]({{< relref "commands/ft.syndump/" >}}) ## Related topics diff --git a/content/commands/ft.tagvals/index.md b/content/commands/ft.tagvals/index.md index 226db8ebad..75f6a8134c 100644 --- a/content/commands/ft.tagvals/index.md +++ b/content/commands/ft.tagvals/index.md @@ -42,7 +42,7 @@ Return a distinct set of values indexed in a Tag field
index -is full-text index name. You must first create the index using [`FT.CREATE`]({{< baseurl >}}commands/ft.create/). +is full-text index name. You must first create the index using [`FT.CREATE`]({{< relref "commands/ft.create/" >}}).
@@ -76,7 +76,7 @@ FT.TAGVALS returns an array reply of all distinct tags in the tag index. ## See also -[`FT.CREATE`]({{< baseurl >}}commands/ft.create/) +[`FT.CREATE`]({{< relref "commands/ft.create/" >}}) ## Related topics diff --git a/content/commands/function-list/index.md b/content/commands/function-list/index.md index bf07b8e6a6..a85536ea8d 100644 --- a/content/commands/function-list/index.md +++ b/content/commands/function-list/index.md @@ -52,7 +52,7 @@ The following information is provided for each of the libraries in the response: Each function has the following fields: * **name:** the name of the function. * **description:** the function's description. - * **flags:** an array of [function flags]({{< baseurl >}}develop/interact/programmability/functions-intro#function-flags). + * **flags:** an array of [function flags]({{< relref "develop/interact/programmability/functions-intro#function-flags" >}}). * **library_code:** the library's source code (when given the `WITHCODE` modifier). For more information please refer to [Introduction to Redis Functions]({{< relref "/develop/interact/programmability/functions-intro" >}}). diff --git a/content/commands/function-load/index.md b/content/commands/function-load/index.md index eda213d6c3..5749a13d93 100644 --- a/content/commands/function-load/index.md +++ b/content/commands/function-load/index.md @@ -47,7 +47,7 @@ The command's gets a single mandatory parameter which is the source code that im The library payload must start with Shebang statement that provides a metadata about the library (like the engine to use and the library name). Shebang format: `#! name=`. Currently engine name must be `lua`. -For the Lua engine, the implementation should declare one or more entry points to the library with the [`redis.register_function()` API]({{< baseurl >}}develop/interact/programmability/lua-api#redis.register_function). +For the Lua engine, the implementation should declare one or more entry points to the library with the [`redis.register_function()` API]({{< relref "develop/interact/programmability/lua-api#redis.register_function" >}}). Once loaded, you can call the functions in the library with the [`FCALL`]({{< relref "/commands/fcall" >}}) (or [`FCALL_RO`]({{< relref "/commands/fcall_ro" >}}) when applicable) command. When attempting to load a library with a name that already exists, the Redis server returns an error. diff --git a/content/commands/json.arrappend/index.md b/content/commands/json.arrappend/index.md index 14e928939a..339e2a8fd6 100644 --- a/content/commands/json.arrappend/index.md +++ b/content/commands/json.arrappend/index.md @@ -63,7 +63,7 @@ is JSONPath to specify. Default is root `$`. ## Return value -`JSON.ARRAPEND` returns an [array]({{< baseurl >}}develop/reference/protocol-spec#resp-arrays) of integer replies for each path, the array's new size, or `nil`, if the matching JSON value is not an array. +`JSON.ARRAPEND` returns an [array]({{< relref "develop/reference/protocol-spec#resp-arrays" >}}) of integer replies for each path, the array's new size, or `nil`, if the matching JSON value is not an array. For more information about replies, see [Redis serialization protocol specification]({{< relref "/develop/reference/protocol-spec" >}}). ## Examples @@ -96,7 +96,7 @@ redis> JSON.GET item:1 ## See also -[`JSON.ARRINDEX`]({{< baseurl >}}commands/json.arrindex/) | [`JSON.ARRINSERT`]({{< baseurl >}}commands/json.arrinsert/) +[`JSON.ARRINDEX`]({{< relref "commands/json.arrindex/" >}}) | [`JSON.ARRINSERT`]({{< relref "commands/json.arrinsert/" >}}) ## Related topics diff --git a/content/commands/json.arrindex/index.md b/content/commands/json.arrindex/index.md index c30466e320..d987b3bedf 100644 --- a/content/commands/json.arrindex/index.md +++ b/content/commands/json.arrindex/index.md @@ -87,7 +87,7 @@ Out-of-range indexes round to the array's start and end. An inverse index range ## Return value -`JSON.ARRINDEX` returns an [array]({{< baseurl >}}develop/reference/protocol-spec#resp-arrays) of integer replies for each path, the first position in the array of each JSON value that matches the path, `-1` if unfound in the array, or `nil`, if the matching JSON value is not an array. +`JSON.ARRINDEX` returns an [array]({{< relref "develop/reference/protocol-spec#resp-arrays" >}}) of integer replies for each path, the first position in the array of each JSON value that matches the path, `-1` if unfound in the array, or `nil`, if the matching JSON value is not an array. For more information about replies, see [Redis serialization protocol specification]({{< relref "/develop/reference/protocol-spec" >}}). ## Examples @@ -147,7 +147,7 @@ redis> JSON.ARRINDEX item:1 $..colors '"silver"' ## See also -[`JSON.ARRAPPEND`]({{< baseurl >}}commands/json.arrappend/) | [`JSON.ARRINSERT`]({{< baseurl >}}commands/json.arrinsert/) +[`JSON.ARRAPPEND`]({{< relref "commands/json.arrappend/" >}}) | [`JSON.ARRINSERT`]({{< relref "commands/json.arrinsert/" >}}) ## Related topics diff --git a/content/commands/json.arrinsert/index.md b/content/commands/json.arrinsert/index.md index 351a6ced0f..df8b4cbaed 100644 --- a/content/commands/json.arrinsert/index.md +++ b/content/commands/json.arrinsert/index.md @@ -69,7 +69,7 @@ is JSONPath to specify. Default is root `$`. ## Return value -`JSON.ARRINSERT` returns an [array]({{< baseurl >}}develop/reference/protocol-spec#resp-arrays) of integer replies for each path, the array's new size, or `nil`, if the matching JSON value is not an array. +`JSON.ARRINSERT` returns an [array]({{< relref "develop/reference/protocol-spec#resp-arrays" >}}) of integer replies for each path, the array's new size, or `nil`, if the matching JSON value is not an array. For more information about replies, see [Redis serialization protocol specification]({{< relref "/develop/reference/protocol-spec" >}}). ## Examples @@ -122,7 +122,7 @@ redis> JSON.GET item:1 $.colors ## See also -[`JSON.ARRAPPEND`]({{< baseurl >}}commands/json.arrappend/) | [`JSON.ARRINDEX`]({{< baseurl >}}commands/json.arrindex/) +[`JSON.ARRAPPEND`]({{< relref "commands/json.arrappend/" >}}) | [`JSON.ARRINDEX`]({{< relref "commands/json.arrindex/" >}}) ## Related topics diff --git a/content/commands/json.arrlen/index.md b/content/commands/json.arrlen/index.md index ac41d6a44b..e6f82f2a1a 100644 --- a/content/commands/json.arrlen/index.md +++ b/content/commands/json.arrlen/index.md @@ -49,7 +49,7 @@ is JSONPath to specify. Default is root `$`, if not provided. Returns null if th ## Return -`JSON.ARRLEN` returns an [array]({{< baseurl >}}develop/reference/protocol-spec#resp-arrays) of integer replies, an integer for each matching value, each is the array's length, or `nil`, if the matching value is not an array. +`JSON.ARRLEN` returns an [array]({{< relref "develop/reference/protocol-spec#resp-arrays" >}}) of integer replies, an integer for each matching value, each is the array's length, or `nil`, if the matching value is not an array. For more information about replies, see [Redis serialization protocol specification]({{< relref "/develop/reference/protocol-spec" >}}). ## Examples @@ -95,7 +95,7 @@ redis> JSON.GET item:2 '$..max_level' ## See also -[`JSON.ARRINDEX`]({{< baseurl >}}commands/json.arrindex/) | [`JSON.ARRINSERT`]({{< baseurl >}}commands/json.arrinsert/) +[`JSON.ARRINDEX`]({{< relref "commands/json.arrindex/" >}}) | [`JSON.ARRINSERT`]({{< relref "commands/json.arrinsert/" >}}) ## Related topics diff --git a/content/commands/json.arrpop/index.md b/content/commands/json.arrpop/index.md index 533bd36916..32d0d0ba3a 100644 --- a/content/commands/json.arrpop/index.md +++ b/content/commands/json.arrpop/index.md @@ -63,7 +63,7 @@ is JSONPath to specify. Default is root `$`. ## Return -`JSON.ARRPOP` returns an [array]({{< baseurl >}}develop/reference/protocol-spec#resp-arrays) of bulk string replies for each path, each reply is the popped JSON value, or `nil`, if the matching JSON value is not an array. +`JSON.ARRPOP` returns an [array]({{< relref "develop/reference/protocol-spec#resp-arrays" >}}) of bulk string replies for each path, each reply is the popped JSON value, or `nil`, if the matching JSON value is not an array. For more information about replies, see [Redis serialization protocol specification]({{< relref "/develop/reference/protocol-spec" >}}). ## Examples @@ -116,7 +116,7 @@ redis> JSON.GET key $.[1].max_level ## See also -[`JSON.ARRAPPEND`]({{< baseurl >}}commands/json.arrappend/) | [`JSON.ARRINDEX`]({{< baseurl >}}commands/json.arrindex/) +[`JSON.ARRAPPEND`]({{< relref "commands/json.arrappend/" >}}) | [`JSON.ARRINDEX`]({{< relref "commands/json.arrindex/" >}}) ## Related topics diff --git a/content/commands/json.arrtrim/index.md b/content/commands/json.arrtrim/index.md index 923446eee2..8e8e567458 100644 --- a/content/commands/json.arrtrim/index.md +++ b/content/commands/json.arrtrim/index.md @@ -123,7 +123,7 @@ redis> JSON.GET key $.[1].max_level ## See also -[`JSON.ARRINDEX`]({{< baseurl >}}commands/json.arrindex/) | [`JSON.ARRINSERT`]({{< baseurl >}}commands/json.arrinsert/) +[`JSON.ARRINDEX`]({{< relref "commands/json.arrindex/" >}}) | [`JSON.ARRINSERT`]({{< relref "commands/json.arrinsert/" >}}) ## Related topics diff --git a/content/commands/json.clear/index.md b/content/commands/json.clear/index.md index 5b44690176..2f9a5fd0f3 100644 --- a/content/commands/json.clear/index.md +++ b/content/commands/json.clear/index.md @@ -89,7 +89,7 @@ redis> JSON.GET doc $ ## See also -[`JSON.ARRINDEX`]({{< baseurl >}}commands/json.arrindex/) | [`JSON.ARRINSERT`]({{< baseurl >}}commands/json.arrinsert/) +[`JSON.ARRINDEX`]({{< relref "commands/json.arrindex/" >}}) | [`JSON.ARRINSERT`]({{< relref "commands/json.arrinsert/" >}}) ## Related topics diff --git a/content/commands/json.debug-help/index.md b/content/commands/json.debug-help/index.md index 905a3f2be0..c99ceade4f 100644 --- a/content/commands/json.debug-help/index.md +++ b/content/commands/json.debug-help/index.md @@ -22,7 +22,7 @@ syntax_fmt: JSON.DEBUG HELP syntax_str: '' title: JSON.DEBUG HELP --- -Return helpful information about the [`JSON.DEBUG`]({{< baseurl >}}commands/json.debug/) command +Return helpful information about the [`JSON.DEBUG`]({{< relref "commands/json.debug/" >}}) command ## Return @@ -30,7 +30,7 @@ JSON.DEBUG HELP returns an array with helpful messages. ## See also -[`JSON.DEBUG`]({{< baseurl >}}commands/json.debug/) +[`JSON.DEBUG`]({{< relref "commands/json.debug/" >}}) ## Related topics diff --git a/content/commands/json.debug-memory/index.md b/content/commands/json.debug-memory/index.md index ee9ef91250..86bb959d9b 100644 --- a/content/commands/json.debug-memory/index.md +++ b/content/commands/json.debug-memory/index.md @@ -75,7 +75,7 @@ redis> JSON.DEBUG MEMORY item:2 ## See also -[`JSON.SET`]({{< baseurl >}}commands/json.set/) | [`JSON.ARRLEN`]({{< baseurl >}}commands/json.arrlen/) +[`JSON.SET`]({{< relref "commands/json.set/" >}}) | [`JSON.ARRLEN`]({{< relref "commands/json.arrlen/" >}}) ## Related topics diff --git a/content/commands/json.del/index.md b/content/commands/json.del/index.md index 43aca5da68..414343ea89 100644 --- a/content/commands/json.del/index.md +++ b/content/commands/json.del/index.md @@ -88,7 +88,7 @@ redis> JSON.GET doc $ ## See also -[`JSON.SET`]({{< baseurl >}}commands/json.set/) | [`JSON.ARRLEN`]({{< baseurl >}}commands/json.arrlen/) +[`JSON.SET`]({{< relref "commands/json.set/" >}}) | [`JSON.ARRLEN`]({{< relref "commands/json.arrlen/" >}}) ## Related topics diff --git a/content/commands/json.forget/index.md b/content/commands/json.forget/index.md index 0a1fccddb1..e996dc3f9b 100644 --- a/content/commands/json.forget/index.md +++ b/content/commands/json.forget/index.md @@ -30,4 +30,4 @@ syntax_fmt: JSON.FORGET key [path] syntax_str: '[path]' title: JSON.FORGET --- -See [`JSON.DEL`]({{< baseurl >}}commands/json.del/). \ No newline at end of file +See [`JSON.DEL`]({{< relref "commands/json.del/" >}}). \ No newline at end of file diff --git a/content/commands/json.get/index.md b/content/commands/json.get/index.md index ffe01c528e..f57153af97 100644 --- a/content/commands/json.get/index.md +++ b/content/commands/json.get/index.md @@ -137,7 +137,7 @@ redis> JSON.GET doc ..a $..b ## See also -[`JSON.SET`]({{< baseurl >}}commands/json.set/) | [`JSON.MGET`]({{< baseurl >}}commands/json.mget/) +[`JSON.SET`]({{< relref "commands/json.set/" >}}) | [`JSON.MGET`]({{< relref "commands/json.mget/" >}}) ## Related topics diff --git a/content/commands/json.merge/index.md b/content/commands/json.merge/index.md index 24c99cbf1a..34302b16b8 100644 --- a/content/commands/json.merge/index.md +++ b/content/commands/json.merge/index.md @@ -147,7 +147,7 @@ redis> JSON.GET doc ## See also -[`JSON.GET`]({{< baseurl >}}commands/json.get/) | [`JSON.MGET`]({{< baseurl >}}commands/json.mget/) | [`JSON.SET`]({{< baseurl >}}commands/json.set/) | [`JSON.MSET`]({{< baseurl >}}commands/json.mset/) +[`JSON.GET`]({{< relref "commands/json.get/" >}}) | [`JSON.MGET`]({{< relref "commands/json.mget/" >}}) | [`JSON.SET`]({{< relref "commands/json.set/" >}}) | [`JSON.MSET`]({{< relref "commands/json.mset/" >}}) ## Related topics diff --git a/content/commands/json.mget/index.md b/content/commands/json.mget/index.md index 410a921436..29953100c0 100644 --- a/content/commands/json.mget/index.md +++ b/content/commands/json.mget/index.md @@ -87,7 +87,7 @@ redis> JSON.MGET doc1 doc2 $..a ## See also -[`JSON.SET`]({{< baseurl >}}commands/json.set/) | [`JSON.GET`]({{< baseurl >}}commands/json.get/) +[`JSON.SET`]({{< relref "commands/json.set/" >}}) | [`JSON.GET`]({{< relref "commands/json.get/" >}}) ## Related topics diff --git a/content/commands/json.mset/index.md b/content/commands/json.mset/index.md index 1043aee629..17c70d94e0 100644 --- a/content/commands/json.mset/index.md +++ b/content/commands/json.mset/index.md @@ -94,7 +94,7 @@ redis> JSON.GET doc3 ## See also -[`JSON.SET`]({{< baseurl >}}commands/json.set/) | [`JSON.MGET`]({{< baseurl >}}commands/json.mget/) | [`JSON.GET`]({{< baseurl >}}commands/json.get/) +[`JSON.SET`]({{< relref "commands/json.set/" >}}) | [`JSON.MGET`]({{< relref "commands/json.mget/" >}}) | [`JSON.GET`]({{< relref "commands/json.get/" >}}) ## Related topics diff --git a/content/commands/json.numincrby/index.md b/content/commands/json.numincrby/index.md index f24fbb273f..5d23ec1514 100644 --- a/content/commands/json.numincrby/index.md +++ b/content/commands/json.numincrby/index.md @@ -86,7 +86,7 @@ redis> JSON.NUMINCRBY doc $..a 2 ## See also -[`JSON.ARRINDEX`]({{< baseurl >}}commands/json.arrindex/) | [`JSON.ARRINSERT`]({{< baseurl >}}commands/json.arrinsert/) +[`JSON.ARRINDEX`]({{< relref "commands/json.arrindex/" >}}) | [`JSON.ARRINSERT`]({{< relref "commands/json.arrinsert/" >}}) ## Related topics diff --git a/content/commands/json.nummultby/index.md b/content/commands/json.nummultby/index.md index 4cbfa1af87..8663a9b874 100644 --- a/content/commands/json.nummultby/index.md +++ b/content/commands/json.nummultby/index.md @@ -72,7 +72,7 @@ redis> JSON.NUMMULTBY doc $..a 2 ## See also -[`JSON.NUMINCRBY`]({{< baseurl >}}commands/json.numincrby/) | [`JSON.ARRINSERT`]({{< baseurl >}}commands/json.arrinsert/) +[`JSON.NUMINCRBY`]({{< relref "commands/json.numincrby/" >}}) | [`JSON.ARRINSERT`]({{< relref "commands/json.arrinsert/" >}}) ## Related topics diff --git a/content/commands/json.objkeys/index.md b/content/commands/json.objkeys/index.md index d3fb71cd13..4f6f245d3d 100644 --- a/content/commands/json.objkeys/index.md +++ b/content/commands/json.objkeys/index.md @@ -67,7 +67,7 @@ redis> JSON.OBJKEYS doc $..a ## See also -[`JSON.ARRINDEX`]({{< baseurl >}}commands/json.arrindex/) | [`JSON.ARRINSERT`]({{< baseurl >}}commands/json.arrinsert/) +[`JSON.ARRINDEX`]({{< relref "commands/json.arrindex/" >}}) | [`JSON.ARRINSERT`]({{< relref "commands/json.arrinsert/" >}}) ## Related topics diff --git a/content/commands/json.objlen/index.md b/content/commands/json.objlen/index.md index db2afb406e..aadc9de345 100644 --- a/content/commands/json.objlen/index.md +++ b/content/commands/json.objlen/index.md @@ -65,7 +65,7 @@ redis> JSON.OBJLEN doc $..a ## See also -[`JSON.ARRINDEX`]({{< baseurl >}}commands/json.arrindex/) | [`JSON.ARRINSERT`]({{< baseurl >}}commands/json.arrinsert/) +[`JSON.ARRINDEX`]({{< relref "commands/json.arrindex/" >}}) | [`JSON.ARRINSERT`]({{< relref "commands/json.arrinsert/" >}}) ## Related topics diff --git a/content/commands/json.resp/index.md b/content/commands/json.resp/index.md index 72db8162e8..0ff1542921 100644 --- a/content/commands/json.resp/index.md +++ b/content/commands/json.resp/index.md @@ -107,7 +107,7 @@ redis> JSON.RESP item:2 ## See also -[`JSON.SET`]({{< baseurl >}}commands/json.set/) | [`JSON.ARRLEN`]({{< baseurl >}}commands/json.arrlen/) +[`JSON.SET`]({{< relref "commands/json.set/" >}}) | [`JSON.ARRLEN`]({{< relref "commands/json.arrlen/" >}}) ## Related topics diff --git a/content/commands/json.set/index.md b/content/commands/json.set/index.md index 324bd33a69..d5b69af75f 100644 --- a/content/commands/json.set/index.md +++ b/content/commands/json.set/index.md @@ -163,7 +163,7 @@ redis> JSON.SET nonexistentkey $.x 5 ## See also -[`JSON.GET`]({{< baseurl >}}commands/json.get/) | [`JSON.MGET`]({{< baseurl >}}commands/json.mget/) +[`JSON.GET`]({{< relref "commands/json.get/" >}}) | [`JSON.MGET`]({{< relref "commands/json.mget/" >}}) ## Related topics diff --git a/content/commands/json.strappend/index.md b/content/commands/json.strappend/index.md index 24cbd0aeb4..0ae54556a2 100644 --- a/content/commands/json.strappend/index.md +++ b/content/commands/json.strappend/index.md @@ -78,7 +78,7 @@ redis> JSON.GET doc $ ## See also -`JSON.ARRAPEND` | [`JSON.ARRINSERT`]({{< baseurl >}}commands/json.arrinsert/) +`JSON.ARRAPEND` | [`JSON.ARRINSERT`]({{< relref "commands/json.arrinsert/" >}}) ## Related topics diff --git a/content/commands/json.strlen/index.md b/content/commands/json.strlen/index.md index cffc1098a7..fee1f66055 100644 --- a/content/commands/json.strlen/index.md +++ b/content/commands/json.strlen/index.md @@ -65,7 +65,7 @@ redis> JSON.STRLEN doc $..a ## See also -[`JSON.ARRLEN`]({{< baseurl >}}commands/json.arrlen/) | [`JSON.ARRINSERT`]({{< baseurl >}}commands/json.arrinsert/) +[`JSON.ARRLEN`]({{< relref "commands/json.arrlen/" >}}) | [`JSON.ARRINSERT`]({{< relref "commands/json.arrinsert/" >}}) ## Related topics diff --git a/content/commands/json.toggle/index.md b/content/commands/json.toggle/index.md index a7bf7c7a0d..da3333ed43 100644 --- a/content/commands/json.toggle/index.md +++ b/content/commands/json.toggle/index.md @@ -95,7 +95,7 @@ redis> JSON.GET doc $ ## See also -[`JSON.SET`]({{< baseurl >}}commands/json.set/) | [`JSON.GET`]({{< baseurl >}}commands/json.get/) +[`JSON.SET`]({{< relref "commands/json.set/" >}}) | [`JSON.GET`]({{< relref "commands/json.get/" >}}) ## Related topics diff --git a/content/commands/json.type/index.md b/content/commands/json.type/index.md index 0092ebf894..62efb37dbe 100644 --- a/content/commands/json.type/index.md +++ b/content/commands/json.type/index.md @@ -69,7 +69,7 @@ redis> JSON.TYPE doc $..dummy ## See also -[`JSON.SET`]({{< baseurl >}}commands/json.set/) | [`JSON.ARRLEN`]({{< baseurl >}}commands/json.arrlen/) +[`JSON.SET`]({{< relref "commands/json.set/" >}}) | [`JSON.ARRLEN`]({{< relref "commands/json.arrlen/" >}}) ## Related topics diff --git a/content/commands/keys/index.md b/content/commands/keys/index.md index 2cdaaa8997..aee2776a14 100644 --- a/content/commands/keys/index.md +++ b/content/commands/keys/index.md @@ -67,7 +67,7 @@ If a pattern can only match keys of one slot, Redis only iterates over keys in that slot, rather than the whole database, when searching for keys matching the pattern. For example, with the pattern `{a}h*llo`, Redis would only try to match it with the keys in slot 15495, which hash tag `{a}` implies. -To use pattern with hash tag, see [Hash tags]({{< baseurl >}}operate/oss_and_stack/reference/cluster-spec#hash-tags) in the Cluster specification for more information. +To use pattern with hash tag, see [Hash tags]({{< relref "operate/oss_and_stack/reference/cluster-spec#hash-tags" >}}) in the Cluster specification for more information. ## Examples diff --git a/content/commands/scan/index.md b/content/commands/scan/index.md index 7f7901295a..01baf0ed15 100644 --- a/content/commands/scan/index.md +++ b/content/commands/scan/index.md @@ -209,7 +209,7 @@ If a pattern can only match keys of one slot, Redis only iterates over keys in that slot, rather than the whole database, when searching for keys matching the pattern. For example, with the pattern `{a}h*llo`, Redis would only try to match it with the keys in slot 15495, which hash tag `{a}` implies. -To use pattern with hash tag, see [Hash tags]({{< baseurl >}}operate/oss_and_stack/reference/cluster-spec#hash-tags) in the Cluster specification for more information. +To use pattern with hash tag, see [Hash tags]({{< relref "operate/oss_and_stack/reference/cluster-spec#hash-tags" >}}) in the Cluster specification for more information. ## The TYPE option diff --git a/content/commands/sort/index.md b/content/commands/sort/index.md index b42ee1da96..001b68da52 100644 --- a/content/commands/sort/index.md +++ b/content/commands/sort/index.md @@ -235,7 +235,7 @@ Before 7.4, when enabling `Redis cluster-mode` there is no way to guarantee the Starting from 7.4, pattern with hash tag can be mapped to a slot, and so in `Redis cluster-mode`, the use of `BY` or [`GET`]({{< relref "/commands/get" >}}) is allowed when pattern contains hash tag and implies a specific slot which the key is also in, which means any key matching this pattern must be in the same slot as the key, and therefore in the same node. For example, in cluster mode, `{mylist}weight_*` is acceptable as a pattern when sorting `mylist`, while pattern `{abc}weight_*` will be denied, causing the command to fail with an error. -To use pattern with hash tag, see [Hash tags]({{< baseurl >}}operate/oss_and_stack/reference/cluster-spec#hash-tags) for more information. +To use pattern with hash tag, see [Hash tags]({{< relref "operate/oss_and_stack/reference/cluster-spec#hash-tags" >}}) for more information. Starting from Redis 7.0, any use of [`GET`]({{< relref "/commands/get" >}}) or `BY` which reference external key pattern will only be allowed in case the current user running the command has full key read permissions. Full key read permissions can be set for the user by, for example, specifying `'%R~*'` or `'~*` with the relevant command access rules. diff --git a/content/commands/ts.add/index.md b/content/commands/ts.add/index.md index 1e06e5989c..3e66cc68a2 100644 --- a/content/commands/ts.add/index.md +++ b/content/commands/ts.add/index.md @@ -120,52 +120,52 @@ is (double) numeric data value of the sample. The double number should follow [R Notes: - When specified key does not exist, a new time series is created. - if a [COMPACTION_POLICY]({{< baseurl >}}develop/data-types/timeseries/configuration#compaction_policy) configuration parameter is defined, compacted time series would be created as well. + if a [COMPACTION_POLICY]({{< relref "develop/data-types/timeseries/configuration#compaction_policy" >}}) configuration parameter is defined, compacted time series would be created as well. - If `timestamp` is older than the retention period compared to the maximum existing timestamp, the sample is discarded and an error is returned. - When adding a sample to a time series for which compaction rules are defined: - If all the original samples for an affected aggregated time bucket are available, the compacted value is recalculated based on the reported sample and the original samples. - If only a part of the original samples for an affected aggregated time bucket is available due to trimming caused in accordance with the time series RETENTION policy, the compacted value is recalculated based on the reported sample and the available original samples. - If the original samples for an affected aggregated time bucket are not available due to trimming caused in accordance with the time series RETENTION policy, the compacted value bucket is not updated. -- Explicitly adding samples to a compacted time series (using `TS.ADD`, [`TS.MADD`]({{< baseurl >}}commands/ts.madd/), [`TS.INCRBY`]({{< baseurl >}}commands/ts.incrby/), or [`TS.DECRBY`]({{< baseurl >}}commands/ts.decrby/)) may result in inconsistencies between the raw and the compacted data. The compaction process may override such samples. +- Explicitly adding samples to a compacted time series (using `TS.ADD`, [`TS.MADD`]({{< relref "commands/ts.madd/" >}}), [`TS.INCRBY`]({{< relref "commands/ts.incrby/" >}}), or [`TS.DECRBY`]({{< relref "commands/ts.decrby/" >}})) may result in inconsistencies between the raw and the compacted data. The compaction process may override such samples. ## Optional arguments -The following arguments are optional because they can be set by [`TS.CREATE`]({{< baseurl >}}commands/ts.create/). +The following arguments are optional because they can be set by [`TS.CREATE`]({{< relref "commands/ts.create/" >}}).
RETENTION retentionPeriod is maximum retention period, compared to the maximum existing timestamp, in milliseconds. -Use it only if you are creating a new time series. It is ignored if you are adding samples to an existing time series. See `RETENTION` in [`TS.CREATE`]({{< baseurl >}}commands/ts.create/). +Use it only if you are creating a new time series. It is ignored if you are adding samples to an existing time series. See `RETENTION` in [`TS.CREATE`]({{< relref "commands/ts.create/" >}}).
ENCODING enc specifies the series sample encoding format. -Use it only if you are creating a new time series. It is ignored if you are adding samples to an existing time series. See `ENCODING` in [`TS.CREATE`]({{< baseurl >}}commands/ts.create/). +Use it only if you are creating a new time series. It is ignored if you are adding samples to an existing time series. See `ENCODING` in [`TS.CREATE`]({{< relref "commands/ts.create/" >}}).
CHUNK_SIZE size is memory size, in bytes, allocated for each data chunk. -Use it only if you are creating a new time series. It is ignored if you are adding samples to an existing time series. See `CHUNK_SIZE` in [`TS.CREATE`]({{< baseurl >}}commands/ts.create/). +Use it only if you are creating a new time series. It is ignored if you are adding samples to an existing time series. See `CHUNK_SIZE` in [`TS.CREATE`]({{< relref "commands/ts.create/" >}}).
DUPLICATE_POLICY policy -is policy for handling insertion ([`TS.ADD`]({{< baseurl >}}commands/ts.add/) and [`TS.MADD`]({{< baseurl >}}commands/ts.madd/)) of multiple samples with identical timestamps. +is policy for handling insertion ([`TS.ADD`]({{< relref "commands/ts.add/" >}}) and [`TS.MADD`]({{< relref "commands/ts.madd/" >}})) of multiple samples with identical timestamps. -Use it only if you are creating a new time series. It is ignored if you are adding samples to an existing time series. See `DUPLICATE_POLICY` in [`TS.CREATE`]({{< baseurl >}}commands/ts.create/). +Use it only if you are creating a new time series. It is ignored if you are adding samples to an existing time series. See `DUPLICATE_POLICY` in [`TS.CREATE`]({{< relref "commands/ts.create/" >}}).
ON_DUPLICATE policy_ovr -is overwrite key and database configuration for [DUPLICATE_POLICY]({{< baseurl >}}develop/data-types/timeseries/configuration#duplicate_policy), the policy for handling samples with identical timestamps. -This override is effective only for this single command and does not set the time series duplication policy (which can be set with [`TS.ALTER`]({{< baseurl >}}commands/ts.alter/)). +is overwrite key and database configuration for [DUPLICATE_POLICY]({{< relref "develop/data-types/timeseries/configuration#duplicate_policy" >}}), the policy for handling samples with identical timestamps. +This override is effective only for this single command and does not set the time series duplication policy (which can be set with [`TS.ALTER`]({{< relref "commands/ts.alter/" >}})). `policy_ovr` can be one of the following values: - `BLOCK`: ignore any newly reported value and reply with an error @@ -190,7 +190,7 @@ is the policy for handling duplicate samples. A new sample is considered a dupli where `max_timestamp` is the timestamp of the sample with the largest timestamp in the time series, and `value_at_max_timestamp` is the value at `max_timestamp`. -When not specified: set to the global [IGNORE_MAX_TIME_DIFF]({{< baseurl >}}develop/data-types/timeseries/configuration#ignore_max_time_diff-and-ignore_max_val_diff) and [IGNORE_MAX_VAL_DIFF]({{< baseurl >}}develop/data-types/timeseries/configuration#ignore_max_time_diff-and-ignore_max_val_diff), which are, by default, both set to 0. +When not specified: set to the global [IGNORE_MAX_TIME_DIFF]({{< relref "develop/data-types/timeseries/configuration#ignore_max_time_diff-and-ignore_max_val_diff" >}}) and [IGNORE_MAX_VAL_DIFF]({{< relref "develop/data-types/timeseries/configuration#ignore_max_time_diff-and-ignore_max_val_diff" >}}), which are, by default, both set to 0. These parameters are used when creating a new time series to set the per-key parameters, and are ignored when called with an existing time series (the existing per-key configuration parameters is used). @@ -200,7 +200,7 @@ These parameters are used when creating a new time series to set the per-key par is set of label-value pairs that represent metadata labels of the time series. -Use it only if you are creating a new time series. It is ignored if you are adding samples to an existing time series. See `LABELS` in [`TS.CREATE`]({{< baseurl >}}commands/ts.create/). +Use it only if you are creating a new time series. It is ignored if you are adding samples to an existing time series. See `LABELS` in [`TS.CREATE`]({{< relref "commands/ts.create/" >}}).
Notes: @@ -213,7 +213,7 @@ Use it only if you are creating a new time series. It is ignored if you are addi Returns one of these replies: -- [Integer reply]({{< relref "/develop/reference/protocol-spec#integers" >}}) - the timestamp of the upserted sample. If the sample is ignored (See `IGNORE` in [`TS.CREATE`]({{< baseurl >}}commands/ts.create/)), the reply will be the largest timestamp in the time series. +- [Integer reply]({{< relref "/develop/reference/protocol-spec#integers" >}}) - the timestamp of the upserted sample. If the sample is ignored (See `IGNORE` in [`TS.CREATE`]({{< relref "commands/ts.create/" >}})), the reply will be the largest timestamp in the time series. - [] on error (invalid arguments, wrong key type, etc.), when duplication policy is `BLOCK`, or when `timestamp` is older than the retention period compared to the maximum existing timestamp ## Complexity @@ -244,7 +244,7 @@ Add a sample to the time series, setting the sample's timestamp to the current U ## See also -[`TS.CREATE`]({{< baseurl >}}commands/ts.create/) +[`TS.CREATE`]({{< relref "commands/ts.create/" >}}) ## Related topics diff --git a/content/commands/ts.alter/index.md b/content/commands/ts.alter/index.md index 1c85419ab7..b3f0657c5d 100644 --- a/content/commands/ts.alter/index.md +++ b/content/commands/ts.alter/index.md @@ -90,29 +90,29 @@ is key name for the time series.
RETENTION retentionPeriod -is maximum retention period, compared to the maximum existing timestamp, in milliseconds. See `RETENTION` in [`TS.CREATE`]({{< baseurl >}}commands/ts.create/). +is maximum retention period, compared to the maximum existing timestamp, in milliseconds. See `RETENTION` in [`TS.CREATE`]({{< relref "commands/ts.create/" >}}).
CHUNK_SIZE size -is the initial allocation size, in bytes, for the data part of each new chunk. Actual chunks may consume more memory. See `CHUNK_SIZE` in [`TS.CREATE`]({{< baseurl >}}commands/ts.create/). Changing this value does not affect existing chunks. +is the initial allocation size, in bytes, for the data part of each new chunk. Actual chunks may consume more memory. See `CHUNK_SIZE` in [`TS.CREATE`]({{< relref "commands/ts.create/" >}}). Changing this value does not affect existing chunks.
DUPLICATE_POLICY policy -is policy for handling multiple samples with identical timestamps. See `DUPLICATE_POLICY` in [`TS.CREATE`]({{< baseurl >}}commands/ts.create/). +is policy for handling multiple samples with identical timestamps. See `DUPLICATE_POLICY` in [`TS.CREATE`]({{< relref "commands/ts.create/" >}}).
IGNORE ignoreMaxTimediff ignoreMaxValDiff -is the policy for handling duplicate samples. See `IGNORE` in [`TS.CREATE`]({{< baseurl >}}commands/ts.create/). +is the policy for handling duplicate samples. See `IGNORE` in [`TS.CREATE`]({{< relref "commands/ts.create/" >}}).
LABELS [{label value}...] is set of label-value pairs that represent metadata labels of the key and serve as a secondary index. -If `LABELS` is specified, the given label list is applied. Labels that are not present in the given list are removed implicitly. Specifying `LABELS` with no label-value pairs removes all existing labels. See `LABELS` in [`TS.CREATE`]({{< baseurl >}}commands/ts.create/). +If `LABELS` is specified, the given label list is applied. Labels that are not present in the given list are removed implicitly. Specifying `LABELS` with no label-value pairs removes all existing labels. See `LABELS` in [`TS.CREATE`]({{< relref "commands/ts.create/" >}}).
## Return value @@ -143,7 +143,7 @@ OK ## See also -[`TS.CREATE`]({{< baseurl >}}commands/ts.create/) +[`TS.CREATE`]({{< relref "commands/ts.create/" >}}) ## Related topics diff --git a/content/commands/ts.create/index.md b/content/commands/ts.create/index.md index e0e27693d9..3f8f4e74c8 100644 --- a/content/commands/ts.create/index.md +++ b/content/commands/ts.create/index.md @@ -98,16 +98,16 @@ is key name for the time series. Notes: - If a key already exists, you get a Redis error reply, `TSDB: key already exists`. You can check for the existence of a key with the [`EXISTS`]({{< relref "/commands/exists" >}}) command. -- Other commands that also create a new time series when called with a key that does not exist are [`TS.ADD`]({{< baseurl >}}commands/ts.add/), [`TS.INCRBY`]({{< baseurl >}}commands/ts.incrby/), and [`TS.DECRBY`]({{< baseurl >}}commands/ts.decrby/). +- Other commands that also create a new time series when called with a key that does not exist are [`TS.ADD`]({{< relref "commands/ts.add/" >}}), [`TS.INCRBY`]({{< relref "commands/ts.incrby/" >}}), and [`TS.DECRBY`]({{< relref "commands/ts.decrby/" >}}). ## Optional arguments
RETENTION retentionPeriod -is maximum age for samples compared to the highest reported timestamp, in milliseconds. Samples are expired based solely on the difference between their timestamp and the timestamps passed to subsequent [`TS.ADD`]({{< baseurl >}}commands/ts.add/), [`TS.MADD`]({{< baseurl >}}commands/ts.madd/), [`TS.INCRBY`]({{< baseurl >}}commands/ts.incrby/), and [`TS.DECRBY`]({{< baseurl >}}commands/ts.decrby/) calls with this key. +is maximum age for samples compared to the highest reported timestamp, in milliseconds. Samples are expired based solely on the difference between their timestamp and the timestamps passed to subsequent [`TS.ADD`]({{< relref "commands/ts.add/" >}}), [`TS.MADD`]({{< relref "commands/ts.madd/" >}}), [`TS.INCRBY`]({{< relref "commands/ts.incrby/" >}}), and [`TS.DECRBY`]({{< relref "commands/ts.decrby/" >}}) calls with this key. -When set to 0, samples never expire. When not specified, the option is set to the global [RETENTION_POLICY]({{< baseurl >}}develop/data-types/timeseries/configuration#retention_policy) configuration of the database, which by default is 0. +When set to 0, samples never expire. When not specified, the option is set to the global [RETENTION_POLICY]({{< relref "develop/data-types/timeseries/configuration#retention_policy" >}}) configuration of the database, which by default is 0.
ENCODING enc @@ -123,9 +123,9 @@ When not specified, the option is set to `COMPRESSED`.
CHUNK_SIZE size -is initial allocation size, in bytes, for the data part of each new chunk. Actual chunks may consume more memory. Changing chunkSize (using [`TS.ALTER`]({{< baseurl >}}commands/ts.alter/)) does not affect existing chunks. +is initial allocation size, in bytes, for the data part of each new chunk. Actual chunks may consume more memory. Changing chunkSize (using [`TS.ALTER`]({{< relref "commands/ts.alter/" >}})) does not affect existing chunks. -Must be a multiple of 8 in the range [48 .. 1048576]. When not specified, it is set to the global [CHUNK_SIZE_BYTES]({{< baseurl >}}develop/data-types/timeseries/configuration#chunk_size_bytes) configuration of the database, which by default is 4096 (a single memory page). +Must be a multiple of 8 in the range [48 .. 1048576]. When not specified, it is set to the global [CHUNK_SIZE_BYTES]({{< relref "develop/data-types/timeseries/configuration#chunk_size_bytes" >}}) configuration of the database, which by default is 4096 (a single memory page). Note: Before v1.6.10 no minimum was enforced. Between v1.6.10 and v1.6.17 and in v1.8.0 the minimum value was 128. Since v1.8.1 the minimum value is 48. @@ -140,7 +140,7 @@ The data in each key is stored in chunks. Each chunk contains header and data fo
DUPLICATE_POLICY policy -is policy for handling insertion ([`TS.ADD`]({{< baseurl >}}commands/ts.add/) and [`TS.MADD`]({{< baseurl >}}commands/ts.madd/)) of multiple samples with identical timestamps, with one of the following values: +is policy for handling insertion ([`TS.ADD`]({{< relref "commands/ts.add/" >}}) and [`TS.MADD`]({{< relref "commands/ts.madd/" >}})) of multiple samples with identical timestamps, with one of the following values: - `BLOCK`: ignore any newly reported value and reply with an error - `FIRST`: ignore any newly reported value - `LAST`: override with the newly reported value @@ -148,7 +148,7 @@ is policy for handling insertion ([`TS.ADD`]({{< baseurl >}}commands/ts.add/) an - `MAX`: only override if the value is higher than the existing value - `SUM`: If a previous sample exists, add the new sample to it so that the updated value is equal to (previous + new). If no previous sample exists, set the updated value equal to the new value. - When not specified: set to the global [DUPLICATE_POLICY]({{< baseurl >}}develop/data-types/timeseries/configuration#duplicate_policy) configuration of the database (which, by default, is `BLOCK`). + When not specified: set to the global [DUPLICATE_POLICY]({{< relref "develop/data-types/timeseries/configuration#duplicate_policy" >}}) configuration of the database (which, by default, is `BLOCK`). `BLOCK` is often used to avoid accidental changes. `FIRST` can be used as an optimization when duplicate reports are possible. `LAST` can be used when updates are being reported. `SUM` is used for counters (e.g., the number of cars entering a parking lot per minute when there are multiple reporting counting devices). `MIN` and `MAX` can be used, for example, to store the minimal/maximal stock price per minute (instead of storing all the samples and defining a compaction rule). @@ -166,14 +166,14 @@ is the policy for handling duplicate samples. A new sample is considered a dupli where `max_timestamp` is the timestamp of the sample with the largest timestamp in the time series, and `value_at_max_timestamp` is the value at `max_timestamp`. -When not specified: set to the global [IGNORE_MAX_TIME_DIFF]({{< baseurl >}}develop/data-types/timeseries/configuration#ignore_max_time_diff-and-ignore_max_val_diff) and [IGNORE_MAX_VAL_DIFF]({{< baseurl >}}develop/data-types/timeseries/configuration#ignore_max_time_diff-and-ignore_max_val_diff), which are, by default, both set to 0. +When not specified: set to the global [IGNORE_MAX_TIME_DIFF]({{< relref "develop/data-types/timeseries/configuration#ignore_max_time_diff-and-ignore_max_val_diff" >}}) and [IGNORE_MAX_VAL_DIFF]({{< relref "develop/data-types/timeseries/configuration#ignore_max_time_diff-and-ignore_max_val_diff" >}}), which are, by default, both set to 0.
LABELS {label value}... is set of label-value pairs that represent metadata labels of the key and serve as a secondary index. -The [`TS.MGET`]({{< baseurl >}}commands/ts.mget/), [`TS.MRANGE`]({{< baseurl >}}commands/ts.mrange/), and [`TS.MREVRANGE`]({{< baseurl >}}commands/ts.mrevrange/) commands operate on multiple time series based on their labels. The [`TS.QUERYINDEX`]({{< baseurl >}}commands/ts.queryindex/) command returns all time series keys matching a given filter based on their labels. +The [`TS.MGET`]({{< relref "commands/ts.mget/" >}}), [`TS.MRANGE`]({{< relref "commands/ts.mrange/" >}}), and [`TS.MREVRANGE`]({{< relref "commands/ts.mrevrange/" >}}) commands operate on multiple time series based on their labels. The [`TS.QUERYINDEX`]({{< relref "commands/ts.queryindex/" >}}) command returns all time series keys matching a given filter based on their labels.
## Return value @@ -195,7 +195,7 @@ OK ## See also -[`TS.ADD`]({{< baseurl >}}commands/ts.add/) | [`TS.INCRBY`]({{< baseurl >}}commands/ts.incrby/) | [`TS.DECRBY`]({{< baseurl >}}commands/ts.decrby/) | [`TS.MGET`]({{< baseurl >}}commands/ts.mget/) | [`TS.MRANGE`]({{< baseurl >}}commands/ts.mrange/) | [`TS.MREVRANGE`]({{< baseurl >}}commands/ts.mrevrange/) | [`TS.QUERYINDEX`]({{< baseurl >}}commands/ts.queryindex/) +[`TS.ADD`]({{< relref "commands/ts.add/" >}}) | [`TS.INCRBY`]({{< relref "commands/ts.incrby/" >}}) | [`TS.DECRBY`]({{< relref "commands/ts.decrby/" >}}) | [`TS.MGET`]({{< relref "commands/ts.mget/" >}}) | [`TS.MRANGE`]({{< relref "commands/ts.mrange/" >}}) | [`TS.MREVRANGE`]({{< relref "commands/ts.mrevrange/" >}}) | [`TS.QUERYINDEX`]({{< relref "commands/ts.queryindex/" >}}) ## Related topics diff --git a/content/commands/ts.createrule/index.md b/content/commands/ts.createrule/index.md index 74cfe1ada9..e7ab5fce2c 100644 --- a/content/commands/ts.createrule/index.md +++ b/content/commands/ts.createrule/index.md @@ -127,7 +127,7 @@ aggregates results into time buckets. - Only new samples that are added into the source series after the creation of the rule will be aggregated. - Calling `TS.CREATERULE` with a nonempty `destKey` may result in inconsistencies between the raw and the compacted data. -- Explicitly adding samples to a compacted time series (using [`TS.ADD`]({{< baseurl >}}commands/ts.add/), [`TS.MADD`]({{< baseurl >}}commands/ts.madd/), [`TS.INCRBY`]({{< baseurl >}}commands/ts.incrby/), or [`TS.DECRBY`]({{< baseurl >}}commands/ts.decrby/)) may result in inconsistencies between the raw and the compacted data. The compaction process may override such samples. +- Explicitly adding samples to a compacted time series (using [`TS.ADD`]({{< relref "commands/ts.add/" >}}), [`TS.MADD`]({{< relref "commands/ts.madd/" >}}), [`TS.INCRBY`]({{< relref "commands/ts.incrby/" >}}), or [`TS.DECRBY`]({{< relref "commands/ts.decrby/" >}})) may result in inconsistencies between the raw and the compacted data. The compaction process may override such samples. - If no samples are added to the source time series during a bucket period. no _compacted sample_ is added to the destination time series. - The timestamp of a compacted sample added to the destination time series is set to the start timestamp the appropriate compaction bucket. For example, for a 10-minute compaction bucket with no alignment, the compacted samples timestamps are `x:00`, `x:10`, `x:20`, and so on. - Deleting `destKey` will cause the compaction rule to be deleted as well. @@ -185,7 +185,7 @@ Now, also create a compacted time series named _dailyDiffTemp_. This time series ## See also -[`TS.DELETERULE`]({{< baseurl >}}commands/ts.deleterule/) +[`TS.DELETERULE`]({{< relref "commands/ts.deleterule/" >}}) ## Related topics diff --git a/content/commands/ts.decrby/index.md b/content/commands/ts.decrby/index.md index aef922ec23..666d6e85d3 100644 --- a/content/commands/ts.decrby/index.md +++ b/content/commands/ts.decrby/index.md @@ -93,7 +93,7 @@ is numeric value of the subtrahend (double). - When specified key does not exist, a new time series is created. - You can use this command as a counter or gauge that automatically gets history as a time series. - If a policy for handling duplicate samples (`IGNORE`) is defined for this time series - `TS.DECRBY` operations are affected as well (sample additions/modifications can be filtered). -- Explicitly adding samples to a compacted time series (using [`TS.ADD`]({{< baseurl >}}commands/ts.add/), [`TS.MADD`]({{< baseurl >}}commands/ts.madd/), [`TS.INCRBY`]({{< baseurl >}}commands/ts.incrby/), or `TS.DECRBY`) may result in inconsistencies between the raw and the compacted data. The compaction process may override such samples. +- Explicitly adding samples to a compacted time series (using [`TS.ADD`]({{< relref "commands/ts.add/" >}}), [`TS.MADD`]({{< relref "commands/ts.madd/" >}}), [`TS.INCRBY`]({{< relref "commands/ts.incrby/" >}}), or `TS.DECRBY`) may result in inconsistencies between the raw and the compacted data. The compaction process may override such samples. ## Optional arguments @@ -115,28 +115,28 @@ When not specified, the timestamp is set to the Unix time of the server's clock. is maximum retention period, compared to the maximum existing timestamp, in milliseconds. -Use it only if you are creating a new time series. It is ignored if you are adding samples to an existing time series. See `RETENTION` in [`TS.CREATE`]({{< baseurl >}}commands/ts.create/). +Use it only if you are creating a new time series. It is ignored if you are adding samples to an existing time series. See `RETENTION` in [`TS.CREATE`]({{< relref "commands/ts.create/" >}}).
ENCODING enc specifies the series sample encoding format. -Use it only if you are creating a new time series. It is ignored if you are adding samples to an existing time series. See `ENCODING` in [`TS.CREATE`]({{< baseurl >}}commands/ts.create/). +Use it only if you are creating a new time series. It is ignored if you are adding samples to an existing time series. See `ENCODING` in [`TS.CREATE`]({{< relref "commands/ts.create/" >}}).
CHUNK_SIZE size is memory size, in bytes, allocated for each data chunk. -Use it only if you are creating a new time series. It is ignored if you are adding samples to an existing time series. See `CHUNK_SIZE` in [`TS.CREATE`]({{< baseurl >}}commands/ts.create/). +Use it only if you are creating a new time series. It is ignored if you are adding samples to an existing time series. See `CHUNK_SIZE` in [`TS.CREATE`]({{< relref "commands/ts.create/" >}}).
DUPLICATE_POLICY policy -is policy for handling insertion ([`TS.ADD`]({{< baseurl >}}commands/ts.add/) and [`TS.MADD`]({{< baseurl >}}commands/ts.madd/)) of multiple samples with identical timestamps. +is policy for handling insertion ([`TS.ADD`]({{< relref "commands/ts.add/" >}}) and [`TS.MADD`]({{< relref "commands/ts.madd/" >}})) of multiple samples with identical timestamps. -Use it only if you are creating a new time series. It is ignored if you are adding samples to an existing time series. See `DUPLICATE_POLICY` in [`TS.CREATE`]({{< baseurl >}}commands/ts.create/). +Use it only if you are creating a new time series. It is ignored if you are adding samples to an existing time series. See `DUPLICATE_POLICY` in [`TS.CREATE`]({{< relref "commands/ts.create/" >}}).
IGNORE ignoreMaxTimediff ignoreMaxValDiff @@ -151,7 +151,7 @@ is the policy for handling duplicate samples. A new sample is considered a dupli where `max_timestamp` is the timestamp of the sample with the largest timestamp in the time series, and `value_at_max_timestamp` is the value at `max_timestamp`. -When not specified: set to the global [IGNORE_MAX_TIME_DIFF]({{< baseurl >}}develop/data-types/timeseries/configuration#ignore_max_time_diff-and-ignore_max_val_diff) and [IGNORE_MAX_VAL_DIFF]({{< baseurl >}}develop/data-types/timeseries/configuration#ignore_max_time_diff-and-ignore_max_val_diff), which are, by default, both set to 0. +When not specified: set to the global [IGNORE_MAX_TIME_DIFF]({{< relref "develop/data-types/timeseries/configuration#ignore_max_time_diff-and-ignore_max_val_diff" >}}) and [IGNORE_MAX_VAL_DIFF]({{< relref "develop/data-types/timeseries/configuration#ignore_max_time_diff-and-ignore_max_val_diff" >}}), which are, by default, both set to 0. These parameters are used when creating a new time series to set the per-key parameters, and are ignored when called with an existing time series (the existing per-key configuration parameters are used).
@@ -160,7 +160,7 @@ These parameters are used when creating a new time series to set the per-key par is set of label-value pairs that represent metadata labels of the key and serve as a secondary index. -Use it only if you are creating a new time series. It is ignored if you are adding samples to an existing time series. See `LABELS` in [`TS.CREATE`]({{< baseurl >}}commands/ts.create/). +Use it only if you are creating a new time series. It is ignored if you are adding samples to an existing time series. See `LABELS` in [`TS.CREATE`]({{< relref "commands/ts.create/" >}}).
Notes @@ -173,12 +173,12 @@ Use it only if you are creating a new time series. It is ignored if you are addi Returns one of these replies: -- [Integer reply]({{< relref "/develop/reference/protocol-spec#integers" >}}) - the timestamp of the upserted sample. If the sample is ignored (See `IGNORE` in [`TS.CREATE`]({{< baseurl >}}commands/ts.create/)), the reply will be the largest timestamp in the time series. +- [Integer reply]({{< relref "/develop/reference/protocol-spec#integers" >}}) - the timestamp of the upserted sample. If the sample is ignored (See `IGNORE` in [`TS.CREATE`]({{< relref "commands/ts.create/" >}})), the reply will be the largest timestamp in the time series. - [] on error (invalid arguments, wrong key type, etc.), or when `timestamp` is not equal to or higher than the maximum existing timestamp ## See also -[`TS.INCRBY`]({{< baseurl >}}commands/ts.incrby/) | [`TS.CREATE`]({{< baseurl >}}commands/ts.create/) +[`TS.INCRBY`]({{< relref "commands/ts.incrby/" >}}) | [`TS.CREATE`]({{< relref "commands/ts.create/" >}}) ## Related topics diff --git a/content/commands/ts.del/index.md b/content/commands/ts.del/index.md index 662bbd9266..391fb68923 100644 --- a/content/commands/ts.del/index.md +++ b/content/commands/ts.del/index.md @@ -105,7 +105,7 @@ Delete the range of data points for temperature in Tel Aviv. ## See also -[`TS.ADD`]({{< baseurl >}}commands/ts.add/) +[`TS.ADD`]({{< relref "commands/ts.add/" >}}) ## Related topics diff --git a/content/commands/ts.deleterule/index.md b/content/commands/ts.deleterule/index.md index e87c626ac9..a0ea74c23e 100644 --- a/content/commands/ts.deleterule/index.md +++ b/content/commands/ts.deleterule/index.md @@ -56,7 +56,7 @@ Returns one of these replies: ## See also -[`TS.CREATERULE`]({{< baseurl >}}commands/ts.createrule/) +[`TS.CREATERULE`]({{< relref "commands/ts.createrule/" >}}) ## Related topics diff --git a/content/commands/ts.get/index.md b/content/commands/ts.get/index.md index c92615abe5..51bf33274b 100644 --- a/content/commands/ts.get/index.md +++ b/content/commands/ts.get/index.md @@ -134,7 +134,7 @@ Get the latest maximum daily temperature (the temperature with the highest times ## See also -[`TS.MGET`]({{< baseurl >}}commands/ts.mget/) +[`TS.MGET`]({{< relref "commands/ts.mget/" >}}) ## Related topics diff --git a/content/commands/ts.incrby/index.md b/content/commands/ts.incrby/index.md index 89f4fa4fb4..90cee0ecc3 100644 --- a/content/commands/ts.incrby/index.md +++ b/content/commands/ts.incrby/index.md @@ -94,7 +94,7 @@ is numeric value of the addend (double). - When specified key does not exist, a new time series is created. - You can use this command as a counter or gauge that automatically gets history as a time series. - If a policy for handling duplicate samples (`IGNORE`) is defined for this time series - `TS.INCRBY` operations are affected as well (sample additions/modifications can be filtered). -- Explicitly adding samples to a compacted time series (using [`TS.ADD`]({{< baseurl >}}commands/ts.add/), [`TS.MADD`]({{< baseurl >}}commands/ts.madd/), `TS.INCRBY`, or [`TS.DECRBY`]({{< baseurl >}}commands/ts.decrby/)) may result in inconsistencies between the raw and the compacted data. The compaction process may override such samples. +- Explicitly adding samples to a compacted time series (using [`TS.ADD`]({{< relref "commands/ts.add/" >}}), [`TS.MADD`]({{< relref "commands/ts.madd/" >}}), `TS.INCRBY`, or [`TS.DECRBY`]({{< relref "commands/ts.decrby/" >}})) may result in inconsistencies between the raw and the compacted data. The compaction process may override such samples. ## Optional arguments @@ -116,28 +116,28 @@ When not specified, the timestamp is set to the Unix time of the server's clock. is maximum retention period, compared to the maximum existing timestamp, in milliseconds. -Use it only if you are creating a new time series. It is ignored if you are adding samples to an existing time series. See `RETENTION` in [`TS.CREATE`]({{< baseurl >}}commands/ts.create/). +Use it only if you are creating a new time series. It is ignored if you are adding samples to an existing time series. See `RETENTION` in [`TS.CREATE`]({{< relref "commands/ts.create/" >}}).
ENCODING enc specifies the series sample encoding format. -Use it only if you are creating a new time series. It is ignored if you are adding samples to an existing time series. See `ENCODING` in [`TS.CREATE`]({{< baseurl >}}commands/ts.create/). +Use it only if you are creating a new time series. It is ignored if you are adding samples to an existing time series. See `ENCODING` in [`TS.CREATE`]({{< relref "commands/ts.create/" >}}).
CHUNK_SIZE size is memory size, in bytes, allocated for each data chunk. -Use it only if you are creating a new time series. It is ignored if you are adding samples to an existing time series. See `CHUNK_SIZE` in [`TS.CREATE`]({{< baseurl >}}commands/ts.create/). +Use it only if you are creating a new time series. It is ignored if you are adding samples to an existing time series. See `CHUNK_SIZE` in [`TS.CREATE`]({{< relref "commands/ts.create/" >}}).
DUPLICATE_POLICY policy -is policy for handling insertion ([`TS.ADD`]({{< baseurl >}}commands/ts.add/) and [`TS.MADD`]({{< baseurl >}}commands/ts.madd/)) of multiple samples with identical timestamps. +is policy for handling insertion ([`TS.ADD`]({{< relref "commands/ts.add/" >}}) and [`TS.MADD`]({{< relref "commands/ts.madd/" >}})) of multiple samples with identical timestamps. -Use it only if you are creating a new time series. It is ignored if you are adding samples to an existing time series. See `DUPLICATE_POLICY` in [`TS.CREATE`]({{< baseurl >}}commands/ts.create/). +Use it only if you are creating a new time series. It is ignored if you are adding samples to an existing time series. See `DUPLICATE_POLICY` in [`TS.CREATE`]({{< relref "commands/ts.create/" >}}).
IGNORE ignoreMaxTimediff ignoreMaxValDiff @@ -152,7 +152,7 @@ is the policy for handling duplicate samples. A new sample is considered a dupli where `max_timestamp` is the timestamp of the sample with the largest timestamp in the time series, and `value_at_max_timestamp` is the value at `max_timestamp`. -When not specified: set to the global [IGNORE_MAX_TIME_DIFF]({{< baseurl >}}develop/data-types/timeseries/configuration#ignore_max_time_diff-and-ignore_max_val_diff) and [IGNORE_MAX_VAL_DIFF]({{< baseurl >}}develop/data-types/timeseries/configuration#ignore_max_time_diff-and-ignore_max_val_diff), which are, by default, both set to 0. +When not specified: set to the global [IGNORE_MAX_TIME_DIFF]({{< relref "develop/data-types/timeseries/configuration#ignore_max_time_diff-and-ignore_max_val_diff" >}}) and [IGNORE_MAX_VAL_DIFF]({{< relref "develop/data-types/timeseries/configuration#ignore_max_time_diff-and-ignore_max_val_diff" >}}), which are, by default, both set to 0. These parameters are used when creating a new time series to set the per-key parameters, and are ignored when called with an existing time series (the existing per-key configuration parameters are used).
@@ -161,7 +161,7 @@ These parameters are used when creating a new time series to set the per-key par is set of label-value pairs that represent metadata labels of the key and serve as a secondary index. -Use it only if you are creating a new time series. It is ignored if you are adding samples to an existing time series. See `LABELS` in [`TS.CREATE`]({{< baseurl >}}commands/ts.create/). +Use it only if you are creating a new time series. It is ignored if you are adding samples to an existing time series. See `LABELS` in [`TS.CREATE`]({{< relref "commands/ts.create/" >}}).
Notes @@ -174,7 +174,7 @@ Use it only if you are creating a new time series. It is ignored if you are addi Returns one of these replies: -- [Integer reply]({{< relref "/develop/reference/protocol-spec#integers" >}}) - the timestamp of the upserted sample. If the sample is ignored (See `IGNORE` in [`TS.CREATE`]({{< baseurl >}}commands/ts.create/)), the reply will be the largest timestamp in the time series. +- [Integer reply]({{< relref "/develop/reference/protocol-spec#integers" >}}) - the timestamp of the upserted sample. If the sample is ignored (See `IGNORE` in [`TS.CREATE`]({{< relref "commands/ts.create/" >}})), the reply will be the largest timestamp in the time series. - [] on error (invalid arguments, wrong key type, etc.), or when `timestamp` is not equal to or higher than the maximum existing timestamp ## Examples @@ -216,7 +216,7 @@ The timestamp is filled automatically. ## See also -[`TS.DECRBY`]({{< baseurl >}}commands/ts.decrby/) | [`TS.CREATE`]({{< baseurl >}}commands/ts.create/) +[`TS.DECRBY`]({{< relref "commands/ts.decrby/" >}}) | [`TS.CREATE`]({{< relref "commands/ts.create/" >}}) ## Related topics diff --git a/content/commands/ts.info/index.md b/content/commands/ts.info/index.md index ea86a77cd4..4e9c6b2557 100644 --- a/content/commands/ts.info/index.md +++ b/content/commands/ts.info/index.md @@ -61,12 +61,12 @@ is an optional flag to get a more detailed information about the chunks. | `lastTimestamp` | [Integer reply]({{< relref "/develop/reference/protocol-spec#integers" >}})
Last timestamp present in this time series (Unix timestamp in milliseconds) | `retentionTime` | [Integer reply]({{< relref "/develop/reference/protocol-spec#integers" >}})
The retention period, in milliseconds, for this time series | `chunkCount` | [Integer reply]({{< relref "/develop/reference/protocol-spec#integers" >}})
Number of chunks used for this time series -| `chunkSize` | [Integer reply]({{< relref "/develop/reference/protocol-spec#integers" >}})
The initial allocation size, in bytes, for the data part of each new chunk.
Actual chunks may consume more memory. Changing the chunk size (using [`TS.ALTER`]({{< baseurl >}}commands/ts.alter/)) does not affect existing chunks. +| `chunkSize` | [Integer reply]({{< relref "/develop/reference/protocol-spec#integers" >}})
The initial allocation size, in bytes, for the data part of each new chunk.
Actual chunks may consume more memory. Changing the chunk size (using [`TS.ALTER`]({{< relref "commands/ts.alter/" >}})) does not affect existing chunks. | `chunkType` | [Simple string reply]({{< relref "/develop/reference/protocol-spec#simple-strings" >}})
The chunks type: `compressed` or `uncompressed` -| `duplicatePolicy` | [Simple string reply]({{< relref "/develop/reference/protocol-spec#simple-strings" >}}) or [Nil reply]({{< relref "/develop/reference/protocol-spec#bulk-strings" >}})
The [duplicate policy]({{< baseurl >}}develop/data-types/timeseries/configuration#duplicate_policy) of this time series +| `duplicatePolicy` | [Simple string reply]({{< relref "/develop/reference/protocol-spec#simple-strings" >}}) or [Nil reply]({{< relref "/develop/reference/protocol-spec#bulk-strings" >}})
The [duplicate policy]({{< relref "develop/data-types/timeseries/configuration#duplicate_policy" >}}) of this time series | `labels` | [Array reply]({{< relref "/develop/reference/protocol-spec#arrays" >}}) or [Nil reply]({{< relref "/develop/reference/protocol-spec#bulk-strings" >}})
Metadata labels of this time series
Each element is a 2-elements [Array reply]({{< relref "/develop/reference/protocol-spec#arrays" >}}) of ([Bulk string reply]({{< relref "/develop/reference/protocol-spec#bulk-strings" >}}), [Bulk string reply]({{< relref "/develop/reference/protocol-spec#bulk-strings" >}})) representing (label, value) -| `sourceKey` | [Bulk string reply]({{< relref "/develop/reference/protocol-spec#bulk-strings" >}}) or [Nil reply]({{< relref "/develop/reference/protocol-spec#bulk-strings" >}})
Key name for source time series in case the current series is a target of a [compaction rule]({{< baseurl >}}commands/ts.createrule) -| `rules` | [Array reply]({{< relref "/develop/reference/protocol-spec#arrays" >}})
[Compaction rules]({{< baseurl >}}commands/ts.createrule) defined in this time series
Each rule is an [Array reply]({{< relref "/develop/reference/protocol-spec#arrays" >}}) with 4 elements:
- [Bulk string reply]({{< relref "/develop/reference/protocol-spec#bulk-strings" >}}): The compaction key
- [Integer reply]({{< relref "/develop/reference/protocol-spec#integers" >}}): The bucket duration
- [Simple string reply]({{< relref "/develop/reference/protocol-spec#simple-strings" >}}): The aggregator
- [Integer reply]({{< relref "/develop/reference/protocol-spec#integers" >}}): The alignment (since RedisTimeSeries v1.8) +| `sourceKey` | [Bulk string reply]({{< relref "/develop/reference/protocol-spec#bulk-strings" >}}) or [Nil reply]({{< relref "/develop/reference/protocol-spec#bulk-strings" >}})
Key name for source time series in case the current series is a target of a [compaction rule]({{< relref "commands/ts.createrule" >}}) +| `rules` | [Array reply]({{< relref "/develop/reference/protocol-spec#arrays" >}})
[Compaction rules]({{< relref "commands/ts.createrule" >}}) defined in this time series
Each rule is an [Array reply]({{< relref "/develop/reference/protocol-spec#arrays" >}}) with 4 elements:
- [Bulk string reply]({{< relref "/develop/reference/protocol-spec#bulk-strings" >}}): The compaction key
- [Integer reply]({{< relref "/develop/reference/protocol-spec#integers" >}}): The bucket duration
- [Simple string reply]({{< relref "/develop/reference/protocol-spec#simple-strings" >}}): The aggregator
- [Integer reply]({{< relref "/develop/reference/protocol-spec#integers" >}}): The alignment (since RedisTimeSeries v1.8) When [`DEBUG`]({{< relref "/commands/debug" >}}) is specified, the response also contains: @@ -176,7 +176,7 @@ Query the time series using DEBUG to get more information about the chunks. ## See also -[`TS.RANGE`]({{< baseurl >}}commands/ts.range/) | [`TS.QUERYINDEX`]({{< baseurl >}}commands/ts.queryindex/) | [`TS.GET`]({{< baseurl >}}commands/ts.get/) +[`TS.RANGE`]({{< relref "commands/ts.range/" >}}) | [`TS.QUERYINDEX`]({{< relref "commands/ts.queryindex/" >}}) | [`TS.GET`]({{< relref "commands/ts.get/" >}}) ## Related topics diff --git a/content/commands/ts.madd/index.md b/content/commands/ts.madd/index.md index bb33257c93..dc02ca4015 100644 --- a/content/commands/ts.madd/index.md +++ b/content/commands/ts.madd/index.md @@ -66,15 +66,15 @@ is numeric data value of the sample (double). The double number should follow Notes: - If `timestamp` is older than the retention period compared to the maximum existing timestamp, the sample is discarded and an error is returned. -- Explicitly adding samples to a compacted time series (using [`TS.ADD`]({{< baseurl >}}commands/ts.add/), `TS.MADD`, [`TS.INCRBY`]({{< baseurl >}}commands/ts.incrby/), or [`TS.DECRBY`]({{< baseurl >}}commands/ts.decrby/)) may result in inconsistencies between the raw and the compacted data. The compaction process may override such samples. -- `ignoreMaxTimeDiff` and `ignoreMaxValDiff` cannot be specified as is the case with `TS.ADD`. However, the same logic still applies based on the values of the per-key configuration parameters. See the [`TS.ADD`]({{< baseurl >}}commands/ts.add/) command page for more information. +- Explicitly adding samples to a compacted time series (using [`TS.ADD`]({{< relref "commands/ts.add/" >}}), `TS.MADD`, [`TS.INCRBY`]({{< relref "commands/ts.incrby/" >}}), or [`TS.DECRBY`]({{< relref "commands/ts.decrby/" >}})) may result in inconsistencies between the raw and the compacted data. The compaction process may override such samples. +- `ignoreMaxTimeDiff` and `ignoreMaxValDiff` cannot be specified as is the case with `TS.ADD`. However, the same logic still applies based on the values of the per-key configuration parameters. See the [`TS.ADD`]({{< relref "commands/ts.add/" >}}) command page for more information.
## Return value Returns one of these replies: -- [Array reply]({{< relref "/develop/reference/protocol-spec#arrays" >}}), where each element is an [Integer reply]({{< relref "/develop/reference/protocol-spec#integers" >}}) representing the timestamp of a upserted sample or an [] (when duplication policy is `BLOCK`, or when `timestamp` is older than the retention period compared to the maximum existing timestamp). For each element that is ignored (see `IGNORE` in [`TS.CREATE`]({{< baseurl >}}commands/ts.create/)), the reply element value will be the largest timestamp in the time series. +- [Array reply]({{< relref "/develop/reference/protocol-spec#arrays" >}}), where each element is an [Integer reply]({{< relref "/develop/reference/protocol-spec#integers" >}}) representing the timestamp of a upserted sample or an [] (when duplication policy is `BLOCK`, or when `timestamp` is older than the retention period compared to the maximum existing timestamp). For each element that is ignored (see `IGNORE` in [`TS.CREATE`]({{< relref "commands/ts.create/" >}})), the reply element value will be the largest timestamp in the time series. - [] (invalid arguments, wrong key type, etc.) ## Complexity @@ -106,7 +106,7 @@ OK ## See also -[`TS.MRANGE`]({{< baseurl >}}commands/ts.mrange/) | [`TS.RANGE`]({{< baseurl >}}commands/ts.range/) | [`TS.MREVRANGE`]({{< baseurl >}}commands/ts.mrevrange/) | [`TS.REVRANGE`]({{< baseurl >}}commands/ts.revrange/) +[`TS.MRANGE`]({{< relref "commands/ts.mrange/" >}}) | [`TS.RANGE`]({{< relref "commands/ts.range/" >}}) | [`TS.MREVRANGE`]({{< relref "commands/ts.mrevrange/" >}}) | [`TS.REVRANGE`]({{< relref "commands/ts.revrange/" >}}) ## Related topics diff --git a/content/commands/ts.mget/index.md b/content/commands/ts.mget/index.md index ac52bbf65c..e53fdc57a5 100644 --- a/content/commands/ts.mget/index.md +++ b/content/commands/ts.mget/index.md @@ -197,7 +197,7 @@ To get only the `location` label for each last sample, use `SELECTED_LABELS`. ## See also -[`TS.MRANGE`]({{< baseurl >}}commands/ts.mrange/) | [`TS.RANGE`]({{< baseurl >}}commands/ts.range/) | [`TS.MREVRANGE`]({{< baseurl >}}commands/ts.mrevrange/) | [`TS.REVRANGE`]({{< baseurl >}}commands/ts.revrange/) +[`TS.MRANGE`]({{< relref "commands/ts.mrange/" >}}) | [`TS.RANGE`]({{< relref "commands/ts.range/" >}}) | [`TS.MREVRANGE`]({{< relref "commands/ts.mrevrange/" >}}) | [`TS.REVRANGE`]({{< relref "commands/ts.revrange/" >}}) ## Related topics diff --git a/content/commands/ts.mrange/index.md b/content/commands/ts.mrange/index.md index 1119d12b9d..76b60b1d01 100644 --- a/content/commands/ts.mrange/index.md +++ b/content/commands/ts.mrange/index.md @@ -593,7 +593,7 @@ Query all time series with the metric label equal to `cpu`, but only return the ## See also -[`TS.RANGE`]({{< baseurl >}}commands/ts.range/) | [`TS.MREVRANGE`]({{< baseurl >}}commands/ts.mrevrange/) | [`TS.REVRANGE`]({{< baseurl >}}commands/ts.revrange/) +[`TS.RANGE`]({{< relref "commands/ts.range/" >}}) | [`TS.MREVRANGE`]({{< relref "commands/ts.mrevrange/" >}}) | [`TS.REVRANGE`]({{< relref "commands/ts.revrange/" >}}) ## Related topics diff --git a/content/commands/ts.mrevrange/index.md b/content/commands/ts.mrevrange/index.md index b59b70edb2..4ffa6aa443 100644 --- a/content/commands/ts.mrevrange/index.md +++ b/content/commands/ts.mrevrange/index.md @@ -588,7 +588,7 @@ Query all time series with the metric label equal to `cpu`, but only return the ## See also -[`TS.MRANGE`]({{< baseurl >}}commands/ts.mrange/) | [`TS.RANGE`]({{< baseurl >}}commands/ts.range/) | [`TS.REVRANGE`]({{< baseurl >}}commands/ts.revrange/) +[`TS.MRANGE`]({{< relref "commands/ts.mrange/" >}}) | [`TS.RANGE`]({{< relref "commands/ts.range/" >}}) | [`TS.REVRANGE`]({{< relref "commands/ts.revrange/" >}}) ## Related topics diff --git a/content/commands/ts.queryindex/index.md b/content/commands/ts.queryindex/index.md index 1296991016..20187ff249 100644 --- a/content/commands/ts.queryindex/index.md +++ b/content/commands/ts.queryindex/index.md @@ -115,7 +115,7 @@ To retrieve the keys of all time series representing sensors that measure temper ## See also -[`TS.CREATE`]({{< baseurl >}}commands/ts.create/) | [`TS.MRANGE`]({{< baseurl >}}commands/ts.mrange/) | [`TS.MREVRANGE`]({{< baseurl >}}commands/ts.mrevrange/) | [`TS.MGET`]({{< baseurl >}}commands/ts.mget/) +[`TS.CREATE`]({{< relref "commands/ts.create/" >}}) | [`TS.MRANGE`]({{< relref "commands/ts.mrange/" >}}) | [`TS.MREVRANGE`]({{< relref "commands/ts.mrevrange/" >}}) | [`TS.MGET`]({{< relref "commands/ts.mget/" >}}) ## Related topics diff --git a/content/commands/ts.range/index.md b/content/commands/ts.range/index.md index 577afdd439..53847b74bc 100644 --- a/content/commands/ts.range/index.md +++ b/content/commands/ts.range/index.md @@ -388,7 +388,7 @@ Similarly, when the end timestamp for the range query is explicitly stated, you ## See also -[`TS.MRANGE`]({{< baseurl >}}commands/ts.mrange/) | [`TS.REVRANGE`]({{< baseurl >}}commands/ts.revrange/) | [`TS.MREVRANGE`]({{< baseurl >}}commands/ts.mrevrange/) +[`TS.MRANGE`]({{< relref "commands/ts.mrange/" >}}) | [`TS.REVRANGE`]({{< relref "commands/ts.revrange/" >}}) | [`TS.MREVRANGE`]({{< relref "commands/ts.mrevrange/" >}}) ## Related topics diff --git a/content/commands/ts.revrange/index.md b/content/commands/ts.revrange/index.md index 6b5e336300..f5c3130ea2 100644 --- a/content/commands/ts.revrange/index.md +++ b/content/commands/ts.revrange/index.md @@ -391,7 +391,7 @@ Similarly, when the end timestamp for the range query is explicitly stated, you ## See also -[`TS.RANGE`]({{< baseurl >}}commands/ts.range/) | [`TS.MRANGE`]({{< baseurl >}}commands/ts.mrange/) | [`TS.MREVRANGE`]({{< baseurl >}}commands/ts.mrevrange/) +[`TS.RANGE`]({{< relref "commands/ts.range/" >}}) | [`TS.MRANGE`]({{< relref "commands/ts.mrange/" >}}) | [`TS.MREVRANGE`]({{< relref "commands/ts.mrevrange/" >}}) ## Related topics diff --git a/content/develop/ai/index.md b/content/develop/ai/index.md index d4c5917d68..6b12f0e105 100644 --- a/content/develop/ai/index.md +++ b/content/develop/ai/index.md @@ -29,10 +29,10 @@ This page organized into a few sections depending on what you’re trying to do: ## How to's -1. [**Create a vector index**]({{< baseurl >}}develop/interact/search-and-query/advanced-concepts/vectors#create-a-vector-index): Redis maintains a secondary index over your data with a defined schema (including vector fields and metadata). Redis supports [`FLAT`]({{< baseurl >}}develop/interact/search-and-query/advanced-concepts/vectors#flat-index) and [`HNSW`]({{< baseurl >}}develop/interact/search-and-query/advanced-concepts/vectors#hnsw-index) vector index types. -1. [**Store and update vectors**]({{< baseurl >}}develop/interact/search-and-query/advanced-concepts/vectors#store-and-update-vectors): Redis stores vectors and metadata in hashes or JSON objects. -1. [**Search with vectors**]({{< baseurl >}}develop/interact/search-and-query/advanced-concepts/vectors#search-with-vectors): Redis supports several advanced querying strategies with vector fields including k-nearest neighbor ([KNN]({{< baseurl >}}develop/interact/search-and-query/advanced-concepts/vectors#knn-vector-search)), [vector range queries]({{< baseurl >}}develop/interact/search-and-query/advanced-concepts/vectors#vector-range-queries), and [metadata filters]({{< baseurl >}}develop/interact/search-and-query/advanced-concepts/vectors#filters). -1. [**Configure vector queries at runtime**]({{< baseurl >}}develop/interact/search-and-query/advanced-concepts/vectors#runtime-query-parameters). Select the best filter mode to optimize query execution. +1. [**Create a vector index**]({{< relref "develop/interact/search-and-query/advanced-concepts/vectors#create-a-vector-index" >}}): Redis maintains a secondary index over your data with a defined schema (including vector fields and metadata). Redis supports [`FLAT`]({{< relref "develop/interact/search-and-query/advanced-concepts/vectors#flat-index" >}}) and [`HNSW`]({{< relref "develop/interact/search-and-query/advanced-concepts/vectors#hnsw-index" >}}) vector index types. +1. [**Store and update vectors**]({{< relref "develop/interact/search-and-query/advanced-concepts/vectors#store-and-update-vectors" >}}): Redis stores vectors and metadata in hashes or JSON objects. +1. [**Search with vectors**]({{< relref "develop/interact/search-and-query/advanced-concepts/vectors#search-with-vectors" >}}): Redis supports several advanced querying strategies with vector fields including k-nearest neighbor ([KNN]({{< relref "develop/interact/search-and-query/advanced-concepts/vectors#knn-vector-search" >}})), [vector range queries]({{< relref "develop/interact/search-and-query/advanced-concepts/vectors#vector-range-queries" >}}), and [metadata filters]({{< relref "develop/interact/search-and-query/advanced-concepts/vectors#filters" >}}). +1. [**Configure vector queries at runtime**]({{< relref "develop/interact/search-and-query/advanced-concepts/vectors#runtime-query-parameters" >}}). Select the best filter mode to optimize query execution. ## Concepts diff --git a/content/develop/clients/client-side-caching.md b/content/develop/clients/client-side-caching.md index e8d096eda9..f538ac44d9 100644 --- a/content/develop/clients/client-side-caching.md +++ b/content/develop/clients/client-side-caching.md @@ -98,7 +98,7 @@ will use cached data, except for the following: and [`ZRANDMEMBER`]({{< relref "/commands/zrandmember" >}}). By design, these commands give different results each time they are called. - Redis Query Engine commands (with the `FT.*` prefix), such as - [`FT.SEARCH`]({{< baseurl >}}commands/ft.search). + [`FT.SEARCH`]({{< relref "commands/ft.search" >}}). You can use the [`MONITOR`]({{< relref "/commands/monitor" >}}) command to check the server's behavior when you are using client-side caching. Because `MONITOR` only diff --git a/content/develop/data-types/json/_index.md b/content/develop/data-types/json/_index.md index e89f732bc6..c575a5279b 100644 --- a/content/develop/data-types/json/_index.md +++ b/content/develop/data-types/json/_index.md @@ -30,7 +30,7 @@ The JSON capability of Redis Stack provides JavaScript Object Notation (JSON) su ## Use Redis with JSON -The first JSON command to try is [`JSON.SET`]({{< baseurl >}}commands/json.set/), which sets a Redis key with a JSON value. [`JSON.SET`]({{< baseurl >}}commands/json.set/) accepts all JSON value types. This example creates a JSON string: +The first JSON command to try is [`JSON.SET`]({{< relref "commands/json.set/" >}}), which sets a Redis key with a JSON value. [`JSON.SET`]({{< relref "commands/json.set/" >}}) accepts all JSON value types. This example creates a JSON string: {{< clients-example json_tutorial set_get >}} > JSON.SET bike $ '"Hyperion"' @@ -43,7 +43,7 @@ OK Note how the commands include the dollar sign character `$`. This is the [path]({{< relref "/develop/data-types/json/path" >}}) to the value in the JSON document (in this case it just means the root). -Here are a few more string operations. [`JSON.STRLEN`]({{< baseurl >}}commands/json.strlen/) tells you the length of the string, and you can append another string to it with [`JSON.STRAPPEND`]({{< baseurl >}}commands/json.strappend/). +Here are a few more string operations. [`JSON.STRLEN`]({{< relref "commands/json.strlen/" >}}) tells you the length of the string, and you can append another string to it with [`JSON.STRAPPEND`]({{< relref "commands/json.strappend/" >}}). {{< clients-example json_tutorial str>}} > JSON.STRLEN bike $ @@ -54,7 +54,7 @@ Here are a few more string operations. [`JSON.STRLEN`]({{< baseurl >}}commands/j "[\"Hyperion (Enduro bikes)\"]" {{< /clients-example >}} -Numbers can be [incremented]({{< baseurl >}}commands/json.numincrby/) and [multiplied]({{< baseurl >}}commands/json.nummultby/): +Numbers can be [incremented]({{< relref "commands/json.numincrby/" >}}) and [multiplied]({{< relref "commands/json.nummultby/" >}}): {{< clients-example json_tutorial num >}} > JSON.SET crashes $ 0 @@ -84,7 +84,7 @@ OK "[[\"Deimos\",{\"crashes\":0}]]" {{< /clients-example >}} -The [`JSON.DEL`]({{< baseurl >}}commands/json.del/) command deletes any JSON value you specify with the `path` parameter. +The [`JSON.DEL`]({{< relref "commands/json.del/" >}}) command deletes any JSON value you specify with the `path` parameter. You can manipulate arrays with a dedicated subset of JSON commands: @@ -125,10 +125,10 @@ OK ## Format CLI output The CLI has a raw output mode that lets you add formatting to the output from -[`JSON.GET`]({{< baseurl >}}commands/json.get/) to make +[`JSON.GET`]({{< relref "commands/json.get/" >}}) to make it more readable. To use this, run `redis-cli` with the `--raw` option and include formatting keywords such as `INDENT`, `NEWLINE`, and `SPACE` -with [`JSON.GET`]({{< baseurl >}}commands/json.get/): +with [`JSON.GET`]({{< relref "commands/json.get/" >}}): ```bash $ redis-cli --raw diff --git a/content/develop/data-types/json/path.md b/content/develop/data-types/json/path.md index a3fa7a15ef..04e78c345c 100644 --- a/content/develop/data-types/json/path.md +++ b/content/develop/data-types/json/path.md @@ -118,7 +118,7 @@ JSON.SET bikes:inventory $ '{ "inventory": { "mountain_bikes": [ { "id": "bike:1 ### Access examples -The following examples use the [`JSON.GET`]({{< baseurl >}}commands/json.get/) command to retrieve data from various paths in the JSON document. +The following examples use the [`JSON.GET`]({{< relref "commands/json.get/" >}}) command to retrieve data from various paths in the JSON document. You can use the wildcard operator `*` to return a list of all items in the inventory: @@ -213,7 +213,7 @@ OK You can also use JSONPath queries when you want to update specific sections of a JSON document. -For example, you can pass a JSONPath to the [`JSON.SET`]({{< baseurl >}}commands/json.set/) command to update a specific field. This example changes the price of the first item in the headphones list: +For example, you can pass a JSONPath to the [`JSON.SET`]({{< relref "commands/json.set/" >}}) command to update a specific field. This example changes the price of the first item in the headphones list: {{< clients-example json_tutorial update_bikes >}} > JSON.GET bikes:inventory $..price @@ -233,7 +233,7 @@ OK "[1500,2072,3264,1500,3941]" {{< /clients-example >}} -JSONPath queries also work with other JSON commands that accept a path as an argument. For example, you can add a new color option for a set of headphones with [`JSON.ARRAPPEND`]({{< baseurl >}}commands/json.arrappend/): +JSONPath queries also work with other JSON commands that accept a path as an argument. For example, you can add a new color option for a set of headphones with [`JSON.ARRAPPEND`]({{< relref "commands/json.arrappend/" >}}): {{< clients-example json_tutorial update_filters2 >}} > JSON.ARRAPPEND bikes:inventory '$.inventory.*[?(@.price<2000)].colors' '"pink"' diff --git a/content/develop/data-types/json/ram.md b/content/develop/data-types/json/ram.md index c1797f9afc..f2f7eb372c 100644 --- a/content/develop/data-types/json/ram.md +++ b/content/develop/data-types/json/ram.md @@ -24,7 +24,7 @@ RAM. Redis JSON stores JSON values as binary data after deserializing them. This representation is often more expensive, size-wise, than the serialized form. The JSON data type uses at least 24 bytes (on 64-bit architectures) for every value, as can be seen by sampling an empty string with the -[`JSON.DEBUG MEMORY`]({{< baseurl >}}commands/json.debug-memory/) command: +[`JSON.DEBUG MEMORY`]({{< relref "commands/json.debug-memory/" >}}) command: ``` 127.0.0.1:6379> JSON.SET emptystring . '""' diff --git a/content/develop/data-types/probabilistic/count-min-sketch.md b/content/develop/data-types/probabilistic/count-min-sketch.md index e3aad319ff..86d33e6fc1 100644 --- a/content/develop/data-types/probabilistic/count-min-sketch.md +++ b/content/develop/data-types/probabilistic/count-min-sketch.md @@ -100,7 +100,7 @@ or error = threshold/total_count ``` -where `total_count` is the sum of the count of all elements that can be obtained from the `count` key of the result of the [`CMS.INFO`]({{< baseurl >}}commands/cms.info/) command and is of course dynamic - it changes with every new increment in the sketch. At creation time you can approximate the `total_count` ratio as a product of the average count you'll be expecting in the sketch and the average number of elements. +where `total_count` is the sum of the count of all elements that can be obtained from the `count` key of the result of the [`CMS.INFO`]({{< relref "commands/cms.info/" >}}) command and is of course dynamic - it changes with every new increment in the sketch. At creation time you can approximate the `total_count` ratio as a product of the average count you'll be expecting in the sketch and the average number of elements. Since the threshold is a function of the total count in the filter it's very important to note that it will grow as the count grows, but knowing the total count we can always dynamically calculate the threshold. If a result is below it - it can be discarded. diff --git a/content/develop/data-types/probabilistic/cuckoo-filter.md b/content/develop/data-types/probabilistic/cuckoo-filter.md index 038b75d157..ba45ca4853 100644 --- a/content/develop/data-types/probabilistic/cuckoo-filter.md +++ b/content/develop/data-types/probabilistic/cuckoo-filter.md @@ -47,7 +47,7 @@ Note> In addition to these two cases, Cuckoo filters serve very well all the Blo ## Examples -> You'll learn how to create an empty cuckoo filter with an initial capacity for 1,000 items, add items, check their existence, and remove them. Even though the [`CF.ADD`]({{< baseurl >}}commands/cf.add/) command can create a new filter if one isn't present, it might not be optimally sized for your needs. It's better to use the [`CF.RESERVE`]({{< baseurl >}}commands/cf.reserve/) command to set up a filter with your preferred capacity. +> You'll learn how to create an empty cuckoo filter with an initial capacity for 1,000 items, add items, check their existence, and remove them. Even though the [`CF.ADD`]({{< relref "commands/cf.add/" >}}) command can create a new filter if one isn't present, it might not be optimally sized for your needs. It's better to use the [`CF.RESERVE`]({{< relref "commands/cf.reserve/" >}}) command to set up a filter with your preferred capacity. {{< clients-example cuckoo_tutorial cuckoo >}} > CF.RESERVE bikes:models 1000000 diff --git a/content/develop/data-types/probabilistic/t-digest.md b/content/develop/data-types/probabilistic/t-digest.md index d699991262..ac56ea7384 100644 --- a/content/develop/data-types/probabilistic/t-digest.md +++ b/content/develop/data-types/probabilistic/t-digest.md @@ -72,7 +72,7 @@ You measure the IP packets transferred over your network each second and try to ## Examples -In the following example, you'll create a t-digest with a compression of 100 and add items to it. The `COMPRESSION` argument is used to specify the tradeoff between accuracy and memory consumption. The default value is 100. Higher values mean more accuracy. Note: unlike some of the other probabilistic data structures, the [`TDIGEST.ADD`]({{< baseurl >}}commands/tdigest.add/) command will not create a new structure if the key does not exist. +In the following example, you'll create a t-digest with a compression of 100 and add items to it. The `COMPRESSION` argument is used to specify the tradeoff between accuracy and memory consumption. The default value is 100. Higher values mean more accuracy. Note: unlike some of the other probabilistic data structures, the [`TDIGEST.ADD`]({{< relref "commands/tdigest.add/" >}}) command will not create a new structure if the key does not exist. {{< clients-example tdigest_tutorial tdig_start >}} > TDIGEST.CREATE bikes:sales COMPRESSION 100 @@ -84,13 +84,13 @@ OK {{< /clients-example >}} -You can repeat calling [TDIGEST.ADD]({{< baseurl >}}commands/tdigest.add) whenever new observations are available +You can repeat calling [TDIGEST.ADD]({{< relref "commands/tdigest.add" >}}) whenever new observations are available #### Estimating fractions or ranks by values Another helpful feature in t-digest is CDF (definition of rank) which gives us the fraction of observations smaller or equal to a certain value. This command is very useful to answer questions like "*What's the percentage of observations with a value lower or equal to X*". ->More precisely, [`TDIGEST.CDF`]({{< baseurl >}}commands/tdigest.cdf/) will return the estimated fraction of observations in the sketch that are smaller than X plus half the number of observations that are equal to X. We can also use the [`TDIGEST.RANK`]({{< baseurl >}}commands/tdigest.rank/) command, which is very similar. Instead of returning a fraction, it returns the ----estimated---- rank of a value. The [`TDIGEST.RANK`]({{< baseurl >}}commands/tdigest.rank/) command is also variadic, meaning you can use a single command to retrieve estimations for one or more values. +>More precisely, [`TDIGEST.CDF`]({{< relref "commands/tdigest.cdf/" >}}) will return the estimated fraction of observations in the sketch that are smaller than X plus half the number of observations that are equal to X. We can also use the [`TDIGEST.RANK`]({{< relref "commands/tdigest.rank/" >}}) command, which is very similar. Instead of returning a fraction, it returns the ----estimated---- rank of a value. The [`TDIGEST.RANK`]({{< relref "commands/tdigest.rank/" >}}) command is also variadic, meaning you can use a single command to retrieve estimations for one or more values. Here's an example. Given a set of biker's ages, you can ask a question like "What's the percentage of bike racers that are younger than 50 years?" @@ -109,7 +109,7 @@ OK {{< /clients-example >}} -And lastly, `TDIGEST.REVRANK key value...` is similar to [TDIGEST.RANK]({{< baseurl >}}commands/tdigest.rank), but returns, for each input value, an estimation of the number of (observations larger than a given value + half the observations equal to the given value). +And lastly, `TDIGEST.REVRANK key value...` is similar to [TDIGEST.RANK]({{< relref "commands/tdigest.rank" >}}), but returns, for each input value, an estimation of the number of (observations larger than a given value + half the observations equal to the given value). #### Estimating values by fractions or ranks @@ -143,7 +143,7 @@ If `destKey` is an existing sketch, its values are merged with the values of the #### Retrieving sketch information -Use [`TDIGEST.MIN`]({{< baseurl >}}commands/tdigest.min/) and [`TDIGEST.MAX`]({{< baseurl >}}commands/tdigest.max/) to retrieve the minimal and maximal values in the sketch, respectively. +Use [`TDIGEST.MIN`]({{< relref "commands/tdigest.min/" >}}) and [`TDIGEST.MAX`]({{< relref "commands/tdigest.max/" >}}) to retrieve the minimal and maximal values in the sketch, respectively. {{< clients-example tdigest_tutorial tdig_min >}} > TDIGEST.MIN racer_ages diff --git a/content/develop/data-types/probabilistic/top-k.md b/content/develop/data-types/probabilistic/top-k.md index d59ec19635..46acf533bd 100644 --- a/content/develop/data-types/probabilistic/top-k.md +++ b/content/develop/data-types/probabilistic/top-k.md @@ -37,25 +37,25 @@ This application answers these questions: Data flow is the incoming social media posts from which you parse out the different hashtags. -The [`TOPK.LIST`]({{< baseurl >}}commands/topk.list/) command has a time complexity of `O(K*log(k))` so if `K` is small, there is no need to keep a separate set or sorted set of all the hashtags. You can query directly from the Top K itself. +The [`TOPK.LIST`]({{< relref "commands/topk.list/" >}}) command has a time complexity of `O(K*log(k))` so if `K` is small, there is no need to keep a separate set or sorted set of all the hashtags. You can query directly from the Top K itself. ## Example This example will show you how to track key words used "bike" when shopping online; e.g., "bike store" and "bike handlebars". Proceed as follows. ​ -* Use [`TOPK.RESERVE`]({{< baseurl >}}commands/topk.reserve/) to initialize a top K sketch with specific parameters. Note: the `width`, `depth`, and `decay_constant` parameters can be omitted, as they will be set to the default values 7, 8, and 0.9, respectively, if not present. +* Use [`TOPK.RESERVE`]({{< relref "commands/topk.reserve/" >}}) to initialize a top K sketch with specific parameters. Note: the `width`, `depth`, and `decay_constant` parameters can be omitted, as they will be set to the default values 7, 8, and 0.9, respectively, if not present. ​ ``` > TOPK.RESERVE key k width depth decay_constant ``` - * Use [`TOPK.ADD`]({{< baseurl >}}commands/topk.add/) to add items to the sketch. As you can see, multiple items can be added at the same time. If an item is returned when adding additional items, it means that item was demoted out of the min heap of the top items, below it will mean the returned item is no longer in the top 5, otherwise `nil` is returned. This allows dynamic heavy-hitter detection of items being entered or expelled from top K list. + * Use [`TOPK.ADD`]({{< relref "commands/topk.add/" >}}) to add items to the sketch. As you can see, multiple items can be added at the same time. If an item is returned when adding additional items, it means that item was demoted out of the min heap of the top items, below it will mean the returned item is no longer in the top 5, otherwise `nil` is returned. This allows dynamic heavy-hitter detection of items being entered or expelled from top K list. ​ In the example below, "pedals" displaces "handlebars", which is returned after "pedals" is added. Also note that the addition of both "store" and "seat" a second time don't return anything, as they're already in the top K. - * Use [`TOPK.LIST`]({{< baseurl >}}commands/topk.list/) to list the items entered thus far. + * Use [`TOPK.LIST`]({{< relref "commands/topk.list/" >}}) to list the items entered thus far. ​ - * Use [`TOPK.QUERY`]({{< baseurl >}}commands/topk.query/) to see if an item is on the top K list. Just like [`TOPK.ADD`]({{< baseurl >}}commands/topk.add/) multiple items can be queried at the same time. + * Use [`TOPK.QUERY`]({{< relref "commands/topk.query/" >}}) to see if an item is on the top K list. Just like [`TOPK.ADD`]({{< relref "commands/topk.add/" >}}) multiple items can be queried at the same time. {{< clients-example topk_tutorial topk >}} > TOPK.RESERVE bikes:keywords 5 2000 7 0.925 OK diff --git a/content/develop/data-types/timeseries/configuration.md b/content/develop/data-types/timeseries/configuration.md index 83f559503c..12cc61646e 100644 --- a/content/develop/data-types/timeseries/configuration.md +++ b/content/develop/data-types/timeseries/configuration.md @@ -72,9 +72,9 @@ $ redis-server --loadmodule ./redistimeseries.so NUM_THREADS 3 ### COMPACTION_POLICY -Default compaction rules for newly created key with [`TS.ADD`]({{< baseurl >}}commands/ts.add/), [`TS.INCRBY`]({{< baseurl >}}commands/ts.incrby/), and [`TS.DECRBY`]({{< baseurl >}}commands/ts.decrby/). +Default compaction rules for newly created key with [`TS.ADD`]({{< relref "commands/ts.add/" >}}), [`TS.INCRBY`]({{< relref "commands/ts.incrby/" >}}), and [`TS.DECRBY`]({{< relref "commands/ts.decrby/" >}}). -Note that `COMPACTION_POLICY` has no effect on keys created with [`TS.CREATE`]({{< baseurl >}}commands/ts.create/). To understand the motivation for this behavior, consider the following scenario: Suppose a `COMPACTION_POLICY` is defined, but then one wants to manually create an additional compaction rule (using [`TS.CREATERULE`]({{< baseurl >}}commands/ts.createrule/)) which requires first creating an empty destination key (using [`TS.CREATE`]({{< baseurl >}}commands/ts.create/)). But now there is a problem: due to the `COMPACTION_POLICY`, automatic compactions would be undesirably created for that destination key. +Note that `COMPACTION_POLICY` has no effect on keys created with [`TS.CREATE`]({{< relref "commands/ts.create/" >}}). To understand the motivation for this behavior, consider the following scenario: Suppose a `COMPACTION_POLICY` is defined, but then one wants to manually create an additional compaction rule (using [`TS.CREATERULE`]({{< relref "commands/ts.createrule/" >}})) which requires first creating an empty destination key (using [`TS.CREATE`]({{< relref "commands/ts.create/" >}})). But now there is a problem: due to the `COMPACTION_POLICY`, automatic compactions would be undesirably created for that destination key. Each rule is separated by a semicolon (`;`), the rule consists of multiple fields that are separated by a colon (`:`): @@ -158,7 +158,7 @@ $ redis-server --loadmodule ./redistimeseries.so COMPACTION_POLICY max:1m:1h;min Default retention period, in milliseconds, for newly created keys. -Retention period is the maximum age of samples compared to highest reported timestamp, per key. Samples are expired based solely on the difference between their timestamp and the timestamps passed to subsequent [`TS.ADD`]({{< baseurl >}}commands/ts.add/), [`TS.MADD`]({{< baseurl >}}commands/ts.madd/), [`TS.INCRBY`]({{< baseurl >}}commands/ts.incrby/), and [`TS.DECRBY`]({{< baseurl >}}commands/ts.decrby/) calls. +Retention period is the maximum age of samples compared to highest reported timestamp, per key. Samples are expired based solely on the difference between their timestamp and the timestamps passed to subsequent [`TS.ADD`]({{< relref "commands/ts.add/" >}}), [`TS.MADD`]({{< relref "commands/ts.madd/" >}}), [`TS.INCRBY`]({{< relref "commands/ts.incrby/" >}}), and [`TS.DECRBY`]({{< relref "commands/ts.decrby/" >}}) calls. The value `0` means no expiration. @@ -178,7 +178,7 @@ $ redis-server --loadmodule ./redistimeseries.so RETENTION_POLICY 25920000000 ### DUPLICATE_POLICY -Is policy for handling insertion ([`TS.ADD`]({{< baseurl >}}commands/ts.add/) and [`TS.MADD`]({{< baseurl >}}commands/ts.madd/)) of multiple samples with identical timestamps, with one of the following values: +Is policy for handling insertion ([`TS.ADD`]({{< relref "commands/ts.add/" >}}) and [`TS.MADD`]({{< relref "commands/ts.madd/" >}})) of multiple samples with identical timestamps, with one of the following values: | policy | description | | ---------- | ---------------------------------------------------------------- | @@ -192,8 +192,8 @@ Is policy for handling insertion ([`TS.ADD`]({{< baseurl >}}commands/ts.add/) an #### Precedence order Since the duplication policy can be provided at different levels, the actual precedence of the used policy will be: -1. [`TS.ADD`]({{< baseurl >}}commands/ts.add/)'s `ON_DUPLICATE_policy` optional argument -2. Key-level policy (as set with [`TS.CREATE`]({{< baseurl >}}commands/ts.create/)'s and [`TS.ALTER`]({{< baseurl >}}commands/ts.alter/)'s `DUPLICATE_POLICY` optional argument) +1. [`TS.ADD`]({{< relref "commands/ts.add/" >}})'s `ON_DUPLICATE_policy` optional argument +2. Key-level policy (as set with [`TS.CREATE`]({{< relref "commands/ts.create/" >}})'s and [`TS.ALTER`]({{< relref "commands/ts.alter/" >}})'s `DUPLICATE_POLICY` optional argument) 3. The `DUPLICATE_POLICY` module configuration parameter 4. The default policy diff --git a/content/develop/data-types/timeseries/quickstart.md b/content/develop/data-types/timeseries/quickstart.md index cc17512643..098c3aad9a 100644 --- a/content/develop/data-types/timeseries/quickstart.md +++ b/content/develop/data-types/timeseries/quickstart.md @@ -107,7 +107,7 @@ OK ## Creating a timeseries -A new timeseries can be created with the [`TS.CREATE`]({{< baseurl >}}commands/ts.create/) command; for example, to create a timeseries named `sensor1` run the following: +A new timeseries can be created with the [`TS.CREATE`]({{< relref "commands/ts.create/" >}}) command; for example, to create a timeseries named `sensor1` run the following: ``` TS.CREATE sensor1 @@ -122,7 +122,7 @@ This will create a timeseries called `sensor1` and trim it to values of up to on ## Adding data points -For adding new data points to a timeseries we use the [`TS.ADD`]({{< baseurl >}}commands/ts.add/) command: +For adding new data points to a timeseries we use the [`TS.ADD`]({{< relref "commands/ts.add/" >}}) command: ``` TS.ADD key timestamp value @@ -141,14 +141,14 @@ To **add a datapoint with the current timestamp** you can use a `*` instead of a TS.ADD sensor1 * 26 ``` -You can **append data points to multiple timeseries** at the same time with the [`TS.MADD`]({{< baseurl >}}commands/ts.madd/) command: +You can **append data points to multiple timeseries** at the same time with the [`TS.MADD`]({{< relref "commands/ts.madd/" >}}) command: ``` TS.MADD key timestamp value [key timestamp value ...] ``` ## Deleting data points -Data points between two timestamps (inclusive) can be deleted with the [`TS.DEL`]({{< baseurl >}}commands/ts.del/) command: +Data points between two timestamps (inclusive) can be deleted with the [`TS.DEL`]({{< relref "commands/ts.del/" >}}) command: ``` TS.DEL key fromTimestamp toTimestamp ``` @@ -175,7 +175,7 @@ TS.CREATE sensor1 LABELS region east ## Compaction -Another useful feature of Redis Time Series is compacting data by creating a rule for compaction ([`TS.CREATERULE`]({{< baseurl >}}commands/ts.createrule/)). For example, if you have collected more than one billion data points in a day, you could aggregate the data by every minute in order to downsample it, thereby reducing the dataset size to 24 * 60 = 1,440 data points. You can choose one of the many available aggregation types in order to aggregate multiple data points from a certain minute into a single one. The currently supported aggregation types are: `avg, sum, min, max, range, count, first, last, std.p, std.s, var.p, var.s and twa`. +Another useful feature of Redis Time Series is compacting data by creating a rule for compaction ([`TS.CREATERULE`]({{< relref "commands/ts.createrule/" >}})). For example, if you have collected more than one billion data points in a day, you could aggregate the data by every minute in order to downsample it, thereby reducing the dataset size to 24 * 60 = 1,440 data points. You can choose one of the many available aggregation types in order to aggregate multiple data points from a certain minute into a single one. The currently supported aggregation types are: `avg, sum, min, max, range, count, first, last, std.p, std.s, var.p, var.s and twa`. It's important to point out that there is no data rewriting on the original timeseries; the compaction happens in a new series, while the original one stays the same. In order to prevent the original timeseries from growing indefinitely, you can use the retention option, which will trim it down to a certain period of time. @@ -207,7 +207,7 @@ TS.MRANGE - + FILTER area_id=32 This query will show data from all sensors (timeseries) that have a label of `area_id` with a value of `32`. The results will be grouped by timeseries. -Or we can also use the [`TS.MGET`]({{< baseurl >}}commands/ts.mget/) command to get the last sample that matches the specific filter: +Or we can also use the [`TS.MGET`]({{< relref "commands/ts.mget/" >}}) command to get the last sample that matches the specific filter: ``` TS.MGET FILTER area_id=32 diff --git a/content/develop/get-started/document-database.md b/content/develop/get-started/document-database.md index 9a4c0dcb99..90765eca42 100644 --- a/content/develop/get-started/document-database.md +++ b/content/develop/get-started/document-database.md @@ -67,7 +67,7 @@ You can copy and paste the connection details from the Redis Cloud database conf As explained in the [in-memory data store]({{< relref "/develop/get-started/data-store" >}}) quick start guide, Redis allows you to access an item directly via its key. You also learned how to scan the keyspace. Whereby you can use other data structures (e.g., hashes and sorted sets) as secondary indexes, your application would need to maintain those indexes manually. Redis Stack turns Redis into a document database by allowing you to declare which fields are auto-indexed. Redis Stack currently supports secondary index creation on the [hashes]({{< relref "/develop/data-types/hashes" >}}) and [JSON]({{< relref "/develop/data-types/json" >}}) documents. -The following example shows an [FT.CREATE]({{< baseurl >}}commands/ft.create) command that creates an index with some text fields, a numeric field (price), and a tag field (condition). The text fields have a weight of 1.0, meaning they have the same relevancy in the context of full-text searches. The field names follow the [JSONPath]({{< relref "/develop/data-types/json/path" >}}) notion. Each such index field maps to a property within the JSON document. +The following example shows an [FT.CREATE]({{< relref "commands/ft.create" >}}) command that creates an index with some text fields, a numeric field (price), and a tag field (condition). The text fields have a weight of 1.0, meaning they have the same relevancy in the context of full-text searches. The field names follow the [JSONPath]({{< relref "/develop/data-types/json/path" >}}) notion. Each such index field maps to a property within the JSON document. {{< clients-example search_quickstart create_index >}} @@ -79,7 +79,7 @@ Any pre-existing JSON documents with a key prefix `bicycle:` are automatically a ## Add JSON documents -The example below shows you how to use the [JSON.SET]({{< baseurl >}}commands/json.set) command to create new JSON documents: +The example below shows you how to use the [JSON.SET]({{< relref "commands/json.set" >}}) command to create new JSON documents: {{< clients-example search_quickstart add_documents "" 2 >}} > JSON.SET "bicycle:0" "." "{\"brand\": \"Velorim\", \"model\": \"Jigger\", \"price\": 270, \"description\": \"Small and powerful, the Jigger is the best ride for the smallest of tikes! This is the tiniest kids\\u2019 pedal bike on the market available without a coaster brake, the Jigger is the vehicle of choice for the rare tenacious little rider raring to go.\", \"condition\": \"new\"}" @@ -108,7 +108,7 @@ OK ### Wildcard query -You can retrieve all indexed documents using the [FT.SEARCH]({{< baseurl >}}commands/ft.search) command. Note the `LIMIT` clause below, which allows result pagination. +You can retrieve all indexed documents using the [FT.SEARCH]({{< relref "commands/ft.search" >}}) command. Note the `LIMIT` clause below, which allows result pagination. {{< clients-example search_quickstart wildcard_query "" 10 >}} > FT.SEARCH "idx:bicycle" "*" LIMIT 0 10 diff --git a/content/develop/get-started/vector-database.md b/content/develop/get-started/vector-database.md index 8591184b96..15411c7cc5 100644 --- a/content/develop/get-started/vector-database.md +++ b/content/develop/get-started/vector-database.md @@ -122,7 +122,7 @@ Inspect the structure of one of the bike JSON documents: {{< clients-example search_vss dump_data />}} ### 2. Store the demo data in Redis -Now iterate over the `bikes` array to store the data as [JSON]({{< relref "/develop/data-types/json/" >}}) documents in Redis by using the [JSON.SET]({{< baseurl >}}commands/json.set/) command. The below code uses a [pipeline]({{< relref "/develop/use/pipelining" >}}) to minimize the network round-trip times: +Now iterate over the `bikes` array to store the data as [JSON]({{< relref "/develop/data-types/json/" >}}) documents in Redis by using the [JSON.SET]({{< relref "commands/json.set/" >}}) command. The below code uses a [pipeline]({{< relref "/develop/use/pipelining" >}}) to minimize the network round-trip times: {{< clients-example search_vss load_data />}} @@ -145,15 +145,15 @@ Iterate over all the Redis keys with the prefix `bikes:`: {{< clients-example search_vss get_keys />}} -Use the keys as input to the [JSON.MGET]({{< baseurl >}}commands/json.mget/) command, along with the `$.description` field, to collect the descriptions in a list. Then, pass the list of descriptions to the `.encode()` method: +Use the keys as input to the [JSON.MGET]({{< relref "commands/json.mget/" >}}) command, along with the `$.description` field, to collect the descriptions in a list. Then, pass the list of descriptions to the `.encode()` method: {{< clients-example search_vss generate_embeddings />}} -Insert the vectorized descriptions to the bike documents in Redis using the [JSON.SET]({{< baseurl >}}commands/json.set) command. The following command inserts a new field into each of the documents under the JSONPath `$.description_embeddings`. Once again, do this using a pipeline to avoid unnecessary network round-trips: +Insert the vectorized descriptions to the bike documents in Redis using the [JSON.SET]({{< relref "commands/json.set" >}}) command. The following command inserts a new field into each of the documents under the JSONPath `$.description_embeddings`. Once again, do this using a pipeline to avoid unnecessary network round-trips: {{< clients-example search_vss load_embeddings />}} -Inspect one of the updated bike documents using the [JSON.GET]({{< baseurl >}}commands/json.get) command: +Inspect one of the updated bike documents using the [JSON.GET]({{< relref "commands/json.get" >}}) command: {{< clients-example search_vss dump_example />}} @@ -166,7 +166,7 @@ When storing a vector embedding within a JSON document, the embedding is stored ### 1. Create an index with a vector field -You must create an index to query document metadata or to perform vector searches. Use the [FT.CREATE]({{< baseurl >}}commands/ft.create) command: +You must create an index to query document metadata or to perform vector searches. Use the [FT.CREATE]({{< relref "commands/ft.create" >}}) command: {{< clients-example search_vss create_index >}} FT.CREATE idx:bikes_vss ON JSON @@ -192,7 +192,7 @@ You can find further details about all these options in the [vector reference do ### 2. Check the state of the index -As soon as you execute the [FT.CREATE]({{< baseurl >}}commands/ft.create) command, the indexing process runs in the background. In a short time, all JSON documents should be indexed and ready to be queried. To validate that, you can use the [FT.INFO]({{< baseurl >}}commands/ft.info) command, which provides details and statistics about the index. Of particular interest are the number of documents successfully indexed and the number of failures: +As soon as you execute the [FT.CREATE]({{< relref "commands/ft.create" >}}) command, the indexing process runs in the background. In a short time, all JSON documents should be indexed and ready to be queried. To validate that, you can use the [FT.INFO]({{< relref "commands/ft.info" >}}) command, which provides details and statistics about the index. Of particular interest are the number of documents successfully indexed and the number of failures: {{< clients-example search_vss validate_index >}} FT.INFO idx:bikes_vss @@ -240,7 +240,7 @@ Let's break down the above query template: - Finally, it returns the fields `vector_score`, `id`, `brand`, `model`, and `description` for each result. {{% alert title="Note" color="warning" %}} -To utilize a vector query with the [`FT.SEARCH`]({{< baseurl >}}commands/ft.search/) command, you must specify DIALECT 2 or greater. +To utilize a vector query with the [`FT.SEARCH`]({{< relref "commands/ft.search/" >}}) command, you must specify DIALECT 2 or greater. {{% /alert %}} You must pass the vectorized query as a byte array with the param name `query_vector`. The following code creates a Python NumPy array from the query vector and converts it into a compact, byte-level representation that can be passed as a parameter to the query: diff --git a/content/develop/interact/programmability/_index.md b/content/develop/interact/programmability/_index.md index 3196cb5ddf..a302f92943 100644 --- a/content/develop/interact/programmability/_index.md +++ b/content/develop/interact/programmability/_index.md @@ -36,7 +36,7 @@ Such APIs can encapsulate business logic and maintain a data model across multip User scripts are executed in Redis by an embedded, sandboxed scripting engine. Presently, Redis supports a single scripting engine, the [Lua 5.1](https://www.lua.org/) interpreter. -Please refer to the [Redis Lua API Reference]({{< baseurl >}}develop/interact/programmability/lua-api) page for complete documentation. +Please refer to the [Redis Lua API Reference]({{< relref "develop/interact/programmability/lua-api" >}}) page for complete documentation. ## Running scripts @@ -71,7 +71,7 @@ However, if you intend to use a slow script in your application, be aware that a ## Read-only scripts A read-only script is a script that only executes commands that don't modify any keys within Redis. -Read-only scripts can be executed either by adding the `no-writes` [flag]({{< baseurl >}}develop/interact/programmability/lua-api#script_flags) to the script or by executing the script with one of the read-only script command variants: [`EVAL_RO`]({{< relref "/commands/eval_ro" >}}), [`EVALSHA_RO`]({{< relref "/commands/evalsha_ro" >}}), or [`FCALL_RO`]({{< relref "/commands/fcall_ro" >}}). +Read-only scripts can be executed either by adding the `no-writes` [flag]({{< relref "develop/interact/programmability/lua-api#script_flags" >}}) to the script or by executing the script with one of the read-only script command variants: [`EVAL_RO`]({{< relref "/commands/eval_ro" >}}), [`EVALSHA_RO`]({{< relref "/commands/evalsha_ro" >}}), or [`FCALL_RO`]({{< relref "/commands/fcall_ro" >}}). They have the following properties: * They can always be executed on replicas. @@ -91,7 +91,7 @@ In addition to the benefits provided by all read-only scripts, the read-only scr Read-only scripts and read-only script commands were introduced in Redis 7.0 * Before Redis 7.0.1 [`PUBLISH`]({{< relref "/commands/publish" >}}), [`SPUBLISH`]({{< relref "/commands/spublish" >}}) and [`PFCOUNT`]({{< relref "/commands/pfcount" >}}) were not considered write commands in scripts -* Before Redis 7.0.1 the `no-writes` [flag]({{< baseurl >}}develop/interact/programmability/lua-api#script_flags) did not imply `allow-oom` +* Before Redis 7.0.1 the `no-writes` [flag]({{< relref "develop/interact/programmability/lua-api#script_flags" >}}) did not imply `allow-oom` * Before Redis 7.0.1 the `no-writes` flag did not permit the script to run during write pauses. diff --git a/content/develop/interact/programmability/eval-intro.md b/content/develop/interact/programmability/eval-intro.md index 98a7e2412b..7679101055 100644 --- a/content/develop/interact/programmability/eval-intro.md +++ b/content/develop/interact/programmability/eval-intro.md @@ -37,7 +37,7 @@ Such scripts can perform conditional updates across multiple keys, possibly comb Scripts are executed in Redis by an embedded execution engine. Presently, Redis supports a single scripting engine, the [Lua 5.1](https://www.lua.org/) interpreter. -Please refer to the [Redis Lua API Reference]({{< baseurl >}}develop/interact/programmability/lua-api) page for complete documentation. +Please refer to the [Redis Lua API Reference]({{< relref "develop/interact/programmability/lua-api" >}}) page for complete documentation. Although the server executes them, Eval scripts are regarded as a part of the client-side application, which is why they're not named, versioned, or persisted. So all scripts may need to be reloaded by the application at any time if missing (after a server restart, fail-over to a replica, etc.). @@ -100,7 +100,7 @@ Any input to the function that isn't the name of a key is a regular input argume In the example above, both _Hello_ and _Parameterization!_ regular input arguments for the script. Because the script doesn't touch any keys, we use the numerical argument _0_ to specify there are no key name arguments. -The execution context makes arguments available to the script through [_KEYS_]({{< baseurl >}}develop/interact/programmability/lua-api#the-keys-global-variable) and [_ARGV_]({{< baseurl >}}develop/interact/programmability/lua-api#the-argv-global-variable) global runtime variables. +The execution context makes arguments available to the script through [_KEYS_]({{< relref "develop/interact/programmability/lua-api#the-keys-global-variable" >}}) and [_ARGV_]({{< relref "develop/interact/programmability/lua-api#the-argv-global-variable" >}}) global runtime variables. The _KEYS_ table is pre-populated with all key name arguments provided to the script before its execution, whereas the _ARGV_ table serves a similar purpose but for regular arguments. The following attempts to demonstrate the distribution of input arguments between the scripts _KEYS_ and _ARGV_ runtime global variables: @@ -117,11 +117,11 @@ redis> EVAL "return { KEYS[1], KEYS[2], ARGV[1], ARGV[2], ARGV[3] }" 2 key1 key2 **Note:** as can been seen above, Lua's table arrays are returned as [RESP2 array replies]({{< relref "/develop/reference/protocol-spec#resp-arrays" >}}), so it is likely that your client's library will convert it to the native array data type in your programming language. -Please refer to the rules that govern [data type conversion]({{< baseurl >}}develop/interact/programmability/lua-api#data-type-conversion) for more pertinent information. +Please refer to the rules that govern [data type conversion]({{< relref "develop/interact/programmability/lua-api#data-type-conversion" >}}) for more pertinent information. ## Interacting with Redis from a script -It is possible to call Redis commands from a Lua script either via [`redis.call()`]({{< baseurl >}}develop/interact/programmability/lua-api#redis.call) or [`redis.pcall()`]({{< baseurl >}}develop/interact/programmability/lua-api#redis.pcall). +It is possible to call Redis commands from a Lua script either via [`redis.call()`]({{< relref "develop/interact/programmability/lua-api#redis.call" >}}) or [`redis.pcall()`]({{< relref "develop/interact/programmability/lua-api#redis.pcall" >}}). The two are nearly identical. Both execute a Redis command along with its provided arguments, if these represent a well-formed command. @@ -255,7 +255,7 @@ There are two conceptual approaches when it comes to script replication: While potentially lengthier in terms of network traffic, this replication mode is deterministic by definition and therefore doesn't require special consideration. Verbatim script replication was the only mode supported until Redis 3.2, in which effects replication was added. -The _lua-replicate-commands_ configuration directive and [`redis.replicate_commands()`]({{< baseurl >}}develop/interact/programmability/lua-api#redis.replicate_commands) Lua API can be used to enable it. +The _lua-replicate-commands_ configuration directive and [`redis.replicate_commands()`]({{< relref "develop/interact/programmability/lua-api#redis.replicate_commands" >}}) Lua API can be used to enable it. In Redis 5.0, effects replication became the default mode. As of Redis 7.0, verbatim replication is no longer supported. @@ -286,7 +286,7 @@ Unless already enabled by the server's configuration or defaults (before Redis 7 redis.replicate_commands() ``` -The [`redis.replicate_commands()`]({{< baseurl >}}develop/interact/programmability/lua-api#redis.replicate_commands) function returns _true) if script effects replication was enabled; +The [`redis.replicate_commands()`]({{< relref "develop/interact/programmability/lua-api#redis.replicate_commands" >}}) function returns _true) if script effects replication was enabled; otherwise, if the function was called after the script already called a write command, it returns _false_, and normal whole script replication is used. @@ -331,7 +331,7 @@ and undergo a silent lexicographical sorting filter before returning data to Lua However, starting with Redis 5.0, this ordering is no longer performed because replicating effects circumvents this type of non-determinism. In general, even when developing for Redis 4.0, never assume that certain commands in Lua will be ordered, but instead rely on the documentation of the original command you call to see the properties it provides. * Lua's pseudo-random number generation function `math.random` is modified and always uses the same seed for every execution. - This means that calling [`math.random`]({{< baseurl >}}develop/interact/programmability/lua-api#runtime-libraries) will always generate the same sequence of numbers every time a script is executed (unless `math.randomseed` is used). + This means that calling [`math.random`]({{< relref "develop/interact/programmability/lua-api#runtime-libraries" >}}) will always generate the same sequence of numbers every time a script is executed (unless `math.randomseed` is used). All that said, you can still use commands that write and random behavior with a simple trick. Imagine that you want to write a Redis script that will populate a list with N random integers. @@ -413,7 +413,7 @@ The Lua debugger is described in the [Lua scripts debugging]({{< relref "/develo ## Execution under low memory conditions -When memory usage in Redis exceeds the `maxmemory` limit, the first write command encountered in the script that uses additional memory will cause the script to abort (unless [`redis.pcall`]({{< baseurl >}}develop/interact/programmability/lua-api#redis.pcall) was used). +When memory usage in Redis exceeds the `maxmemory` limit, the first write command encountered in the script that uses additional memory will cause the script to abort (unless [`redis.pcall`]({{< relref "develop/interact/programmability/lua-api#redis.pcall" >}}) was used). However, an exception to the above is when the script's first write command does not use additional memory, as is the case with (for example, [`DEL`]({{< relref "/commands/del" >}}) and [`LREM`]({{< relref "/commands/lrem" >}})). In this case, Redis will allow all commands in the script to run to ensure atomicity. @@ -446,4 +446,4 @@ it still has a different set of defaults compared to a script without a `#!` lin Another difference is that scripts without `#!` can run commands that access keys belonging to different cluster hash slots, but ones with `#!` inherit the default flags, so they cannot. -Please refer to [Script flags]({{< baseurl >}}develop/interact/programmability/lua-api#script_flags) to learn about the various scripts and the defaults. +Please refer to [Script flags]({{< relref "develop/interact/programmability/lua-api#script_flags" >}}) to learn about the various scripts and the defaults. diff --git a/content/develop/interact/programmability/functions-intro.md b/content/develop/interact/programmability/functions-intro.md index af7c3b1d03..ed96b9eadd 100644 --- a/content/develop/interact/programmability/functions-intro.md +++ b/content/develop/interact/programmability/functions-intro.md @@ -38,7 +38,7 @@ This approach suits many light-weight scripting use cases, but introduces severa 1. All client application instances must maintain a copy of all scripts. That means having some mechanism that applies script updates to all of the application's instances. 1. Calling cached scripts within the context of a [transaction]({{< relref "/develop/interact/transactions" >}}) increases the probability of the transaction failing because of a missing script. Being more likely to fail makes using cached scripts as building blocks of workflows less attractive. 1. SHA1 digests are meaningless, making debugging the system extremely hard (e.g., in a [`MONITOR`]({{< relref "/commands/monitor" >}}) session). -1. When used naively, [`EVAL`]({{< relref "/commands/eval" >}}) promotes an anti-pattern in which scripts the client application renders verbatim scripts instead of responsibly using the [`KEYS` and `ARGV` Lua APIs]({{< baseurl >}}develop/interact/programmability/lua-api#runtime-globals). +1. When used naively, [`EVAL`]({{< relref "/commands/eval" >}}) promotes an anti-pattern in which scripts the client application renders verbatim scripts instead of responsibly using the [`KEYS` and `ARGV` Lua APIs]({{< relref "develop/interact/programmability/lua-api#runtime-globals" >}}). 1. Because they are ephemeral, a script can't call another script. This makes sharing and reusing code between scripts nearly impossible, short of client-side preprocessing (see the first point). To address these needs while avoiding breaking changes to already-established and well-liked ephemeral scripts, Redis v7.0 introduces Redis Functions. @@ -64,7 +64,7 @@ The Redis Functions feature makes no assumptions about the implementation's lang An execution engine that is part of the definition of the function handles running it. An engine can theoretically execute functions in any language as long as it respects several rules (such as the ability to terminate an executing function). -Presently, as noted above, Redis ships with a single embedded [Lua 5.1]({{< baseurl >}}develop/interact/programmability/lua-api) engine. +Presently, as noted above, Redis ships with a single embedded [Lua 5.1]({{< relref "develop/interact/programmability/lua-api" >}}) engine. There are plans to support additional engines in the future. Redis functions can use all of Lua's available capabilities to ephemeral scripts, with the only exception being the [Redis Lua scripts debugger]({{< relref "/develop/interact/programmability/lua-debugging" >}}). @@ -90,7 +90,7 @@ Because running a function blocks the Redis server, functions are meant to finis Let's explore Redis Functions via some tangible examples and Lua snippets. -At this point, if you're unfamiliar with Lua in general and specifically in Redis, you may benefit from reviewing some of the examples in [Introduction to Eval Scripts]({{< relref "/develop/interact/programmability/eval-intro" >}}) and [Lua API]({{< baseurl >}}develop/interact/programmability/lua-api) pages for a better grasp of the language. +At this point, if you're unfamiliar with Lua in general and specifically in Redis, you may benefit from reviewing some of the examples in [Introduction to Eval Scripts]({{< relref "/develop/interact/programmability/eval-intro" >}}) and [Lua API]({{< relref "develop/interact/programmability/lua-api" >}}) pages for a better grasp of the language. Every Redis function belongs to a single library that's loaded to Redis. Loading a library to the database is done with the [`FUNCTION LOAD`]({{< relref "/commands/function-load" >}}) command. @@ -245,7 +245,7 @@ redis.register_function('my_hgetall', my_hgetall) redis.register_function('my_hlastmodified', my_hlastmodified) ``` -While all of the above should be straightforward, note that the `my_hgetall` also calls [`redis.setresp(3)`]({{< baseurl >}}develop/interact/programmability/lua-api#redis.setresp). +While all of the above should be straightforward, note that the `my_hgetall` also calls [`redis.setresp(3)`]({{< relref "develop/interact/programmability/lua-api#redis.setresp" >}}). That means that the function expects [RESP3](https://github.com/redis/redis-specifications/blob/master/protocol/RESP3.md) replies after calling `redis.call()`, which, unlike the default RESP2 protocol, provides dictionary (associative arrays) replies. Doing so allows the function to delete (or set to `nil` as is the case with Lua tables) specific fields from the reply, and in our case, the `_last_modified_` field. @@ -303,7 +303,7 @@ You can see that it is easy to update our library with new capabilities. On top of bundling functions together into database-managed software artifacts, libraries also facilitate code sharing. We can add to our library an error handling helper function called from other functions. The helper function `check_keys()` verifies that the input _keys_ table has a single key. -Upon success it returns `nil`, otherwise it returns an [error reply]({{< baseurl >}}develop/interact/programmability/lua-api#redis.error_reply). +Upon success it returns `nil`, otherwise it returns an [error reply]({{< relref "develop/interact/programmability/lua-api#redis.error_reply" >}}). The updated library's source code would be: @@ -426,7 +426,7 @@ The server will reply with this error in the following cases: 3. A disk error was detected (Redis is unable to persist so it rejects writes). In these cases, you can add the `no-writes` flag to the function's registration, disable the safeguard and allow them to run. -To register a function with flags use the [named arguments]({{< baseurl >}}develop/interact/programmability/lua-api#redis.register_function_named_args) variant of `redis.register_function`. +To register a function with flags use the [named arguments]({{< relref "develop/interact/programmability/lua-api#redis.register_function_named_args" >}}) variant of `redis.register_function`. The updated registration code snippet from the library looks like this: @@ -456,4 +456,4 @@ redis> FCALL_RO my_hlastmodified 1 myhash "1640772721" ``` -For the complete documentation flags, please refer to [Script flags]({{< baseurl >}}develop/interact/programmability/lua-api#script_flags). +For the complete documentation flags, please refer to [Script flags]({{< relref "develop/interact/programmability/lua-api#script_flags" >}}). diff --git a/content/develop/interact/programmability/lua-api.md b/content/develop/interact/programmability/lua-api.md index 22e5215d0f..24151fb80a 100644 --- a/content/develop/interact/programmability/lua-api.md +++ b/content/develop/interact/programmability/lua-api.md @@ -190,7 +190,7 @@ redis> EVAL "..." 0 hello world * Available in scripts: yes * Available in functions: yes -This is a helper function that returns an [error reply]({{< baseurl >}}develop/reference/protocol-spec/#simple-errors). +This is a helper function that returns an [error reply]({{< relref "develop/reference/protocol-spec/#simple-errors" >}}). The helper accepts a single string argument and returns a Lua table with the _err_ field set to that string. The outcome of the following code is that _error1_ and _error2_ are identical for all intents and purposes: @@ -223,7 +223,7 @@ Scripts are advised to follow this convention, as shown in the example above, bu * Available in scripts: yes * Available in functions: yes -This is a helper function that returns a [simple string reply]({{< baseurl >}}develop/reference/protocol-spec#simple-strings). +This is a helper function that returns a [simple string reply]({{< relref "develop/reference/protocol-spec#simple-strings" >}}). "OK" is an example of a standard Redis status reply. The Lua API represents status replies as tables with a single field, _ok_, set with a simple status string. @@ -451,7 +451,7 @@ redis> FUNCTION LOAD "#!lua name=mylib\n redis.register_function{function_name=' **Important:** Use script flags with care, which may negatively impact if misused. -Note that the default for Eval scripts are different than the default for functions that are mentioned below, see [Eval Flags]({{< baseurl >}}develop/interact/programmability/eval-intro#eval-flags) +Note that the default for Eval scripts are different than the default for functions that are mentioned below, see [Eval Flags]({{< relref "develop/interact/programmability/eval-intro#eval-flags" >}}) When you register a function or load an Eval script, the server does not know how it accesses the database. By default, Redis assumes that all scripts read and write data. @@ -479,7 +479,7 @@ You can use the following flags and instruct the server to treat the scripts' ex However, note that the server will return an error if the script attempts to call a write command. Also note that currently [`PUBLISH`]({{< relref "/commands/publish" >}}), [`SPUBLISH`]({{< relref "/commands/spublish" >}}) and [`PFCOUNT`]({{< relref "/commands/pfcount" >}}) are also considered write commands in scripts, because they could attempt to propagate commands to replicas and AOF file. - For more information please refer to [Read-only scripts]({{< baseurl >}}develop/interact/programmability/#read-only_scripts) + For more information please refer to [Read-only scripts]({{< relref "develop/interact/programmability/#read-only_scripts" >}}) * `allow-oom`: use this flag to allow a script to execute when the server is out of memory (OOM). @@ -507,7 +507,7 @@ You can use the following flags and instruct the server to treat the scripts' ex This flag has no effect when cluster mode is disabled. -Please refer to [Function Flags]({{< baseurl >}}develop/interact/programmability/functions-intro#function-flags) and [Eval Flags]({{< baseurl >}}develop/interact/programmability/eval-intro#eval-flags) for a detailed example. +Please refer to [Function Flags]({{< relref "develop/interact/programmability/functions-intro#function-flags" >}}) and [Eval Flags]({{< relref "develop/interact/programmability/eval-intro#eval-flags" >}}) for a detailed example. ### `redis.REDIS_VERSION` {#redis.redis_version} @@ -558,27 +558,27 @@ The following sections describe the type conversion rules between Lua and Redis The following type conversion rules apply to the execution's context by default as well as after calling `redis.setresp(2)`: -* [RESP2 integer reply]({{< baseurl >}}develop/reference/protocol-spec#integers) -> Lua number -* [RESP2 bulk string reply]({{< baseurl >}}develop/reference/protocol-spec#bulk-strings) -> Lua string -* [RESP2 array reply]({{< baseurl >}}develop/reference/protocol-spec#arrays) -> Lua table (may have other Redis data types nested) -* [RESP2 status reply]({{< baseurl >}}develop/reference/protocol-spec#simple-strings) -> Lua table with a single _ok_ field containing the status string -* [RESP2 error reply]({{< baseurl >}}develop/reference/protocol-spec#simple-errors) -> Lua table with a single _err_ field containing the error string -* [RESP2 null bulk reply]({{< baseurl >}}develop/reference/protocol-spec#bulk-strings) and [RESP2 null multi-bulk reply]({{< baseurl >}}develop/reference/protocol-spec#arrays) -> Lua false boolean type +* [RESP2 integer reply]({{< relref "develop/reference/protocol-spec#integers" >}}) -> Lua number +* [RESP2 bulk string reply]({{< relref "develop/reference/protocol-spec#bulk-strings" >}}) -> Lua string +* [RESP2 array reply]({{< relref "develop/reference/protocol-spec#arrays" >}}) -> Lua table (may have other Redis data types nested) +* [RESP2 status reply]({{< relref "develop/reference/protocol-spec#simple-strings" >}}) -> Lua table with a single _ok_ field containing the status string +* [RESP2 error reply]({{< relref "develop/reference/protocol-spec#simple-errors" >}}) -> Lua table with a single _err_ field containing the error string +* [RESP2 null bulk reply]({{< relref "develop/reference/protocol-spec#bulk-strings" >}}) and [RESP2 null multi-bulk reply]({{< relref "develop/reference/protocol-spec#arrays" >}}) -> Lua false boolean type ## Lua to RESP2 type conversion The following type conversion rules apply by default as well as after the user had called `HELLO 2`: -* Lua number -> [RESP2 integer reply]({{< baseurl >}}develop/reference/protocol-spec#integers) (the number is converted into an integer) -* Lua string -> [RESP2 bulk string reply]({{< baseurl >}}develop/reference/protocol-spec#bulk-strings) -* Lua table (indexed, non-associative array) -> [RESP2 array reply]({{< baseurl >}}develop/reference/protocol-spec#arrays) (truncated at the first Lua `nil` value encountered in the table, if any) -* Lua table with a single _ok_ field -> [RESP2 status reply]({{< baseurl >}}develop/reference/protocol-spec#simple-strings) -* Lua table with a single _err_ field -> [RESP2 error reply]({{< baseurl >}}develop/reference/protocol-spec#simple-errors) -* Lua boolean false -> [RESP2 null bulk reply]({{< baseurl >}}develop/reference/protocol-spec#bulk-strings) +* Lua number -> [RESP2 integer reply]({{< relref "develop/reference/protocol-spec#integers" >}}) (the number is converted into an integer) +* Lua string -> [RESP2 bulk string reply]({{< relref "develop/reference/protocol-spec#bulk-strings" >}}) +* Lua table (indexed, non-associative array) -> [RESP2 array reply]({{< relref "develop/reference/protocol-spec#arrays" >}}) (truncated at the first Lua `nil` value encountered in the table, if any) +* Lua table with a single _ok_ field -> [RESP2 status reply]({{< relref "develop/reference/protocol-spec#simple-strings" >}}) +* Lua table with a single _err_ field -> [RESP2 error reply]({{< relref "develop/reference/protocol-spec#simple-errors" >}}) +* Lua boolean false -> [RESP2 null bulk reply]({{< relref "develop/reference/protocol-spec#bulk-strings" >}}) There is an additional Lua-to-Redis conversion rule that has no corresponding Redis-to-Lua conversion rule: -* Lua Boolean `true` -> [RESP2 integer reply]({{< baseurl >}}develop/reference/protocol-spec#integers) with value of 1. +* Lua Boolean `true` -> [RESP2 integer reply]({{< relref "develop/reference/protocol-spec#integers" >}}) with value of 1. There are three additional rules to note about converting Lua to Redis data types: diff --git a/content/develop/interact/search-and-query/administration/design.md b/content/develop/interact/search-and-query/administration/design.md index de6470879b..018ff5ffd0 100644 --- a/content/develop/interact/search-and-query/administration/design.md +++ b/content/develop/interact/search-and-query/administration/design.md @@ -73,7 +73,7 @@ When searching, priority queue of the top N results requested is maintained, whi ## Index ppecs and field weights -When creating an "index" using [`FT.CREATE`]({{< baseurl >}}commands/ft.create/), the user specifies the fields to be indexed and their respective weights. This can be used to give some document fields, like a title, more weight in ranking results. +When creating an "index" using [`FT.CREATE`]({{< relref "commands/ft.create/" >}}), the user specifies the fields to be indexed and their respective weights. This can be used to give some document fields, like a title, more weight in ranking results. For example: diff --git a/content/develop/interact/search-and-query/administration/overview.md b/content/develop/interact/search-and-query/administration/overview.md index c651df67aa..72911debac 100644 --- a/content/develop/interact/search-and-query/administration/overview.md +++ b/content/develop/interact/search-and-query/administration/overview.md @@ -131,7 +131,7 @@ Optionally, you can choose not to save any one of those attributes besides the I ### Numeric index -Numeric properties are indexed in a special data structure that enables filtering by numeric ranges in an efficient way. One could view a numeric value as a term operating just like an inverted index. For example, all the products with the price $100 are in a specific list, which is intersected with the rest of the query. See [query execution engine]({{< baseurl >}}develop/interact/search-and-query/administration/design#query-execution-engine) for more information. +Numeric properties are indexed in a special data structure that enables filtering by numeric ranges in an efficient way. One could view a numeric value as a term operating just like an inverted index. For example, all the products with the price $100 are in a specific list, which is intersected with the rest of the query. See [query execution engine]({{< relref "develop/interact/search-and-query/administration/design#query-execution-engine" >}}) for more information. However, in order to filter by a range of prices, you would have to intersect the query with all the distinct prices within that range, or perform a union query. If the range has many values in it, this becomes highly inefficient. @@ -159,7 +159,7 @@ The autocomplete engine (see below for a fuller description) uses a compact trie ## Query language -Simple syntax is supported for complex queries that can be combined together to express complex filtering and matching rules. The query is a text string in the [`FT.SEARCH`]({{< baseurl >}}commands/ft.search/) request that is parsed using a complex query processor. +Simple syntax is supported for complex queries that can be combined together to express complex filtering and matching rules. The query is a text string in the [`FT.SEARCH`]({{< relref "commands/ft.search/" >}}) request that is parsed using a complex query processor. * Multi-word phrases are lists of tokens, e.g., `foo bar baz`, and imply intersection (logical AND) of the terms. * Exact phrases are wrapped in quotes, e.g `"hello world"`. @@ -254,7 +254,7 @@ These are the pre-bundled scoring functions available in Redis Stack: It is possible to bypass the scoring function mechanism and order search results by the value of different document properties (fields) directly, even if the sorting field is not used by the query. For example, you can search for first name and sort by the last name. -When creating the index with [`FT.CREATE`]({{< baseurl >}}commands/ft.create/), you can declare `TEXT`, `TAG`, `NUMERIC`, and `GEO` properties as `SORTABLE`. When a property is sortable, you can later decide to order the results by its values with relatively low latency. When a property is not sortable, it can still be sorted by its values, but may increase latency. For example, the following schema: +When creating the index with [`FT.CREATE`]({{< relref "commands/ft.create/" >}}), you can declare `TEXT`, `TAG`, `NUMERIC`, and `GEO` properties as `SORTABLE`. When a property is sortable, you can later decide to order the results by its values with relatively low latency. When a property is not sortable, it can still be sorted by its values, but may increase latency. For example, the following schema: ``` FT.CREATE users SCHEMA first_name TEXT last_name TEXT SORTABLE age NUMERIC SORTABLE diff --git a/content/develop/interact/search-and-query/advanced-concepts/_index.md b/content/develop/interact/search-and-query/advanced-concepts/_index.md index 2f97fcf3d4..1fae7d0176 100644 --- a/content/develop/interact/search-and-query/advanced-concepts/_index.md +++ b/content/develop/interact/search-and-query/advanced-concepts/_index.md @@ -46,8 +46,8 @@ Redis Stack supports the following Redis Query Engine features. This article pro * [Prefix-based searches]({{< relref "/develop/interact/search-and-query/query/#prefix-matching" >}}) * Field weights -* [Auto-complete]({{< baseurl >}}develop/interact/search-and-query/administration/overview#auto-complete) and fuzzy prefix suggestions -* [Stemming]({{< relref "/develop/interact/search-and-query/advanced-concepts/stemming" >}})-based query expansion for [many languages]({{< baseurl >}}develop/interact/search-and-query/advanced-concepts/stemming#supported-languages) using [Snowball](http://snowballstem.org/) +* [Auto-complete]({{< relref "develop/interact/search-and-query/administration/overview#auto-complete" >}}) and fuzzy prefix suggestions +* [Stemming]({{< relref "/develop/interact/search-and-query/advanced-concepts/stemming" >}})-based query expansion for [many languages]({{< relref "develop/interact/search-and-query/advanced-concepts/stemming#supported-languages" >}}) using [Snowball](http://snowballstem.org/) * Support for custom functions for query expansion and scoring (see [Extensions]({{< relref "/develop/interact/search-and-query/administration/extensions" >}})) * Unicode support (UTF-8 input required) * Document ranking diff --git a/content/develop/interact/search-and-query/advanced-concepts/aggregations.md b/content/develop/interact/search-and-query/advanced-concepts/aggregations.md index 5520acda4b..bfab14d021 100644 --- a/content/develop/interact/search-and-query/advanced-concepts/aggregations.md +++ b/content/develop/interact/search-and-query/advanced-concepts/aggregations.md @@ -482,12 +482,12 @@ FT.CURSOR READ {idx} {cid} [COUNT {read size}] FT.CURSOR DEL {idx} {cid} ``` -You can use cursors with [`FT.AGGREGATE`]({{< baseurl >}}commands/ft.aggregate/), with the `WITHCURSOR` keyword. Cursors allow you to +You can use cursors with [`FT.AGGREGATE`]({{< relref "commands/ft.aggregate/" >}}), with the `WITHCURSOR` keyword. Cursors allow you to consume only part of the response, allowing you to fetch additional results as needed. This is much quicker than using `LIMIT` with offset, since the query is executed only once, and its state is stored on the server. -To use cursors, specify the `WITHCURSOR` keyword in [`FT.AGGREGATE`]({{< baseurl >}}commands/ft.aggregate/). For example: +To use cursors, specify the `WITHCURSOR` keyword in [`FT.AGGREGATE`]({{< relref "commands/ft.aggregate/" >}}). For example: ``` FT.AGGREGATE idx * WITHCURSOR @@ -495,16 +495,16 @@ FT.AGGREGATE idx * WITHCURSOR This will return a response of an array with two elements. The first element is the actual (partial) result, and the second is the cursor ID. The cursor ID -can then be fed to [`FT.CURSOR READ`]({{< baseurl >}}commands/ft.cursor-read/) repeatedly until the cursor ID is 0, in +can then be fed to [`FT.CURSOR READ`]({{< relref "commands/ft.cursor-read/" >}}) repeatedly until the cursor ID is 0, in which case all results have been returned. -To read from an existing cursor, use [`FT.CURSOR READ`]({{< baseurl >}}commands/ft.cursor-read/). For example: +To read from an existing cursor, use [`FT.CURSOR READ`]({{< relref "commands/ft.cursor-read/" >}}). For example: ``` FT.CURSOR READ idx 342459320 ``` -Assuming `342459320` is the cursor ID returned from the [`FT.AGGREGATE`]({{< baseurl >}}commands/ft.aggregate/) request, here is an example in pseudo-code: +Assuming `342459320` is the cursor ID returned from the [`FT.AGGREGATE`]({{< relref "commands/ft.aggregate/" >}}) request, here is an example in pseudo-code: ``` response, cursor = FT.AGGREGATE "idx" "redis" "WITHCURSOR"; @@ -524,8 +524,8 @@ Note that even if the cursor is 0, a partial result may still be returned. #### Read size You can control how many rows are read for each cursor fetch by using the -`COUNT` parameter. This parameter can be specified both in [`FT.AGGREGATE`]({{< baseurl >}}commands/ft.aggregate/) -(immediately after `WITHCURSOR`) or in [`FT.CURSOR READ`]({{< baseurl >}}commands/ft.cursor-read/). +`COUNT` parameter. This parameter can be specified both in [`FT.AGGREGATE`]({{< relref "commands/ft.aggregate/" >}}) +(immediately after `WITHCURSOR`) or in [`FT.CURSOR READ`]({{< relref "commands/ft.cursor-read/" >}}). The following example will read 10 rows at a time: ``` diff --git a/content/develop/interact/search-and-query/advanced-concepts/autocomplete.md b/content/develop/interact/search-and-query/advanced-concepts/autocomplete.md index ff735ac126..f57f057b71 100644 --- a/content/develop/interact/search-and-query/advanced-concepts/autocomplete.md +++ b/content/develop/interact/search-and-query/advanced-concepts/autocomplete.md @@ -20,11 +20,11 @@ weight: 1 Redis Query Engine provides an autocomplete feature using suggestions that are stored in a [trie-based](https://en.wikipedia.org/wiki/Trie) data structure. This feature allows you to store and retrieve ranked suggestions based on user input prefixes, making it useful for applications like search boxes, command completion, and chatbot responses. -This guide covers how to use the [`FT.SUGADD`]({{< baseurl >}}/commands/ft.sugadd), [`FT.SUGGET`]({{< baseurl >}}/commands/ft.sugget), [`FT.SUGDEL`]({{< baseurl >}}/commands/ft.sugdel), and [`FT.SUGLEN`]({{< baseurl >}}/commands/ft.suglen) commands to implement autocomplete, and some examples of how you can use these commands with [`FT.SEARCH`]({{< baseurl >}}/commands/ft.search). +This guide covers how to use the [`FT.SUGADD`]({{< relref "/commands/ft.sugadd" >}}), [`FT.SUGGET`]({{< relref "/commands/ft.sugget" >}}), [`FT.SUGDEL`]({{< relref "/commands/ft.sugdel" >}}), and [`FT.SUGLEN`]({{< relref "/commands/ft.suglen" >}}) commands to implement autocomplete, and some examples of how you can use these commands with [`FT.SEARCH`]({{< relref "/commands/ft.search" >}}). ## Add autocomplete suggestions -To add phrases or words to a suggestions dictionary, use the [`FT.SUGADD`]({{< baseurl >}}/commands/ft.sugadd) command. +To add phrases or words to a suggestions dictionary, use the [`FT.SUGADD`]({{< relref "/commands/ft.sugadd" >}}) command. You will assign a score to each entry, which determines its ranking in the results. ``` @@ -47,7 +47,7 @@ The `FT.SUGADD` command can take two optional arguments: ## Retrieve suggestions -To get autocomplete suggestions for a given prefix, use the [`FT.SUGGET`]({{< baseurl >}}/commands/ft.sugget) command. +To get autocomplete suggestions for a given prefix, use the [`FT.SUGGET`]({{< relref "/commands/ft.sugget" >}}) command. ``` redis> FT.SUGGET autocomplete "he" diff --git a/content/develop/interact/search-and-query/advanced-concepts/dialects.md b/content/develop/interact/search-and-query/advanced-concepts/dialects.md index d2aa6c88c3..847af9775b 100644 --- a/content/develop/interact/search-and-query/advanced-concepts/dialects.md +++ b/content/develop/interact/search-and-query/advanced-concepts/dialects.md @@ -15,7 +15,7 @@ title: Query dialects weight: 5 --- -Redis Stack currently supports four query dialects for use with the [`FT.SEARCH`]({{< baseurl >}}commands/ft.search/), [`FT.AGGREGATE`]({{< baseurl >}}commands/ft.aggregate/), and other Redis Query Engine commands. +Redis Stack currently supports four query dialects for use with the [`FT.SEARCH`]({{< relref "commands/ft.search/" >}}), [`FT.AGGREGATE`]({{< relref "commands/ft.aggregate/" >}}), and other Redis Query Engine commands. Dialects provide for enhancing the query API incrementally, introducing innovative behaviors and new features that support new use cases in a way that does not break the API for existing applications. ## `DIALECT 1` @@ -126,9 +126,9 @@ The Dialect version 2 enhancements also introduce simplified syntax for logical ## `DIALECT 3` -Dialect version 3 was introduced in the [2.6](https://github.com/RediSearch/RediSearch/releases/tag/v2.6.3) release. This version introduced support for multi-value indexing and querying of attributes for any attribute type ( [TEXT]({{< baseurl >}}develop/interact/search-and-query/indexing/#index-json-arrays-as-text), [TAG]({{< baseurl >}}develop/interact/search-and-query/indexing/#index-json-arrays-as-tag), [NUMERIC]({{< baseurl >}}develop/interact/search-and-query/indexing/#index-json-arrays-as-numeric), [GEO]({{< baseurl >}}develop/interact/search-and-query/indexing/#index-json-arrays-as-geo) and [VECTOR]({{< baseurl >}}develop/interact/search-and-query/indexing/#index-json-arrays-as-vector)) defined by a [JSONPath]({{< relref "/develop/data-types/json/path" >}}) leading to an array or multiple scalar values. Support for [GEOSHAPE]({{< relref "/develop/interact/search-and-query/query/geo-spatial" >}}) queries was also introduced in this dialect. +Dialect version 3 was introduced in the [2.6](https://github.com/RediSearch/RediSearch/releases/tag/v2.6.3) release. This version introduced support for multi-value indexing and querying of attributes for any attribute type ( [TEXT]({{< relref "develop/interact/search-and-query/indexing/#index-json-arrays-as-text" >}}), [TAG]({{< relref "develop/interact/search-and-query/indexing/#index-json-arrays-as-tag" >}}), [NUMERIC]({{< relref "develop/interact/search-and-query/indexing/#index-json-arrays-as-numeric" >}}), [GEO]({{< relref "develop/interact/search-and-query/indexing/#index-json-arrays-as-geo" >}}) and [VECTOR]({{< relref "develop/interact/search-and-query/indexing/#index-json-arrays-as-vector" >}})) defined by a [JSONPath]({{< relref "/develop/data-types/json/path" >}}) leading to an array or multiple scalar values. Support for [GEOSHAPE]({{< relref "/develop/interact/search-and-query/query/geo-spatial" >}}) queries was also introduced in this dialect. -The primary difference between dialects version 2 and version 3 is that JSON is returned rather than scalars for multi-value attributes. Apart from specifying `DIALECT 3` at the end of a [`FT.SEARCH`]({{< baseurl >}}commands/ft.search/) command, there are no other syntactic changes. Dialect version 1 remains the default dialect. To use dialect version 3, append `DIALECT 3` to your query command. +The primary difference between dialects version 2 and version 3 is that JSON is returned rather than scalars for multi-value attributes. Apart from specifying `DIALECT 3` at the end of a [`FT.SEARCH`]({{< relref "commands/ft.search/" >}}) command, there are no other syntactic changes. Dialect version 1 remains the default dialect. To use dialect version 3, append `DIALECT 3` to your query command. `FT.SEARCH ... DIALECT 3` @@ -192,7 +192,7 @@ DIALECT 3 is required for shape-based (`POINT` or `POLYGON`) geospatial queries. ## `DIALECT 4` -Dialect version 4 was introduced in the [2.8](https://github.com/RediSearch/RediSearch/releases/tag/v2.8.4) release. It introduces performance optimizations for sorting operations on [`FT.SEARCH`]({{< baseurl >}}commands/ft.search/) and [`FT.AGGREGATE`]({{< baseurl >}}commands/ft.aggregate/). Apart from specifying `DIALECT 4` at the end of a [`FT.SEARCH`]({{< baseurl >}}commands/ft.search/) command, there are no other syntactic changes. Dialect version 1 remains the default dialect. To use dialect version 4, append `DIALECT 4` to your query command. +Dialect version 4 was introduced in the [2.8](https://github.com/RediSearch/RediSearch/releases/tag/v2.8.4) release. It introduces performance optimizations for sorting operations on [`FT.SEARCH`]({{< relref "commands/ft.search/" >}}) and [`FT.AGGREGATE`]({{< relref "commands/ft.aggregate/" >}}). Apart from specifying `DIALECT 4` at the end of a [`FT.SEARCH`]({{< relref "commands/ft.search/" >}}) command, there are no other syntactic changes. Dialect version 1 remains the default dialect. To use dialect version 4, append `DIALECT 4` to your query command. `FT.SEARCH ... DIALECT 4` @@ -205,15 +205,15 @@ Dialect version 4 will improve performance in four different scenarios: ## Use `FT.EXPLAINCLI` to compare dialects -The [`FT.EXPLAINCLI`]({{< baseurl >}}commands/ft.explaincli/) command is a powerful tool that provides a window into the inner workings of your queries. It's like a roadmap that details your query's journey from start to finish. +The [`FT.EXPLAINCLI`]({{< relref "commands/ft.explaincli/" >}}) command is a powerful tool that provides a window into the inner workings of your queries. It's like a roadmap that details your query's journey from start to finish. -When you run [`FT.EXPLAINCLI`]({{< baseurl >}}commands/ft.explaincli/), it returns an array representing the execution plan of a complex query. This plan is a step-by-step guide of how Redis interprets your query and how it plans to fetch results. It's a behind-the-scenes look at the process, giving you insights into how the search engine works. +When you run [`FT.EXPLAINCLI`]({{< relref "commands/ft.explaincli/" >}}), it returns an array representing the execution plan of a complex query. This plan is a step-by-step guide of how Redis interprets your query and how it plans to fetch results. It's a behind-the-scenes look at the process, giving you insights into how the search engine works. -The [`FT.EXPLAINCLI`]({{< baseurl >}}commands/ft.explaincli/) accepts a `DIALECT` argument, allowing you to execute the query using different dialect versions, allowing you to compare the resulting query plans. +The [`FT.EXPLAINCLI`]({{< relref "commands/ft.explaincli/" >}}) accepts a `DIALECT` argument, allowing you to execute the query using different dialect versions, allowing you to compare the resulting query plans. -To use [`FT.EXPLAINCLI`]({{< baseurl >}}commands/ft.explaincli/), you need to provide an index and a query predicate. The index is the name of the index you created using [`FT.CREATE`]({{< baseurl >}}commands/ft.create/), and the query predicate is the same as if you were sending it to [`FT.SEARCH`]({{< baseurl >}}commands/ft.search/) or [`FT.AGGREGATE`]({{< baseurl >}}commands/ft.aggregate/). +To use [`FT.EXPLAINCLI`]({{< relref "commands/ft.explaincli/" >}}), you need to provide an index and a query predicate. The index is the name of the index you created using [`FT.CREATE`]({{< relref "commands/ft.create/" >}}), and the query predicate is the same as if you were sending it to [`FT.SEARCH`]({{< relref "commands/ft.search/" >}}) or [`FT.AGGREGATE`]({{< relref "commands/ft.aggregate/" >}}). -Here's an example of how to use [`FT.EXPLAINCLI`]({{< baseurl >}}commands/ft.explaincli/) to understand differences in dialect versions 1 and 2. +Here's an example of how to use [`FT.EXPLAINCLI`]({{< relref "commands/ft.explaincli/" >}}) to understand differences in dialect versions 1 and 2. Negation of the intersection between tokens `hello` and `world`: @@ -257,7 +257,7 @@ FT.EXPLAINCLI idx:dialects "-(hello world)" DIALECT 2 ``` {{% alert title=Note %}} -[`FT.EXPLAIN`]({{< baseurl >}}commands/ft.explain/) doesn't execute the query. It only explains the plan. It's a way to understand how your query is interpreted by the query engine, which can be invaluable when you're trying to optimize your searches. +[`FT.EXPLAIN`]({{< relref "commands/ft.explain/" >}}) doesn't execute the query. It only explains the plan. It's a way to understand how your query is interpreted by the query engine, which can be invaluable when you're trying to optimize your searches. {{% /alert %}} ## Change the default dialect diff --git a/content/develop/interact/search-and-query/advanced-concepts/query_syntax.md b/content/develop/interact/search-and-query/advanced-concepts/query_syntax.md index f1bcc52863..3a537e83c6 100644 --- a/content/develop/interact/search-and-query/advanced-concepts/query_syntax.md +++ b/content/develop/interact/search-and-query/advanced-concepts/query_syntax.md @@ -176,13 +176,13 @@ There is a new schema field type called `GEOSHAPE`, which can be specified as ei - `FLAT` for Cartesian X Y coordinates - `SPHERICAL` for geographic longitude and latitude coordinates. This is the default coordinate system. -Finally, there's new [`FT.SEARCH`]({{< baseurl >}}commands/ft.search/) syntax that allows you to query for polygons that either contain or are within a given geoshape. +Finally, there's new [`FT.SEARCH`]({{< relref "commands/ft.search/" >}}) syntax that allows you to query for polygons that either contain or are within a given geoshape. `@field:[{WITHIN|CONTAINS} $geometry] PARAMS 2 geometry {geometry}` Here's an example using two stacked polygons that represent a box contained within a house. -![two stacked polygons]({{< baseurl >}}develop/interact/search-and-query/img/polygons.png) +![two stacked polygons]({{< relref "develop/interact/search-and-query/img/polygons.png" >}}) First, create an index using a `FLAT` `GEOSHAPE`, representing a 2D X Y coordinate system. @@ -194,7 +194,7 @@ Next, create the data structures that represent the geometries in the picture. HSET shape:1 t "this is my house" g "POLYGON((2 2, 2 8, 6 11, 10 8, 10 2, 2 2))" HSET shape:2 t "this is a square in my house" g "POLYGON((4 4, 4 6, 6 6, 6 4, 4 4))" ``` -Finally, use [`FT.SEARCH`]({{< baseurl >}}commands/ft.search/) to query the geometries. Note the use of `DIALECT 3`, which is required. Here are a few examples. +Finally, use [`FT.SEARCH`]({{< relref "commands/ft.search/" >}}) to query the geometries. Note the use of `DIALECT 3`, which is required. Here are a few examples. Search for a polygon that contains a specified point: @@ -255,7 +255,7 @@ Note that both the house and box shapes were returned. GEOSHAPE does not support JSON multi-value or SORTABLE options. {{< /alert >}} -For more examples, see the [`FT.CREATE`]({{< baseurl >}}commands/ft.create/) and [`FT.SEARCH`]({{< baseurl >}}commands/ft.search/) command pages. +For more examples, see the [`FT.CREATE`]({{< relref "commands/ft.create/" >}}) and [`FT.SEARCH`]({{< relref "commands/ft.search/" >}}) command pages. ## Vector search @@ -281,7 +281,7 @@ The general syntax for hybrid query is `{some filter query}=>[ KNN {num|$num} @v `@vector_field:[VECTOR_RANGE 0.5 $query_vec]` -As of v2.4, the KNN vector search can be used at most once in a query, while, as of v2.6, the vector range filter can be used multiple times in a query. For more information on vector similarity syntax, see [Querying vector fields]({{< relref "/develop/interact/search-and-query/advanced-concepts/vectors" >}}), and [Vector search examples]({{< baseurl >}}develop/interact/search-and-query/advanced-concepts/vectors#vector-search-examples) sections. +As of v2.4, the KNN vector search can be used at most once in a query, while, as of v2.6, the vector range filter can be used multiple times in a query. For more information on vector similarity syntax, see [Querying vector fields]({{< relref "/develop/interact/search-and-query/advanced-concepts/vectors" >}}), and [Vector search examples]({{< relref "develop/interact/search-and-query/advanced-concepts/vectors#vector-search-examples" >}}) sections. ## Prefix matching @@ -388,7 +388,7 @@ The supported attributes are: As of v2.6.1, the query attributes syntax supports these additional attributes: * **$yield_distance_as**: specifies the distance field name, used for later sorting and/or returning, for clauses that yield some distance metric. It is currently supported for vector queries only (both KNN and range). -* **vector query params**: pass optional parameters for [vector queries]({{< baseurl >}}develop/interact/search-and-query/advanced-concepts/vectors#querying-vector-fields) in key-value format. +* **vector query params**: pass optional parameters for [vector queries]({{< relref "develop/interact/search-and-query/advanced-concepts/vectors#querying-vector-fields" >}}) in key-value format. ## A few query examples @@ -478,4 +478,4 @@ As of v2.6.1, the query attributes syntax supports these additional attributes: The query parser is built using the Lemon Parser Generator and a Ragel based lexer. You can see the `DIALECT 2` grammar definition [at this git repo](https://github.com/RediSearch/RediSearch/blob/master/src/query_parser/v2/parser.y). -You can also see the [DEFAULT_DIALECT]({{< baseurl >}}develop/interact/search-and-query/basic-constructs/configuration-parameters#default_dialect) configuration parameter. +You can also see the [DEFAULT_DIALECT]({{< relref "develop/interact/search-and-query/basic-constructs/configuration-parameters#default_dialect" >}}) configuration parameter. diff --git a/content/develop/interact/search-and-query/advanced-concepts/scoring.md b/content/develop/interact/search-and-query/advanced-concepts/scoring.md index 3dce6ed713..aaf687f66c 100644 --- a/content/develop/interact/search-and-query/advanced-concepts/scoring.md +++ b/content/develop/interact/search-and-query/advanced-concepts/scoring.md @@ -21,7 +21,7 @@ Redis Stack comes with a few very basic scoring functions to evaluate document r If you prefer a custom scoring function, it is possible to add more functions using the [extension API]({{< relref "/develop/interact/search-and-query/administration/extensions" >}}). -The following is a list of the pre-bundled scoring functions available in Redis Stack and a short explanation about how they work. Each function is mentioned by registered name, which can be passed as a `SCORER` argument in [`FT.SEARCH`]({{< baseurl >}}commands/ft.search/). +The following is a list of the pre-bundled scoring functions available in Redis Stack and a short explanation about how they work. Each function is mentioned by registered name, which can be passed as a `SCORER` argument in [`FT.SEARCH`]({{< relref "commands/ft.search/" >}}). ## TFIDF (default) diff --git a/content/develop/interact/search-and-query/advanced-concepts/sorting.md b/content/develop/interact/search-and-query/advanced-concepts/sorting.md index 5d08a38388..56e6dd45f2 100644 --- a/content/develop/interact/search-and-query/advanced-concepts/sorting.md +++ b/content/develop/interact/search-and-query/advanced-concepts/sorting.md @@ -19,7 +19,7 @@ As of RediSearch 0.15, you can bypass the scoring function mechanism and order s ## Declaring sortable fields -When creating an index with [`FT.CREATE`]({{< baseurl >}}commands/ft.create/), you can declare `TEXT`, `TAG`, `NUMERIC`, and `GEO` attributes as `SORTABLE`. When an attribute is sortable, you can order the results by its values with relatively low latency. When an attribute is not sortable, it can still be sorted by its values, but with increased latency. For example, in the following schema: +When creating an index with [`FT.CREATE`]({{< relref "commands/ft.create/" >}}), you can declare `TEXT`, `TAG`, `NUMERIC`, and `GEO` attributes as `SORTABLE`. When an attribute is sortable, you can order the results by its values with relatively low latency. When an attribute is not sortable, it can still be sorted by its values, but with increased latency. For example, in the following schema: ``` FT.CREATE users SCHEMA first_name TEXT last_name TEXT SORTABLE age NUMERIC SORTABLE diff --git a/content/develop/interact/search-and-query/advanced-concepts/spellcheck.md b/content/develop/interact/search-and-query/advanced-concepts/spellcheck.md index 9ead5e1b26..f3e86e196a 100644 --- a/content/develop/interact/search-and-query/advanced-concepts/spellcheck.md +++ b/content/develop/interact/search-and-query/advanced-concepts/spellcheck.md @@ -25,11 +25,11 @@ In such cases, and as of v1.4, RediSearch can be used for generating alternative The alternatives for a misspelled term are generated from the corpus of already-indexed terms and, optionally, one or more custom dictionaries. Alternatives become spelling suggestions based on their respective Levenshtein distances from the misspelled term. Each spelling suggestion is given a normalized score based on its occurrences in the index. -To obtain the spelling corrections for a query, refer to the documentation of the [`FT.SPELLCHECK`]({{< baseurl >}}commands/ft.spellcheck/) command. +To obtain the spelling corrections for a query, refer to the documentation of the [`FT.SPELLCHECK`]({{< relref "commands/ft.spellcheck/" >}}) command. ## Custom dictionaries -A dictionary is a set of terms. Dictionaries can be added with terms, have terms deleted from them, and have their entire contents dumped using the [`FT.DICTADD`]({{< baseurl >}}commands/ft.dictadd/), [`FT.DICTDEL`]({{< baseurl >}}commands/ft.dictdel/) and [`FT.DICTDUMP`]({{< baseurl >}}commands/ft.dictdump/) commands, respectively. +A dictionary is a set of terms. Dictionaries can be added with terms, have terms deleted from them, and have their entire contents dumped using the [`FT.DICTADD`]({{< relref "commands/ft.dictadd/" >}}), [`FT.DICTDEL`]({{< relref "commands/ft.dictdel/" >}}) and [`FT.DICTDUMP`]({{< relref "commands/ft.dictdump/" >}}) commands, respectively. Dictionaries can be used to modify the behavior of spelling corrections by including or excluding their contents from potential spelling correction suggestions. diff --git a/content/develop/interact/search-and-query/advanced-concepts/stemming.md b/content/develop/interact/search-and-query/advanced-concepts/stemming.md index 02cac9af90..7cdf9b58b1 100644 --- a/content/develop/interact/search-and-query/advanced-concepts/stemming.md +++ b/content/develop/interact/search-and-query/advanced-concepts/stemming.md @@ -27,7 +27,7 @@ For further details see the [Snowball Stemmer website](https://snowballstem.org/ Stemming maps different forms of the same word to a common root - "stem" - for example, the English stemmer maps *studied* ,*studies* and *study* to *studi* . So a searching for *studied* would also find documents which only have the other forms. -In order to define which language the Stemmer should apply when building the index, you need to specify the `LANGUAGE` parameter for the entire index or for the specific field. For more details check the [FT.CREATE]({{< baseurl >}}develop/commands/ft.create) syntax. +In order to define which language the Stemmer should apply when building the index, you need to specify the `LANGUAGE` parameter for the entire index or for the specific field. For more details check the [FT.CREATE]({{< relref "develop/commands/ft.create" >}}) syntax. **Create a index with language definition** diff --git a/content/develop/interact/search-and-query/advanced-concepts/stopwords.md b/content/develop/interact/search-and-query/advanced-concepts/stopwords.md index e8963654bb..f6b56ed328 100644 --- a/content/develop/interact/search-and-query/advanced-concepts/stopwords.md +++ b/content/develop/interact/search-and-query/advanced-concepts/stopwords.md @@ -33,7 +33,7 @@ The following words are treated as stop words by default: ## Overriding the default stop word list -Stop words for an index can be defined (or disabled completely) on index creation using the `STOPWORDS` argument with the [[`FT.CREATE`]({{< baseurl >}}commands/ft.create/) command. +Stop words for an index can be defined (or disabled completely) on index creation using the `STOPWORDS` argument with the [[`FT.CREATE`]({{< relref "commands/ft.create/" >}}) command. The format is `STOPWORDS {number} {stopword} ...` where number is the number of stop words given. The `STOPWORDS` argument must come before the `SCHEMA` argument. For example: @@ -43,7 +43,7 @@ FT.CREATE myIndex STOPWORDS 3 foo bar baz SCHEMA title TEXT body TEXT ## Disable the use of stop words -Disabling stop words completely can be done by passing `STOPWORDS 0` to [`FT.CREATE`]({{< baseurl >}}commands/ft.create/). +Disabling stop words completely can be done by passing `STOPWORDS 0` to [`FT.CREATE`]({{< relref "commands/ft.create/" >}}). ## Avoiding stop word detection in search queries diff --git a/content/develop/interact/search-and-query/advanced-concepts/vectors.md b/content/develop/interact/search-and-query/advanced-concepts/vectors.md index b55c9ca4f8..a2703b8c38 100644 --- a/content/develop/interact/search-and-query/advanced-concepts/vectors.md +++ b/content/develop/interact/search-and-query/advanced-concepts/vectors.md @@ -18,16 +18,16 @@ weight: 14 Redis includes a [high-performance vector database](https://redis.io/blog/benchmarking-results-for-vector-databases/) that lets you perform semantic searches over vector embeddings. You can augment these searches with filtering over text, numerical, geospatial, and tag metadata. -To quickly get started, check out the [Redis vector quickstart guide]({{< baseurl >}}develop/get-started/vector-database) and the [Redis AI Resources](https://github.com/redis-developer/redis-ai-resources) Github repo. +To quickly get started, check out the [Redis vector quickstart guide]({{< relref "develop/get-started/vector-database" >}}) and the [Redis AI Resources](https://github.com/redis-developer/redis-ai-resources) Github repo. ## Overview -1. [**Create a vector index**]({{< baseurl >}}develop/interact/search-and-query/advanced-concepts/vectors#create-a-vector-index): Redis maintains a secondary index over your data with a defined schema (including vector fields and metadata). Redis supports [`FLAT`]({{< baseurl >}}develop/interact/search-and-query/advanced-concepts/vectors#flat-index) and [`HNSW`]({{< baseurl >}}develop/interact/search-and-query/advanced-concepts/vectors#hnsw-index) vector index types. -1. [**Store and update vectors**]({{< baseurl >}}develop/interact/search-and-query/advanced-concepts/vectors#store-and-update-vectors): Redis stores vectors and metadata in hashes or JSON objects. -1. [**Search with vectors**]({{< baseurl >}}develop/interact/search-and-query/advanced-concepts/vectors#search-with-vectors): Redis supports several advanced querying strategies with vector fields including k-nearest neighbor ([KNN]({{< baseurl >}}develop/interact/search-and-query/advanced-concepts/vectors#knn-vector-search)), [vector range queries]({{< baseurl >}}develop/interact/search-and-query/advanced-concepts/vectors#vector-range-queries), and [metadata filters]({{< baseurl >}}develop/interact/search-and-query/advanced-concepts/vectors#filters). -1. [**Configure vector queries at runtime**]({{< baseurl >}}develop/interact/search-and-query/advanced-concepts/vectors#runtime-query-params). -1. [**Vector search examples**]({{< baseurl >}}develop/interact/search-and-query/advanced-concepts/vectors#vector-search-examples): Explore several vector search examples that cover different use cases and techniques. +1. [**Create a vector index**]({{< relref "develop/interact/search-and-query/advanced-concepts/vectors#create-a-vector-index" >}}): Redis maintains a secondary index over your data with a defined schema (including vector fields and metadata). Redis supports [`FLAT`]({{< relref "develop/interact/search-and-query/advanced-concepts/vectors#flat-index" >}}) and [`HNSW`]({{< relref "develop/interact/search-and-query/advanced-concepts/vectors#hnsw-index" >}}) vector index types. +1. [**Store and update vectors**]({{< relref "develop/interact/search-and-query/advanced-concepts/vectors#store-and-update-vectors" >}}): Redis stores vectors and metadata in hashes or JSON objects. +1. [**Search with vectors**]({{< relref "develop/interact/search-and-query/advanced-concepts/vectors#search-with-vectors" >}}): Redis supports several advanced querying strategies with vector fields including k-nearest neighbor ([KNN]({{< relref "develop/interact/search-and-query/advanced-concepts/vectors#knn-vector-search" >}})), [vector range queries]({{< relref "develop/interact/search-and-query/advanced-concepts/vectors#vector-range-queries" >}}), and [metadata filters]({{< relref "develop/interact/search-and-query/advanced-concepts/vectors#filters" >}}). +1. [**Configure vector queries at runtime**]({{< relref "develop/interact/search-and-query/advanced-concepts/vectors#runtime-query-params" >}}). +1. [**Vector search examples**]({{< relref "develop/interact/search-and-query/advanced-concepts/vectors#vector-search-examples" >}}): Explore several vector search examples that cover different use cases and techniques. ## Create a vector index @@ -43,7 +43,7 @@ FT.CREATE [ ...] ``` -Refer to the full [indexing]({{< baseurl >}}develop/interact/search-and-query/indexing/) documentation for additional fields, options, and noted limitations. +Refer to the full [indexing]({{< relref "develop/interact/search-and-query/indexing/" >}}) documentation for additional fields, options, and noted limitations. **Parameters** @@ -145,7 +145,7 @@ On index creation, the `` dictates how vector and metadata are str ### Hash -Store or update vectors and any metadata in [hashes]({{< baseurl >}}develop/data-types/hashes/) using the [`HSET`]({{< baseurl >}}commands/hset/) command. +Store or update vectors and any metadata in [hashes]({{< relref "develop/data-types/hashes/" >}}) using the [`HSET`]({{< relref "commands/hset/" >}}) command. **Example** @@ -182,7 +182,7 @@ The vector blob size must match the dimension and float type of the vector field {{% /alert %}} ### JSON -You can store or update vectors and any associated metadata in [JSON]({{< baseurl >}}develop/data-types/json/) using the [`JSON.SET`]({{< baseurl >}}commands/json.set/) command. +You can store or update vectors and any associated metadata in [JSON]({{< relref "develop/data-types/json/" >}}) using the [`JSON.SET`]({{< relref "commands/json.set/" >}}) command. To store vectors in Redis as JSON, you store the vector as a JSON array of floats. Note that this differs from vector storage in Redis hashes, which are instead stored as raw bytes. @@ -204,11 +204,11 @@ JSON.SET docs:01 $ '{"doc_embedding":[[1,2,3,4], [5,6,7,8]]}' JSON.SET docs:01 $ '{"chunk1":{"doc_embedding":[1,2,3,4]}, "chunk2":{"doc_embedding":[5,6,7,8]}}' ``` -Additional information and examples are available in the [Indexing JSON documents]({{< baseurl >}}develop/interact/search-and-query/indexing/#index-json-arrays-as-vector) section. +Additional information and examples are available in the [Indexing JSON documents]({{< relref "develop/interact/search-and-query/indexing/#index-json-arrays-as-vector" >}}) section. ## Search with vectors -You can run vector search queries with the [`FT.SEARCH`]({{< baseurl >}}commands/ft.search/) or [`FT.AGGREGATE`]({{< baseurl >}}commands/ft.aggregate/) commands. +You can run vector search queries with the [`FT.SEARCH`]({{< relref "commands/ft.search/" >}}) or [`FT.AGGREGATE`]({{< relref "commands/ft.aggregate/" >}}) commands. To issue a vector search query with `FT.SEARCH`, you must set the `DIALECT` option to >= `2`. See the [dialects documentation]({{< relref "/develop/interact/search-and-query/advanced-concepts/dialects" >}}) for more information. @@ -230,11 +230,11 @@ FT.SEARCH | Parameter | Description | |:------------------|:--------------------------------------------------------------------------------------------------| | `index_name` | Name of the index. | -| `primary_filter_query` | [Filter]({{< baseurl >}}develop/interact/search-and-query/advanced-concepts/vectors#filters) criteria. Use `*` when no filters are required. | +| `primary_filter_query` | [Filter]({{< relref "develop/interact/search-and-query/advanced-concepts/vectors#filters" >}}) criteria. Use `*` when no filters are required. | | `top_k` | Number of nearest neighbors to fetch from the index. | | `vector_field` | Name of the vector field to search against. | | `vector_blob_param` | The query vector, passed in as a blob of raw bytes. The blob's byte size must match the vector field's dimensions and type. | -| `vector_query_params` (optional) | An optional section for marking one or more vector query parameters passed through the `PARAMS` section. Valid parameters should be provided as key-value pairs. See which [runtime query params]({{< baseurl >}}develop/interact/search-and-query/advanced-concepts/vectors#runtime-query-params) are supported for each vector index type. | +| `vector_query_params` (optional) | An optional section for marking one or more vector query parameters passed through the `PARAMS` section. Valid parameters should be provided as key-value pairs. See which [runtime query params]({{< relref "develop/interact/search-and-query/advanced-concepts/vectors#runtime-query-params" >}}) are supported for each vector index type. | | `distance_field` (optional) | The optional distance field name used in the response and/or for sorting. By default, the distance field name is `___score` and it can be used for sorting without using `AS ` in the query. | | `vector_query_params_count` | The number of vector query parameters. | | `vector_query_param_name` | The name of the vector query parameter. | @@ -281,7 +281,7 @@ FT.SEARCH | `vector_field` | Name of the vector field in the index. | | `radius` or `radius_param` | The maximum semantic distance allowed between the query vector and indexed vectors. You can provide the value directly in the query, passed to the `PARAMS` section, or as a query attribute. | `vector_blob_param` | The query vector, passed in as a blob of raw bytes. The blob's byte size must match the vector field's dimensions and type. | -| `vector_query_params` (optional) | An optional section for marking one or more vector query parameters passed through the `PARAMS` section. Valid parameters should be provided as key-value pairs. See which [runtime query params]({{< baseurl >}}develop/interact/search-and-query/advanced-concepts/vectors#runtime-query-params) are supported for each vector index type. | +| `vector_query_params` (optional) | An optional section for marking one or more vector query parameters passed through the `PARAMS` section. Valid parameters should be provided as key-value pairs. See which [runtime query params]({{< relref "develop/interact/search-and-query/advanced-concepts/vectors#runtime-query-params" >}}) are supported for each vector index type. | | `vector_query_params_count` | The number of vector query parameters. | | `vector_query_param_name` | The name of the vector query parameter. | | `vector_query_param_value` | The value of the vector query parameter. | @@ -392,7 +392,7 @@ Optional runtime parameters for HNSW indexes are: ## Vector search examples -Below are a number of examples to help you get started. For more comprehensive walkthroughs, see the [Redis vector quickstart guide]({{< baseurl >}}develop/get-started/vector-database) and the [Redis AI Resources](https://github.com/redis-developer/redis-ai-resources) Github repo. +Below are a number of examples to help you get started. For more comprehensive walkthroughs, see the [Redis vector quickstart guide]({{< relref "develop/get-started/vector-database" >}}) and the [Redis AI Resources](https://github.com/redis-developer/redis-ai-resources) Github repo. ### KNN vector search examples @@ -402,7 +402,7 @@ Return the 10 nearest neighbor documents for which the `doc_embedding` vector fi FT.SEARCH documents "*=>[KNN 10 @doc_embedding $BLOB]" PARAMS 2 BLOB "\x12\xa9\xf5\x6c" SORTBY __vector_score DIALECT 4 ``` -Return the top 10 nearest neighbors and customize the `K` and `EF_RUNTIME` parameters using query parameters. See the "Optional arguments" section in [FT.SEARCH command]({{< baseurl >}}commands/ft.search). Set the `EF_RUNTIME` value to 150, assuming `doc_embedding` is an `HNSW` index: +Return the top 10 nearest neighbors and customize the `K` and `EF_RUNTIME` parameters using query parameters. See the "Optional arguments" section in [FT.SEARCH command]({{< relref "commands/ft.search" >}}). Set the `EF_RUNTIME` value to 150, assuming `doc_embedding` is an `HNSW` index: ``` FT.SEARCH documents "*=>[KNN $K @doc_embedding $BLOB EF_RUNTIME $EF]" PARAMS 6 BLOB "\x12\xa9\xf5\x6c" K 10 EF 150 DIALECT 4 @@ -414,7 +414,7 @@ Assign a custom name to the distance field (`vector_distance`) and then sort usi FT.SEARCH documents "*=>[KNN 10 @doc_embedding $BLOB AS vector_distance]" PARAMS 2 BLOB "\x12\xa9\xf5\x6c" SORTBY vector_distance DIALECT 4 ``` -Use [query attributes]({{< baseurl >}}develop/interact/search-and-query/advanced-concepts/query_syntax#query-attributes) syntax to specify optional parameters and the distance field name: +Use [query attributes]({{< relref "develop/interact/search-and-query/advanced-concepts/query_syntax#query-attributes" >}}) syntax to specify optional parameters and the distance field name: ``` FT.SEARCH documents "*=>[KNN 10 @doc_embedding $BLOB]=>{$EF_RUNTIME: $EF; $YIELD_DISTANCE_AS: vector_distance}" PARAMS 4 EF 150 BLOB "\x12\xa9\xf5\x6c" SORTBY vector_distance DIALECT 4 diff --git a/content/develop/interact/search-and-query/basic-constructs/configuration-parameters.md b/content/develop/interact/search-and-query/basic-constructs/configuration-parameters.md index 875a54e1f0..8cb709f5e7 100644 --- a/content/develop/interact/search-and-query/basic-constructs/configuration-parameters.md +++ b/content/develop/interact/search-and-query/basic-constructs/configuration-parameters.md @@ -58,7 +58,7 @@ FT.CONFIG GET OPT1 FT.CONFIG GET * ``` -Values set using [`FT.CONFIG SET`]({{< baseurl >}}commands/ft.config-set/) are not persisted after server restart. +Values set using [`FT.CONFIG SET`]({{< relref "commands/ft.config-set/" >}}) are not persisted after server restart. ## RediSearch configuration parameters @@ -266,7 +266,7 @@ $ redis-server --loadmodule ./redisearch.so MAXDOCTABLESIZE 3000000 ### MAXSEARCHRESULTS -The maximum number of results to be returned by the [`FT.SEARCH`]({{< baseurl >}}commands/ft.search/) command if LIMIT is used. +The maximum number of results to be returned by the [`FT.SEARCH`]({{< relref "commands/ft.search/" >}}) command if LIMIT is used. Setting value to `-1` will remove the limit. #### Default @@ -283,7 +283,7 @@ $ redis-server --loadmodule ./redisearch.so MAXSEARCHRESULTS 3000000 ### MAXAGGREGATERESULTS -The maximum number of results to be returned by the [`FT.AGGREGATE`]({{< baseurl >}}commands/ft.aggregate/) command if LIMIT is used. +The maximum number of results to be returned by the [`FT.AGGREGATE`]({{< relref "commands/ft.aggregate/" >}}) command if LIMIT is used. Setting value to `-1` will remove the limit. #### Default @@ -300,7 +300,7 @@ $ redis-server --loadmodule ./redisearch.so MAXAGGREGATERESULTS 3000000 ### FRISOINI -If present, load the custom Chinese dictionary from the specified path. See [Using custom dictionaries]({{< baseurl >}}develop/interact/search-and-query/advanced-concepts/chinese#using-custom-dictionaries) for more details. +If present, load the custom Chinese dictionary from the specified path. See [Using custom dictionaries]({{< relref "develop/interact/search-and-query/advanced-concepts/chinese#using-custom-dictionaries" >}}) for more details. #### Default @@ -316,7 +316,7 @@ $ redis-server --loadmodule ./redisearch.so FRISOINI /opt/dict/friso.ini ### CURSOR_MAX_IDLE -The maximum idle time (in ms) that can be set to the [cursor api]({{< baseurl >}}develop/interact/search-and-query/advanced-concepts/aggregations#cursor-api). +The maximum idle time (in ms) that can be set to the [cursor api]({{< relref "develop/interact/search-and-query/advanced-concepts/aggregations#cursor-api" >}}). #### Default @@ -497,11 +497,11 @@ $ redis-server --loadmodule ./redisearch.so GC_POLICY FORK FORK_GC_CLEAN_THRESHO ### UPGRADE_INDEX -This configuration is a special configuration option introduced to upgrade indices from v1.x RediSearch versions, otherwise known as legacy indices. This configuration option needs to be given for each legacy index, followed by the index name and all valid options for the index description (also referred to as the `ON` arguments for following hashes) as described on [ft.create api]({{< baseurl >}}commands/ft.create/). +This configuration is a special configuration option introduced to upgrade indices from v1.x RediSearch versions, otherwise known as legacy indices. This configuration option needs to be given for each legacy index, followed by the index name and all valid options for the index description (also referred to as the `ON` arguments for following hashes) as described on [ft.create api]({{< relref "commands/ft.create/" >}}). #### Default -There is no default for index name, and the other arguments have the same defaults as with the [`FT.CREATE`]({{< baseurl >}}commands/ft.create/) API. +There is no default for index name, and the other arguments have the same defaults as with the [`FT.CREATE`]({{< relref "commands/ft.create/" >}}) API. #### Example @@ -545,7 +545,7 @@ $ redis-server --loadmodule ./redisearch.so OSS_GLOBAL_PASSWORD password The default [DIALECT]({{< relref "/develop/interact/search-and-query/advanced-concepts/dialects" >}}) -to be used by [`FT.CREATE`]({{< baseurl >}}commands/ft.create/), [`FT.AGGREGATE`]({{< baseurl >}}commands/ft.aggregate/), [`FT.EXPLAIN`]({{< baseurl >}}commands/ft.explain/), [`FT.EXPLAINCLI`]({{< baseurl >}}commands/ft.explaincli/), and [`FT.SPELLCHECK`]({{< baseurl >}}commands/ft.spellcheck/). +to be used by [`FT.CREATE`]({{< relref "commands/ft.create/" >}}), [`FT.AGGREGATE`]({{< relref "commands/ft.aggregate/" >}}), [`FT.EXPLAIN`]({{< relref "commands/ft.explain/" >}}), [`FT.EXPLAINCLI`]({{< relref "commands/ft.explaincli/" >}}), and [`FT.SPELLCHECK`]({{< relref "commands/ft.spellcheck/" >}}). See [Query dialects]({{< relref "/develop/interact/search-and-query/advanced-concepts/dialects" >}}) for more information. @@ -563,7 +563,7 @@ $ redis-server --loadmodule ./redisearch.so DEFAULT_DIALECT 2 ### VSS_MAX_RESIZE -The maximum memory resize for vector similarity indexes in bytes. This value will override default memory limits if you need to allow for a large [`BLOCK_SIZE`]({{< baseurl >}}develop/interact/search-and-query/advanced-concepts/vectors/#creation-attributes-per-algorithm). +The maximum memory resize for vector similarity indexes in bytes. This value will override default memory limits if you need to allow for a large [`BLOCK_SIZE`]({{< relref "develop/interact/search-and-query/advanced-concepts/vectors/#creation-attributes-per-algorithm" >}}). #### Default @@ -582,13 +582,13 @@ $ redis-server --loadmodule ./redisearch.so VSS_MAX_RESIZE 52428800 # 50MB {{% /alert %}} ### INDEX_CURSOR_LIMIT -The maximum number of cursors that can be opened, per shard, at any given time. Cursors can be opened by the user via [`FT.AGGREGATE WITHCURSOR`]({{< baseurl >}}commands/ft.aggregate/). Cursors are also opened internally by the Redis Query Engine for long-running queries. Once `INDEX_CURSOR_LIMIT` is reached, any further attempts at opening a cursor will result in an error. +The maximum number of cursors that can be opened, per shard, at any given time. Cursors can be opened by the user via [`FT.AGGREGATE WITHCURSOR`]({{< relref "commands/ft.aggregate/" >}}). Cursors are also opened internally by the Redis Query Engine for long-running queries. Once `INDEX_CURSOR_LIMIT` is reached, any further attempts at opening a cursor will result in an error. {{% alert title="Notes" color="info" %}} * Caution should be used in modifying this parameter. Every open cursor results in additional memory usage. -* Cursor usage should be regulated first by use of [`FT.CURSOR DEL`]({{< baseurl >}}commands/ft.cursor-del/) and/or [`MAXIDLE`]({{< baseurl >}}commands/ft.aggregate/) prior to modifying `INDEX_CURSOR_LIMIT` -* See [Cursor API]({{< baseurl >}}develop/interact/search-and-query/advanced-concepts/aggregations#cursor-api) for more details. +* Cursor usage should be regulated first by use of [`FT.CURSOR DEL`]({{< relref "commands/ft.cursor-del/" >}}) and/or [`MAXIDLE`]({{< relref "commands/ft.aggregate/" >}}) prior to modifying `INDEX_CURSOR_LIMIT` +* See [Cursor API]({{< relref "develop/interact/search-and-query/advanced-concepts/aggregations#cursor-api" >}}) for more details. * Added in 2.10.8 {{% /alert %}} diff --git a/content/develop/interact/search-and-query/basic-constructs/field-and-type-options.md b/content/develop/interact/search-and-query/basic-constructs/field-and-type-options.md index 783f1bab13..578fc5dd7d 100644 --- a/content/develop/interact/search-and-query/basic-constructs/field-and-type-options.md +++ b/content/develop/interact/search-and-query/basic-constructs/field-and-type-options.md @@ -22,7 +22,7 @@ Redis Stack provides various field types that allow you to store and search diff Numeric fields are used to store non-textual, countable values. They can hold integer or floating-point values. Numeric fields are sortable, meaning you can perform range-based queries and retrieve documents based on specific numeric conditions. For example, you can search for documents with a price between a certain range or retrieve documents with a specific rating value. -You can add number fields to a schema in [`FT.CREATE`]({{< baseurl >}}commands/ft.create/) using this syntax: +You can add number fields to a schema in [`FT.CREATE`]({{< relref "commands/ft.create/" >}}) using this syntax: ``` FT.CREATE ... SCHEMA ... {field_name} NUMERIC [SORTABLE] [NOINDEX] @@ -71,7 +71,7 @@ geospatial queries. See the [Geospatial]({{< relref "/develop/interact/search-and-query/advanced-concepts/geo" >}}) reference page for an introduction to the format and usage of both schema types. -You can add geo fields to the schema in [`FT.CREATE`]({{< baseurl >}}commands/ft.create/) using this syntax: +You can add geo fields to the schema in [`FT.CREATE`]({{< relref "commands/ft.create/" >}}) using this syntax: ``` FT.CREATE ... SCHEMA ... {field_name} GEO [SORTABLE] [NOINDEX] @@ -108,7 +108,7 @@ reference page for an introduction to the format and usage of both the geoshape and geo schema types. Add geoshape fields to the schema in -[`FT.CREATE`]({{< baseurl >}}commands/ft.create/) using the following syntax: +[`FT.CREATE`]({{< relref "commands/ft.create/" >}}) using the following syntax: ``` FT.CREATE ... SCHEMA ... {field_name} GEOSHAPE [FLAT|SPHERICAL] [NOINDEX] @@ -142,7 +142,7 @@ for more information and code examples. Vector fields are floating-point vectors that are typically generated by external machine learning models. These vectors represent unstructured data such as text, images, or other complex features. Redis Stack allows you to search for similar vectors using vector search algorithms like cosine similarity, Euclidean distance, and inner product. This enables you to build advanced search applications, recommendation systems, or content similarity analysis. -You can add vector fields to the schema in [`FT.CREATE`]({{< baseurl >}}commands/ft.create/) using this syntax: +You can add vector fields to the schema in [`FT.CREATE`]({{< relref "commands/ft.create/" >}}) using this syntax: ``` FT.CREATE ... SCHEMA ... {field_name} VECTOR {algorithm} {count} [{attribute_name} {attribute_value} ...] diff --git a/content/develop/interact/search-and-query/basic-constructs/schema-definition.md b/content/develop/interact/search-and-query/basic-constructs/schema-definition.md index 5f5bde5587..a0571edad0 100644 --- a/content/develop/interact/search-and-query/basic-constructs/schema-definition.md +++ b/content/develop/interact/search-and-query/basic-constructs/schema-definition.md @@ -34,7 +34,7 @@ SCHEMA In this example, a schema is defined for an index named `idx` that will index all hash documents whose keyname starts with `blog:post:`. The schema includes the fields `title`, `content`, `author`, `created_date`, and `views`. The `TEXT` type indicates that the `title` and `content` fields are text-based, the `TAG` type is used for the `author` field, and the `NUMERIC` type is used for the `created_date` and `views` fields. Additionally, a weight of 5.0 is assigned to the `title` field to give it more relevance in search results, and `created_date` is marked as `SORTABLE` to enable sorting based on this field. -You can learn more about the available field types and options on the [`FT.CREATE`]({{< baseurl >}}commands/ft.create/) page. +You can learn more about the available field types and options on the [`FT.CREATE`]({{< relref "commands/ft.create/" >}}) page. ## More schema definition examples @@ -116,4 +116,4 @@ SCHEMA ``` -You can learn more about the available field types and options on the [`FT.CREATE`]({{< baseurl >}}commands/ft.create/) page. \ No newline at end of file +You can learn more about the available field types and options on the [`FT.CREATE`]({{< relref "commands/ft.create/" >}}) page. \ No newline at end of file diff --git a/content/develop/interact/search-and-query/best-practices/dev-to-prod-best-practices.md b/content/develop/interact/search-and-query/best-practices/dev-to-prod-best-practices.md index 8775c4cca1..dd3208fa2a 100644 --- a/content/develop/interact/search-and-query/best-practices/dev-to-prod-best-practices.md +++ b/content/develop/interact/search-and-query/best-practices/dev-to-prod-best-practices.md @@ -54,7 +54,7 @@ RQE offers several configurable parameters that influence query results and perf ### 4. `DEFAULT_DIALECT` -- Purpose: specifies the default query dialect used by [`FT.SEARCH`]({{< baseurl >}}commands/ft.search) and [`FT.AGGREGATE`]({{< baseurl >}}commands/ft.aggregate) commands. +- Purpose: specifies the default query dialect used by [`FT.SEARCH`]({{< relref "commands/ft.search" >}}) and [`FT.AGGREGATE`]({{< relref "commands/ft.aggregate" >}}) commands. - Default: [Dialect 1]({{< relref "/develop/interact/search-and-query/advanced-concepts/dialects" >}}). - Recommendations: - Update the default to [**Dialect 4**]({{< relref "/develop/interact/search-and-query/advanced-concepts/dialects#dialect-4" >}}) for better performance and access to advanced features. @@ -65,8 +65,8 @@ RQE offers several configurable parameters that influence query results and perf ### 1. Correctness - Run a few test queries and check the results are what you expect. - Use the following tools to validate and debug: - - Redis CLI: use the [`MONITOR`]({{< baseurl >}}commands/monitor) command or [profiling features]({{< relref "/develop/tools/insight#profiler" >}}) in Redis Insight to analyze commands. - - [`FT.PROFILE`]({{< baseurl >}}commands/ft.profile): Provides detailed insights into individual query execution paths, helping identify bottlenecks and inefficiencies. + - Redis CLI: use the [`MONITOR`]({{< relref "commands/monitor" >}}) command or [profiling features]({{< relref "/develop/tools/insight#profiler" >}}) in Redis Insight to analyze commands. + - [`FT.PROFILE`]({{< relref "commands/ft.profile" >}}): Provides detailed insights into individual query execution paths, helping identify bottlenecks and inefficiencies. ### 2. Performance - Test query performance in a controlled test environment that mirrors production as closely as possible. diff --git a/content/develop/interact/search-and-query/best-practices/index-mgmt-best-practices.md b/content/develop/interact/search-and-query/best-practices/index-mgmt-best-practices.md index d4e9a6558e..e1feab1315 100644 --- a/content/develop/interact/search-and-query/best-practices/index-mgmt-best-practices.md +++ b/content/develop/interact/search-and-query/best-practices/index-mgmt-best-practices.md @@ -53,19 +53,19 @@ Match field types to their intended use and avoid indexing fields that are rarel See [these pages]({{< relref "/develop/interact/search-and-query/query" >}}) for discussions and examples on how best to use these index types. Next, simulate queries on a sample dataset to identify potential bottlenecks. -Use tools like [`FT.PROFILE`]({{< baseurl >}}commands/ft.profile) to analyze query execution and refine your schema if needed. -For example, assign weights to `TEXT` fields for prioritizing results or use the `PREFIX` option of [`FT.CREATE`]({{< baseurl >}}commands/ft.create) to limit indexing to specific key patterns. Note that you can use multiple `PREFIX` clauses when you create an index (see [below](#index-creation)) +Use tools like [`FT.PROFILE`]({{< relref "commands/ft.profile" >}}) to analyze query execution and refine your schema if needed. +For example, assign weights to `TEXT` fields for prioritizing results or use the `PREFIX` option of [`FT.CREATE`]({{< relref "commands/ft.create" >}}) to limit indexing to specific key patterns. Note that you can use multiple `PREFIX` clauses when you create an index (see [below](#index-creation)) After creating the index, validate its performance with real queries and monitor usage with the available tools: -- [`FT.EXPLAIN`]({{< baseurl >}}commands/ft.explain) and [`FT.EXPLAINCLI`]({{< baseurl >}}commands/ft.explaincli) allow you to see how Redis Query Engine parses a given search query. `FT.EXPLAIN` returns a structured breakdown of the query execution plan, while `FT.EXPLAINCLI` presents a more readable, tree-like format for easier interpretation. These commands are useful for diagnosing query structure and ensuring it aligns with the intended logic. -- [`FT.INFO`]({{< baseurl >}}commands/ft.info) provides detailed statistics about an index, including the number of indexed documents, memory usage, and configuration settings. It helps in monitoring index growth, assessing memory consumption, and verifying index structure to detect potential inefficiencies. -- [`FT.PROFILE`]({{< baseurl >}}commands/ft.profile) runs a query while capturing execution details, which helps to reveal query performance bottlenecks. It provides insights into processing time, key accesses, and filter application, making it a crucial tool for fine-tuning complex queries and optimizing search efficiency. +- [`FT.EXPLAIN`]({{< relref "commands/ft.explain" >}}) and [`FT.EXPLAINCLI`]({{< relref "commands/ft.explaincli" >}}) allow you to see how Redis Query Engine parses a given search query. `FT.EXPLAIN` returns a structured breakdown of the query execution plan, while `FT.EXPLAINCLI` presents a more readable, tree-like format for easier interpretation. These commands are useful for diagnosing query structure and ensuring it aligns with the intended logic. +- [`FT.INFO`]({{< relref "commands/ft.info" >}}) provides detailed statistics about an index, including the number of indexed documents, memory usage, and configuration settings. It helps in monitoring index growth, assessing memory consumption, and verifying index structure to detect potential inefficiencies. +- [`FT.PROFILE`]({{< relref "commands/ft.profile" >}}) runs a query while capturing execution details, which helps to reveal query performance bottlenecks. It provides insights into processing time, key accesses, and filter application, making it a crucial tool for fine-tuning complex queries and optimizing search efficiency. Avoid over-indexing. Indexing every field increases memory usage and can slow down updates. Only index the fields that are essential for your planned queries. ## Index creation {#index-creation} - - Use the [`FT.CREATE`]({{< baseurl >}}commands/ft.create) command to define an index schema. + - Use the [`FT.CREATE`]({{< relref "commands/ft.create" >}}) command to define an index schema. - Assign weights to `TEXT` fields to prioritize certain fields in full-text search results. - Use the `PREFIX` option to restrict indexing to keys with specific patterns. Using multiple PREFIX clauses when creating an index allows you to index multiple key patterns under a single index. This is useful in several scenarios: @@ -103,9 +103,9 @@ Best practices for aliasing: Tools for managing aliases: -- Assign an alias: [`FT.ALIASADD`]({{< baseurl >}}commands/ft.aliasadd) `my_alias my_index` -- Update an alias: [`FT.ALIASUPDATE`]({{< baseurl >}}commands/ft.aliasupdate) `my_alias new_index` -- Remove an alias: [`FT.ALIASDEL`]({{< baseurl >}}commands/ft.aliasdel) `my_alias` +- Assign an alias: [`FT.ALIASADD`]({{< relref "commands/ft.aliasadd" >}}) `my_alias my_index` +- Update an alias: [`FT.ALIASUPDATE`]({{< relref "commands/ft.aliasupdate" >}}) `my_alias new_index` +- Remove an alias: [`FT.ALIASDEL`]({{< relref "commands/ft.aliasdel" >}}) `my_alias` Monitoring and troubleshooting aliases: @@ -145,7 +145,7 @@ Monitoring and troubleshooting aliases: ## Monitoring index performance - Use the `FT.PROFILE` command to analyze query performance and identify bottlenecks. -- Regularly monitor memory usage with the [`INFO`]({{< baseurl >}}commands/info) `memory` and `FT.INFO` commands to detect growth patterns and optimize resource allocation. +- Regularly monitor memory usage with the [`INFO`]({{< relref "commands/info" >}}) `memory` and `FT.INFO` commands to detect growth patterns and optimize resource allocation. ## Index maintenance @@ -154,7 +154,7 @@ Monitoring and troubleshooting aliases: ### FT.ALTER vs. aliasing -Use [`FT.ALTER`]({{< baseurl >}}commands/ft.alter) when you need to add new fields to an existing index without rebuilding it, minimizing downtime and resource usage. However, `FT.ALTER` cannot remove or modify existing fields, limiting its flexibility. +Use [`FT.ALTER`]({{< relref "commands/ft.alter" >}}) when you need to add new fields to an existing index without rebuilding it, minimizing downtime and resource usage. However, `FT.ALTER` cannot remove or modify existing fields, limiting its flexibility. Use index aliasing when making schema changes that require reindexing, such as modifying field types or removing fields. In this case, create a new index with the updated schema, populate it, and then use `FT.ALIASUPDATE` to seamlessly switch queries to the new index without disrupting application functionality. @@ -170,7 +170,7 @@ Use index aliasing when making schema changes that require reindexing, such as m ## Cleaning up -- Use the [`FT.DROPINDEX`]({{< baseurl >}}commands/ft.dropindex) command to remove unused indexes and free up memory. Be cautious with the `DD` (Delete Documents) flag to avoid unintended data deletion. +- Use the [`FT.DROPINDEX`]({{< relref "commands/ft.dropindex" >}}) command to remove unused indexes and free up memory. Be cautious with the `DD` (Delete Documents) flag to avoid unintended data deletion. - Make sure no keys remain that were previously associated with dropped indexes if the data is no longer relevant. ## Documentation and automation diff --git a/content/develop/interact/search-and-query/best-practices/scalable-query-best-practices.md b/content/develop/interact/search-and-query/best-practices/scalable-query-best-practices.md index 471b48330f..767ba5e245 100644 --- a/content/develop/interact/search-and-query/best-practices/scalable-query-best-practices.md +++ b/content/develop/interact/search-and-query/best-practices/scalable-query-best-practices.md @@ -22,7 +22,7 @@ Below are some basic steps to ensure good performance of the Redis Query Engine * Create a Redis data model with your query patterns in mind. * Ensure the Redis architecture has been sized for the expected load using the [sizing calculator](https://redis.io/redisearch-sizing-calculator/). * Provision Redis nodes with sufficient resources (RAM, CPU, network) to support the expected maximum load. -* Review [`FT.INFO`]({{< baseurl >}}commands/ft.info) and [`FT.PROFILE`]({{< baseurl >}}commands/ft.profile) outputs for anomalies and/or errors. +* Review [`FT.INFO`]({{< relref "commands/ft.info" >}}) and [`FT.PROFILE`]({{< relref "commands/ft.profile" >}}) outputs for anomalies and/or errors. * Conduct load testing in a test environment with real-world queries and a load generated by either [memtier_benchmark](https://github.com/redislabs/memtier_benchmark) or a custom load application. ## Indexing considerations @@ -53,7 +53,7 @@ queries. ## Validate performance (`FT.PROFILE`) -You can analyze [`FT.PROFILE`]({{< baseurl >}}commands/ft.profile) output to gain insights about query execution. +You can analyze [`FT.PROFILE`]({{< relref "commands/ft.profile" >}}) output to gain insights about query execution. The following informational items are available for analysis: - Total execution time diff --git a/content/develop/interact/search-and-query/deprecated/payloads.md b/content/develop/interact/search-and-query/deprecated/payloads.md index 2d178db439..72fe283229 100644 --- a/content/develop/interact/search-and-query/deprecated/payloads.md +++ b/content/develop/interact/search-and-query/deprecated/payloads.md @@ -52,7 +52,7 @@ If no payload was set to the document, it is simply NULL. If it is not, you can When searching, it is possible to request the document payloads from the engine. -This is done by adding the keyword `WITHPAYLOADS` to [`FT.SEARCH`]({{< baseurl >}}commands/ft.search/). +This is done by adding the keyword `WITHPAYLOADS` to [`FT.SEARCH`]({{< relref "commands/ft.search/" >}}). If `WITHPAYLOADS` is set, the payloads follow the document id in the returned result. If `WITHSCORES` is set as well, the payloads follow the scores. diff --git a/content/develop/interact/search-and-query/indexing/_index.md b/content/develop/interact/search-and-query/indexing/_index.md index 00473b8f8c..e85d2cb95c 100644 --- a/content/develop/interact/search-and-query/indexing/_index.md +++ b/content/develop/interact/search-and-query/indexing/_index.md @@ -28,14 +28,14 @@ Before you can index and search JSON documents, you need a database with either: ## Create index with JSON schema -When you create an index with the [`FT.CREATE`]({{< baseurl >}}commands/ft.create/) command, include the `ON JSON` keyword to index any existing and future JSON documents stored in the database. +When you create an index with the [`FT.CREATE`]({{< relref "commands/ft.create/" >}}) command, include the `ON JSON` keyword to index any existing and future JSON documents stored in the database. To define the `SCHEMA`, you can provide [JSONPath]({{< relref "/develop/data-types/json/path" >}}) expressions. The result of each JSONPath expression is indexed and associated with a logical name called an `attribute` (previously known as a `field`). You can use these attributes in queries. {{% alert title="Note" color="info" %}} -Note: `attribute` is optional for [`FT.CREATE`]({{< baseurl >}}commands/ft.create/). +Note: `attribute` is optional for [`FT.CREATE`]({{< relref "commands/ft.create/" >}}). {{% /alert %}} Use the following syntax to create a JSON index: @@ -56,7 +56,7 @@ See [Index limitations](#index-limitations) for more details about JSON index `S After you create an index, Redis Stack automatically indexes any existing, modified, or newly created JSON documents stored in the database. For existing documents, indexing runs asynchronously in the background, so it can take some time before the document is available. Modified and newly created documents are indexed synchronously, so the document will be available by the time the add or modify command finishes. -You can use any JSON write command, such as [`JSON.SET`]({{< baseurl >}}commands/json.set/) and [`JSON.ARRAPPEND`]({{< baseurl >}}commands/json.arrappend/), to create or modify JSON documents. +You can use any JSON write command, such as [`JSON.SET`]({{< relref "commands/json.set/" >}}) and [`JSON.ARRAPPEND`]({{< relref "commands/json.arrappend/" >}}), to create or modify JSON documents. The following examples use these JSON documents to represent individual inventory items. @@ -100,7 +100,7 @@ Item 2 JSON document: } ``` -Use [`JSON.SET`]({{< baseurl >}}commands/json.set/) to store these documents in the database: +Use [`JSON.SET`]({{< relref "commands/json.set/" >}}) to store these documents in the database: ```sql 127.0.0.1:6379> JSON.SET item:1 $ '{"name":"Noise-cancelling Bluetooth headphones","description":"Wireless Bluetooth headphones with noise-cancelling technology","connection":{"wireless":true,"type":"Bluetooth"},"price":99.98,"stock":25,"colors":["black","silver"],"embedding":[0.87,-0.15,0.55,0.03]}' @@ -109,12 +109,12 @@ Use [`JSON.SET`]({{< baseurl >}}commands/json.set/) to store these documents in "OK" ``` -Because indexing is synchronous in this case, the documents will be available on the index as soon as the [`JSON.SET`]({{< baseurl >}}commands/json.set/) command returns. +Because indexing is synchronous in this case, the documents will be available on the index as soon as the [`JSON.SET`]({{< relref "commands/json.set/" >}}) command returns. Any subsequent queries that match the indexed content will return the document. ## Search the index -To search the index for JSON documents, use the [`FT.SEARCH`]({{< baseurl >}}commands/ft.search/) command. +To search the index for JSON documents, use the [`FT.SEARCH`]({{< relref "commands/ft.search/" >}}) command. You can search any attribute defined in the `SCHEMA`. For example, use this query to search for items with the word "earbuds" in the name: @@ -170,7 +170,7 @@ And lastly, search for the Bluetooth headphones that are most similar to an imag For more information about search queries, see [Search query syntax]({{< relref "/develop/interact/search-and-query/advanced-concepts/query_syntax" >}}). {{% alert title="Note" color="info" %}} -[`FT.SEARCH`]({{< baseurl >}}commands/ft.search/) queries require `attribute` modifiers. Don't use JSONPath expressions in queries because the query parser doesn't fully support them. +[`FT.SEARCH`]({{< relref "commands/ft.search/" >}}) queries require `attribute` modifiers. Don't use JSONPath expressions in queries because the query parser doesn't fully support them. {{% /alert %}} ## Index JSON arrays as TAG @@ -223,7 +223,7 @@ Now you can do full text search for light colored headphones: ``` ### Limitations -- When a JSONPath may lead to multiple values and not only to a single array, e.g., when a JSONPath contains wildcards, etc., specifying `SLOP` or `INORDER` in [`FT.SEARCH`]({{< baseurl >}}commands/ft.search/) will return an error, since the order of the values matching the JSONPath is not well defined, leading to potentially inconsistent results. +- When a JSONPath may lead to multiple values and not only to a single array, e.g., when a JSONPath contains wildcards, etc., specifying `SLOP` or `INORDER` in [`FT.SEARCH`]({{< relref "commands/ft.search/" >}}) will return an error, since the order of the values matching the JSONPath is not well defined, leading to potentially inconsistent results. For example, using a JSONPath such as `$..b[*]` on a JSON value such as ```json @@ -252,7 +252,7 @@ Now you can do full text search for light colored headphones: ### Handling phrases in different array slots: -When indexing, a predefined delta is used to increase positional offsets between array slots for multiple text values. This delta controls the level of separation between phrases in different array slots (related to the `SLOP` parameter of [`FT.SEARCH`]({{< baseurl >}}commands/ft.search/)). +When indexing, a predefined delta is used to increase positional offsets between array slots for multiple text values. This delta controls the level of separation between phrases in different array slots (related to the `SLOP` parameter of [`FT.SEARCH`]({{< relref "commands/ft.search/" >}})). This predefined value is set by the configuration parameter `MULTI_TEXT_SLOP` (at module load-time). The default value is 100. ## Index JSON arrays as NUMERIC @@ -430,7 +430,7 @@ You can also search for items with a Bluetooth connection type: ## Field projection -[`FT.SEARCH`]({{< baseurl >}}commands/ft.search/) returns the entire JSON document by default. If you want to limit the returned search results to specific attributes, you can use field projection. +[`FT.SEARCH`]({{< relref "commands/ft.search/" >}}) returns the entire JSON document by default. If you want to limit the returned search results to specific attributes, you can use field projection. ### Return specific attributes @@ -507,7 +507,7 @@ This query returns the field as the alias `"stock"` instead of the JSONPath expr You can [highlight]({{< relref "/develop/interact/search-and-query/advanced-concepts/highlight" >}}) relevant search terms in any indexed `TEXT` attribute. -For [`FT.SEARCH`]({{< baseurl >}}commands/ft.search/), you have to explicitly set which attributes you want highlighted after the `RETURN` and `HIGHLIGHT` parameters. +For [`FT.SEARCH`]({{< relref "commands/ft.search/" >}}), you have to explicitly set which attributes you want highlighted after the `RETURN` and `HIGHLIGHT` parameters. Use the optional `TAGS` keyword to specify the strings that will surround (or highlight) the matching search terms. @@ -558,7 +558,7 @@ This example uses aggregation to calculate a 10% price discount for each item an ``` {{% alert title="Note" color="info" %}} -[`FT.AGGREGATE`]({{< baseurl >}}commands/ft.aggregate/) queries require `attribute` modifiers. Don't use JSONPath expressions in queries, except with the `LOAD` option, because the query parser doesn't fully support them. +[`FT.AGGREGATE`]({{< relref "commands/ft.aggregate/" >}}) queries require `attribute` modifiers. Don't use JSONPath expressions in queries, except with the `LOAD` option, because the query parser doesn't fully support them. {{% /alert %}} ## Index missing or empty values diff --git a/content/develop/interact/search-and-query/query/_index.md b/content/develop/interact/search-and-query/query/_index.md index 05f746cc9f..294338b488 100644 --- a/content/develop/interact/search-and-query/query/_index.md +++ b/content/develop/interact/search-and-query/query/_index.md @@ -16,7 +16,7 @@ title: Query data weight: 5 --- -Redis Stack distinguishes between the [FT.SEARCH]({{< baseurl >}}commands/ft.search) and [FT.AGGREGATE]({{< baseurl >}}commands/ft.aggregate) query commands. You should use [FT.SEARCH]({{< baseurl >}}commands/ft.search) if you want to perform selections and projections only. If you also need to apply mapping functions, group, or aggregate data, use the [FT.AGGREGATE]({{< baseurl >}}commands/ft.aggregate) command. +Redis Stack distinguishes between the [FT.SEARCH]({{< relref "commands/ft.search" >}}) and [FT.AGGREGATE]({{< relref "commands/ft.aggregate" >}}) query commands. You should use [FT.SEARCH]({{< relref "commands/ft.search" >}}) if you want to perform selections and projections only. If you also need to apply mapping functions, group, or aggregate data, use the [FT.AGGREGATE]({{< relref "commands/ft.aggregate" >}}) command. * **Selection**: A selection allows you to return all documents that fulfill specific criteria. * **Projection**: Projections are used to return specific fields of the result set. You can also map/project to calculated field values. @@ -31,7 +31,7 @@ Here is a short SQL comparison using the [bicycle dataset](./data/bicycles.txt): | Calculated projection| `SELECT id, price-price*0.1 AS discounted FROM bicycles`| `FT.AGGREGATE idx:bicycle "*" LOAD 2 __key price APPLY "@price-@price*0.1" AS discounted`| | Aggregation | `SELECT condition, AVG(price) AS avg_price FROM bicycles GROUP BY condition` | `FT.AGGREGATE idx:bicycle "*" GROUPBY 1 @condition REDUCE AVG 1 @price AS avg_price` | -The following articles provide an overview of how to query data with the [FT.SEARCH]({{< baseurl >}}commands/ft.search) command: +The following articles provide an overview of how to query data with the [FT.SEARCH]({{< relref "commands/ft.search" >}}) command: * [Exact match queries]({{< relref "/develop/interact/search-and-query/query/exact-match" >}}) * [Range queries]({{< relref "/develop/interact/search-and-query/query/range" >}}) @@ -40,6 +40,6 @@ The following articles provide an overview of how to query data with the [FT.SEA * [Vector search]({{< relref "/develop/interact/search-and-query/query/vector-search" >}}) * [Combined queries]({{< relref "/develop/interact/search-and-query/query/combined" >}}) -You can find further details about aggregation queries with [FT.AGGREGATE]({{< baseurl >}}commands/ft.aggregate) in the following article: +You can find further details about aggregation queries with [FT.AGGREGATE]({{< relref "commands/ft.aggregate" >}}) in the following article: * [Aggregation queries]({{< relref "/develop/interact/search-and-query/query/aggregation" >}}) \ No newline at end of file diff --git a/content/develop/interact/search-and-query/query/aggregation.md b/content/develop/interact/search-and-query/query/aggregation.md index 5a6675ff0c..14ad7d3934 100644 --- a/content/develop/interact/search-and-query/query/aggregation.md +++ b/content/develop/interact/search-and-query/query/aggregation.md @@ -21,7 +21,7 @@ An aggregation query allows you to perform the following actions: - Group data based on field values. - Apply aggregation functions on the grouped data. -This article explains the basic usage of the [FT.AGGREGATE]({{< baseurl >}}commands/ft.aggregate) command. For further details, see the [command specification]({{< baseurl >}}commands/ft.aggregate) and the [aggregations reference documentation]({{< relref "/develop/interact/search-and-query/advanced-concepts/aggregations" >}}). +This article explains the basic usage of the [FT.AGGREGATE]({{< relref "commands/ft.aggregate" >}}) command. For further details, see the [command specification]({{< relref "commands/ft.aggregate" >}}) and the [aggregations reference documentation]({{< relref "/develop/interact/search-and-query/advanced-concepts/aggregations" >}}). The examples in this article use a schema with the following fields: @@ -40,7 +40,7 @@ FT.AGGREGATE index "query_expr" LOAD n "field_1" .. "field_n" APPLY "function_ex Here is a more detailed explanation of the query syntax: -1. **Query expression**: you can use the same query expressions as you would use with the [`FT.SEARCH`]({{< baseurl >}}commands/ft.search/) command. You can substitute `query_expr` with any of the expressions explained in the articles of this [query topic]({{< relref "/develop/interact/search-and-query/query/" >}}). Vector search queries are an exception. You can't combine a vector search with an aggregation query. +1. **Query expression**: you can use the same query expressions as you would use with the [`FT.SEARCH`]({{< relref "commands/ft.search/" >}}) command. You can substitute `query_expr` with any of the expressions explained in the articles of this [query topic]({{< relref "/develop/interact/search-and-query/query/" >}}). Vector search queries are an exception. You can't combine a vector search with an aggregation query. 2. **Loaded fields**: if field values weren't already loaded into the aggregation pipeline, you can force their presence via the `LOAD` clause. This clause takes the number of fields (`n`), followed by the field names (`"field_1" .. "field_n"`). 3. **Mapping function**: this mapping function operates on the field values. A specific field is referenced as `@field_name` within the function expression. The result is returned as `result_field`. @@ -113,7 +113,7 @@ FT.AGGREGATE idx:bicycle "*" LOAD 1 price APPLY "@price<1000" AS price_category ``` {{% alert title="Note" color="warning" %}} -You can also create more complex aggregation pipelines with [FT.AGGREGATE]({{< baseurl >}}commands/ft.aggregate). Applying multiple reduction functions under one `GROUPBY` clause is possible. In addition, you can also chain groupings and mix in additional mapping steps (e.g., `GROUPBY ... REDUCE ... APPLY ... GROUPBY ... REDUCE`) +You can also create more complex aggregation pipelines with [FT.AGGREGATE]({{< relref "commands/ft.aggregate" >}}). Applying multiple reduction functions under one `GROUPBY` clause is possible. In addition, you can also chain groupings and mix in additional mapping steps (e.g., `GROUPBY ... REDUCE ... APPLY ... GROUPBY ... REDUCE`) {{% /alert %}} diff --git a/content/develop/interact/search-and-query/query/combined.md b/content/develop/interact/search-and-query/query/combined.md index 0a8cea7121..706f34c380 100644 --- a/content/develop/interact/search-and-query/query/combined.md +++ b/content/develop/interact/search-and-query/query/combined.md @@ -26,7 +26,7 @@ A combined query is a combination of several query types, such as: You can use logical query operators to combine query expressions for numeric, tag, and text fields. For vector fields, you can combine a KNN query with a pre-filter. {{% alert title="Note" color="warning" %}} -The operators are interpreted slightly differently depending on the query dialect used. The default dialect is `DIALECT 1`; see [this article]({{< baseurl >}}develop/interact/search-and-query/basic-constructs/configuration-parameters#default_dialect) for information on how to change the dialect version. This article uses the second version of the query dialect, `DIALECT 2`, and uses additional brackets (`(...)`) to help clarify the examples. Further details can be found in the [query syntax documentation]({{< relref "/develop/interact/search-and-query/advanced-concepts/query_syntax" >}}). +The operators are interpreted slightly differently depending on the query dialect used. The default dialect is `DIALECT 1`; see [this article]({{< relref "develop/interact/search-and-query/basic-constructs/configuration-parameters#default_dialect" >}}) for information on how to change the dialect version. This article uses the second version of the query dialect, `DIALECT 2`, and uses additional brackets (`(...)`) to help clarify the examples. Further details can be found in the [query syntax documentation]({{< relref "/develop/interact/search-and-query/advanced-concepts/query_syntax" >}}). {{% /alert %}} The examples in this article use the following schema: @@ -121,7 +121,7 @@ FT.SEARCH idx:bicycle "@price:[500 1000] -@condition:{new}" ## Numeric filter -The [FT.SEARCH]({{< baseurl >}}commands/ft.search) command allows you to combine any query expression with a numeric filter. +The [FT.SEARCH]({{< relref "commands/ft.search" >}}) command allows you to combine any query expression with a numeric filter. ``` FT.SEARCH index "expr" FILTER numeric_field start end diff --git a/content/develop/interact/search-and-query/query/geo-spatial.md b/content/develop/interact/search-and-query/query/geo-spatial.md index bd5ade9327..fe9bbfe962 100644 --- a/content/develop/interact/search-and-query/query/geo-spatial.md +++ b/content/develop/interact/search-and-query/query/geo-spatial.md @@ -31,7 +31,7 @@ Redis Stack version 7.2.0 or higher is required to use the `GEOSHAPE` field type ## Radius -You can construct a radius query by passing the center coordinates (longitude, latitude), the radius, and the distance unit to the [FT.SEARCH]({{< baseurl >}}commands/ft.search) command. +You can construct a radius query by passing the center coordinates (longitude, latitude), the radius, and the distance unit to the [FT.SEARCH]({{< relref "commands/ft.search" >}}) command. ``` FT.SEARCH index "@geo_field:[lon lat radius unit]" diff --git a/content/develop/interact/search-and-query/query/range.md b/content/develop/interact/search-and-query/query/range.md index ea4e0a31ed..cd6fa58a54 100644 --- a/content/develop/interact/search-and-query/query/range.md +++ b/content/develop/interact/search-and-query/query/range.md @@ -37,13 +37,13 @@ The values `-inf`, `inf`, and `+inf` are valid values that allow you to define o An open-range query can lead to a large result set. -By default, [`FT.SEARCH`]({{< baseurl >}}commands/ft.search/) returns only the first ten results. The `LIMIT` argument helps you to scroll through the result set. The `SORTBY` argument ensures that the documents in the result set are returned in the specified order. +By default, [`FT.SEARCH`]({{< relref "commands/ft.search/" >}}) returns only the first ten results. The `LIMIT` argument helps you to scroll through the result set. The `SORTBY` argument ensures that the documents in the result set are returned in the specified order. ``` FT.SEARCH index "@field:[start end]" SORTBY field LIMIT page_start page_end ``` -You can find further details about using the `LIMIT` and `SORTBY` in the [[`FT.SEARCH`]({{< baseurl >}}commands/ft.search/) command reference](/commands/ft.search/). +You can find further details about using the `LIMIT` and `SORTBY` in the [[`FT.SEARCH`]({{< relref "commands/ft.search/" >}}) command reference](/commands/ft.search/). ## Examples diff --git a/content/develop/interact/search-and-query/query/vector-search.md b/content/develop/interact/search-and-query/query/vector-search.md index 2a6b49ea90..aebe25c640 100644 --- a/content/develop/interact/search-and-query/query/vector-search.md +++ b/content/develop/interact/search-and-query/query/vector-search.md @@ -28,7 +28,7 @@ The examples in this article use a schema with the following fields: ## K-neareast neighbours (KNN) -The Redis command [FT.SEARCH]({{< baseurl >}}commands/ft.search) takes the index name, the query string, and additional query parameters as arguments. You need to pass the number of nearest neighbors, the vector field name, and the vector's binary representation in the following way: +The Redis command [FT.SEARCH]({{< relref "commands/ft.search" >}}) takes the index name, the query string, and additional query parameters as arguments. You need to pass the number of nearest neighbors, the vector field name, and the vector's binary representation in the following way: ``` FT.SEARCH index "(*)=>[KNN num_neighbours @field $vector]" PARAMS 2 vector "binary_data" DIALECT 2 @@ -42,7 +42,7 @@ Here is a more detailed explanation of this query: 4. **Vector binary data**: You need to use the `PARAMS` argument to substitute `$vector` with the binary representation of the vector. The value `2` indicates that `PARAMS` is followed by two arguments, the parameter name `vector` and the parameter value. 5. **Dialect**: The vector search feature has been available since version two of the query dialect. -You can read more about the `PARAMS` argument in the [FT.SEARCH]({{< baseurl >}}commands/ft.search) command reference. +You can read more about the `PARAMS` argument in the [FT.SEARCH]({{< relref "commands/ft.search" >}}) command reference. The following example shows you how to query for three bikes based on their description embeddings, and by using the field alias `vector`. The result is returned in ascending order based on the distance. You can see that the query only returns the fields `__vector_score` and `description`. The field `__vector_score` is present by default. Because you can have multiple vector fields in your schema, the vector score field name depends on the name of the vector field. If you change the field name `@vector` to `@foo`, the score field name changes to `__foo_score`. @@ -88,7 +88,7 @@ Here is a more detailed explanation of this query: {{% alert title="Note" color="warning" %}} -By default, [`FT.SEARCH`]({{< baseurl >}}commands/ft.search/) returns only the first ten results. The [range query article]({{< relref "/develop/interact/search-and-query/query/range" >}}) explains to you how to scroll through the result set. +By default, [`FT.SEARCH`]({{< relref "commands/ft.search/" >}}) returns only the first ten results. The [range query article]({{< relref "/develop/interact/search-and-query/query/range" >}}) explains to you how to scroll through the result set. {{% /alert %}} The example below shows a radius query that returns the description and the distance within a radius of `0.5`. The result is sorted by the distance. diff --git a/content/develop/reference/protocol-spec.md b/content/develop/reference/protocol-spec.md index 798df9b523..fa1475c445 100644 --- a/content/develop/reference/protocol-spec.md +++ b/content/develop/reference/protocol-spec.md @@ -74,7 +74,7 @@ This is the simplest model possible; however, there are some exceptions: * The [`MONITOR`]({{< relref "/commands/monitor" >}}) command. Invoking the [`MONITOR`]({{< relref "/commands/monitor" >}}) command switches the connection to an ad-hoc push mode. The protocol of this mode is not specified but is obvious to parse. -* [Protected mode]({{< baseurl >}}operate/oss_and_stack/management/security/#protected-mode). +* [Protected mode]({{< relref "operate/oss_and_stack/management/security/#protected-mode" >}}). Connections opened from a non-loopback address to a Redis while in protected mode are denied and terminated by the server. Before terminating the connection, Redis unconditionally sends a `-DENIED` reply, regardless of whether the client writes to the socket. * The [RESP3 Push type](#resp3-pushes). @@ -754,7 +754,7 @@ While comparable in performance to a binary protocol, the Redis protocol is sign ## Tips for Redis client authors -* For testing purposes, use [Lua's type conversions]({{< baseurl >}}develop/interact/programmability/lua-api#lua-to-resp3-type-conversion) to have Redis reply with any RESP2/RESP3 needed. +* For testing purposes, use [Lua's type conversions]({{< relref "develop/interact/programmability/lua-api#lua-to-resp3-type-conversion" >}}) to have Redis reply with any RESP2/RESP3 needed. As an example, a RESP3 double can be generated like so: ``` EVAL "return { double = tonumber(ARGV[1]) }" 0 1e0 diff --git a/content/develop/use/patterns/indexes/index.md b/content/develop/use/patterns/indexes/index.md index 0bc40051ab..f4c49da92b 100644 --- a/content/develop/use/patterns/indexes/index.md +++ b/content/develop/use/patterns/indexes/index.md @@ -42,7 +42,7 @@ The Redis query engine provides capabilities to index and query both hash and JS * `VECTOR` * `GEOSHAPE` -Once hash or JSON keys have been indexed using the [`FT.CREATE`]({{< baseurl >}}commands/ft.create) command, all keys that use the prefix defined in the index can be queried using the [`FT.SEARCH`]({{< baseurl >}}commands/ft.search) and [`FT.AGGREGATE`]({{< baseurl >}}commands/ft.aggregate) commands. +Once hash or JSON keys have been indexed using the [`FT.CREATE`]({{< relref "commands/ft.create" >}}) command, all keys that use the prefix defined in the index can be queried using the [`FT.SEARCH`]({{< relref "commands/ft.search" >}}) and [`FT.AGGREGATE`]({{< relref "commands/ft.aggregate" >}}) commands. For more information on creating hash and JSON indexes, see the following pages. @@ -180,11 +180,11 @@ index. ## Time series indexes -When you create a new time series using the [`TS.CREATE`]({{< baseurl >}}commands/ts.create) command, you can associate one or more `LABELS` with it. Each label is a name-value pair, where the both name and value are text. Labels serve as a secondary index that allows you to execute queries on groups of time series keys using various time series commands. +When you create a new time series using the [`TS.CREATE`]({{< relref "commands/ts.create" >}}) command, you can associate one or more `LABELS` with it. Each label is a name-value pair, where the both name and value are text. Labels serve as a secondary index that allows you to execute queries on groups of time series keys using various time series commands. See the [time series quickstart guide]({{< relref "/develop/data-types/timeseries/quickstart#labels" >}}) for an example of creating a time series with a label. -The [`TS.MGET`]({{< baseurl >}}commands/ts.mget), [`TS.MRANGE`]({{< baseurl >}}commands/ts.mrange), and [`TS.MREVRANGE`]({{< baseurl >}}commands/ts.mrevrange) commands operate on multiple time series based on specified labels or using a label-related filter expression. The [`TS.QUERYINDEX`]({{< baseurl >}}commands/ts.queryindex) command returns all time series keys matching a given label-related filter expression. +The [`TS.MGET`]({{< relref "commands/ts.mget" >}}), [`TS.MRANGE`]({{< relref "commands/ts.mrange" >}}), and [`TS.MREVRANGE`]({{< relref "commands/ts.mrevrange" >}}) commands operate on multiple time series based on specified labels or using a label-related filter expression. The [`TS.QUERYINDEX`]({{< relref "commands/ts.queryindex" >}}) command returns all time series keys matching a given label-related filter expression. ## Lexicographical indexes diff --git a/content/develop/whats-new/redis-feature-sets.md b/content/develop/whats-new/redis-feature-sets.md index 7681f29fbb..c09b002371 100644 --- a/content/develop/whats-new/redis-feature-sets.md +++ b/content/develop/whats-new/redis-feature-sets.md @@ -17,7 +17,7 @@ To use a new feature introduced in a later feature set, you must upgrade the cor | Redis feature set | What's new | |-------------------|------------| -| **Feature set version:** 7.4

**Component versions:**
[Redis 7.4]({{}})
[Search 2.10]({{< relref "/operate/oss_and_stack/stack-with-enterprise/release-notes/redisearch/redisearch-2.10-release-notes.md" >}})
[JSON 2.8]({{}})
[Time series 1.12]({{}})
[Bloom 2.8]({{}}) | **Hash**:
- [Expiration of individual hash fields]({{}}).
**Streams**:
- To start reading from the last stream message, use [`XREAD`]({{}}) with the new ID value `+`.
**Time series**:
Insertion-filter for close samples.
**JSON**:
- A fix to not duplicate `AOF` commands multiple times in [`JSON.MSET`]({{< baseurl >}}commands/json.mset/).
**Probabilistic**:
- Returns an error if [`CMS.MERGE`]({{< baseurl >}}commands/cms.merge/) results in an overflow or underflow.
**Redis Query Engine**:
- New `BFLOAT16` and `FLOAT16` vector data types, reducing memory consumed by vectors while preserving accuracy.
- Support for indexing empty and missing values and enhanced developer experience for queries with exact matching capabilities.
- You can match `TAG` fields without needing to escape special characters.
- Expanded geospatial search with new `INTERSECT` and `DISJOINT` operators, improved reporting of the memory consumed by the index, and exposed full-text scoring in aggregation pipelines. | -| **Feature set version:** 7.2

**Component versions:**
[Redis 7.2](https://raw.githubusercontent.com/redis/redis/7.2/00-RELEASENOTES)
[Search 2.8]({{< relref "/operate/oss_and_stack/stack-with-enterprise/release-notes/redisearch/redisearch-2.8-release-notes.md" >}})
[JSON 2.6]({{}})
[Time series 1.10]({{}})
[Bloom 2.6]({{}})
[Gears 2.0](https://github.com/RedisGears/RedisGears/releases) | - Performance and resource utilization improvements, including significant memory and speed optimizations for lists, sets, and sorted sets.
**JSON**:
- New JSON commands: [`JSON.MERGE`]({{< baseurl >}}commands/json.merge/) and [`JSON.MSET`]({{< baseurl >}}commands/json.mset/).
**Redis Query Engine:**
- [Geo polygon search]({{< baseurl >}}commands/ft.search/#examples).
**Compatibility changes**:
- Redis 7.2 uses a new format (version 11) for RDB files, which is incompatible with older versions.
- Redis feature set 7.2 does not include [graph capabilities](https://redis.io/blog/redisgraph-eol/). | +| **Feature set version:** 7.4

**Component versions:**
[Redis 7.4]({{}})
[Search 2.10]({{< relref "/operate/oss_and_stack/stack-with-enterprise/release-notes/redisearch/redisearch-2.10-release-notes.md" >}})
[JSON 2.8]({{}})
[Time series 1.12]({{}})
[Bloom 2.8]({{}}) | **Hash**:
- [Expiration of individual hash fields]({{}}).
**Streams**:
- To start reading from the last stream message, use [`XREAD`]({{}}) with the new ID value `+`.
**Time series**:
Insertion-filter for close samples.
**JSON**:
- A fix to not duplicate `AOF` commands multiple times in [`JSON.MSET`]({{< relref "commands/json.mset/" >}}).
**Probabilistic**:
- Returns an error if [`CMS.MERGE`]({{< relref "commands/cms.merge/" >}}) results in an overflow or underflow.
**Redis Query Engine**:
- New `BFLOAT16` and `FLOAT16` vector data types, reducing memory consumed by vectors while preserving accuracy.
- Support for indexing empty and missing values and enhanced developer experience for queries with exact matching capabilities.
- You can match `TAG` fields without needing to escape special characters.
- Expanded geospatial search with new `INTERSECT` and `DISJOINT` operators, improved reporting of the memory consumed by the index, and exposed full-text scoring in aggregation pipelines. | +| **Feature set version:** 7.2

**Component versions:**
[Redis 7.2](https://raw.githubusercontent.com/redis/redis/7.2/00-RELEASENOTES)
[Search 2.8]({{< relref "/operate/oss_and_stack/stack-with-enterprise/release-notes/redisearch/redisearch-2.8-release-notes.md" >}})
[JSON 2.6]({{}})
[Time series 1.10]({{}})
[Bloom 2.6]({{}})
[Gears 2.0](https://github.com/RedisGears/RedisGears/releases) | - Performance and resource utilization improvements, including significant memory and speed optimizations for lists, sets, and sorted sets.
**JSON**:
- New JSON commands: [`JSON.MERGE`]({{< relref "commands/json.merge/" >}}) and [`JSON.MSET`]({{< relref "commands/json.mset/" >}}).
**Redis Query Engine:**
- [Geo polygon search]({{< relref "commands/ft.search/#examples" >}}).
**Compatibility changes**:
- Redis 7.2 uses a new format (version 11) for RDB files, which is incompatible with older versions.
- Redis feature set 7.2 does not include [graph capabilities](https://redis.io/blog/redisgraph-eol/). | | **Feature set version:** 6.2

**Component versions:**
[Redis 6.2](https://raw.githubusercontent.com/redis/redis/6.2/00-RELEASENOTES)
[Search 2.6]({{< relref "/operate/oss_and_stack/stack-with-enterprise/release-notes/redisearch/redisearch-2.6-release-notes.md" >}})
[JSON 2.4]({{}})
[Time series 1.8]({{}})
[Bloom 2.4]({{}})
[Graph 2.10]({{}}) | **Time series**:
- Time series gap filling.
**JSON**:
- Improved JSON path parser.
**Probabilistic:**
- New probabilistic data structure t-digest.
**Redis Query Engine:**
- Wildcard queries for `TEXT` and `TAG`.
- Suffix search.
- Multi-value indexing and queries.
**Graph**:
- New pathfinding algorithms for graphs. | diff --git a/content/embeds/json-active-active-command-differences.md b/content/embeds/json-active-active-command-differences.md index fb8bcc2448..cdf56549d4 100644 --- a/content/embeds/json-active-active-command-differences.md +++ b/content/embeds/json-active-active-command-differences.md @@ -4,4 +4,4 @@ Some JSON commands work differently for Active-Active databases. ### `JSON.CLEAR` -[`JSON.CLEAR`]({{< baseurl >}}commands/json.clear) resets JSON arrays and objects. It supports concurrent updates to JSON documents from different instances in an Active-Active database and allows the results to be merged. +[`JSON.CLEAR`]({{< relref "commands/json.clear" >}}) resets JSON arrays and objects. It supports concurrent updates to JSON documents from different instances in an Active-Active database and allows the results to be merged. diff --git a/content/integrate/amazon-bedrock/set-up-redis.md b/content/integrate/amazon-bedrock/set-up-redis.md index f73c31d672..1495b66d03 100644 --- a/content/integrate/amazon-bedrock/set-up-redis.md +++ b/content/integrate/amazon-bedrock/set-up-redis.md @@ -173,7 +173,7 @@ After you store this secret, you can view and copy the [Amazon Resource Name (AR ## Create a vector index in your database {#create-vector-index} -After your Redis Cloud database is set up, create a search index with a vector field using [FT.CREATE]({{< baseurl >}}commands/ft.create) as your knowledge base for Amazon Bedrock. You can accomplish this using **Redis Insight** or `redis-cli`. +After your Redis Cloud database is set up, create a search index with a vector field using [FT.CREATE]({{< relref "commands/ft.create" >}}) as your knowledge base for Amazon Bedrock. You can accomplish this using **Redis Insight** or `redis-cli`. ### Redis Insight @@ -203,7 +203,7 @@ To create your vector index in Redis Insight: {{The Redis Insight workbench icon.}} -1. Enter the [FT.CREATE]({{< baseurl >}}commands/ft.create) command to create an index. +1. Enter the [FT.CREATE]({{< relref "commands/ft.create" >}}) command to create an index. ```text FT.CREATE @@ -240,7 +240,7 @@ redis-cli -h -p --tls --cacert redis_ca.pem \ --cert redis_user.crt --key redis_user_private.key ``` -After you are connected with `redis-cli`, create an index using [FT.CREATE]({{< baseurl >}}commands/ft.create). +After you are connected with `redis-cli`, create an index using [FT.CREATE]({{< relref "commands/ft.create" >}}). ```text FT.CREATE diff --git a/content/integrate/redisom-for-java/_index.md b/content/integrate/redisom-for-java/_index.md index adffdbd311..154c8442e3 100644 --- a/content/integrate/redisom-for-java/_index.md +++ b/content/integrate/redisom-for-java/_index.md @@ -344,7 +344,7 @@ Several Redis commands were executed on application startup. Let’s break them ### Index Creation -The first one is a call to [`FT.CREATE`]({{< baseurl >}}commands/ft.create/), which happens after Redis OM Spring scanned the `@Document` annotations. As you can see, since it encountered the annotation on `Person`, it creates the `PersonIdx` index. +The first one is a call to [`FT.CREATE`]({{< relref "commands/ft.create/" >}}), which happens after Redis OM Spring scanned the `@Document` annotations. As you can see, since it encountered the annotation on `Person`, it creates the `PersonIdx` index. {{< highlight bash >}} "FT.CREATE" @@ -392,7 +392,7 @@ Let's break it down: * The first call uses the generated ULID to check if the id is in the set of primary keys (if it is, it’ll be removed) * The second call checks if JSON document exists (if it is, it’ll be removed) -* The third call uses the [`JSON.SET`]({{< baseurl >}}commands/json.set/) command to save the JSON payload +* The third call uses the [`JSON.SET`]({{< relref "commands/json.set/" >}}) command to save the JSON payload * The last call adds the primary key of the saved document to the set of primary keys Now that we’ve seen the repository in action via the `.save` method, we know that the trip from Java to Redis work. Now let’s add some more data to make the interactions more interesting: diff --git a/content/operate/oss_and_stack/install/install-redis/install-redis-from-source.md b/content/operate/oss_and_stack/install/install-redis/install-redis-from-source.md index 2224a5085d..84d779b545 100644 --- a/content/operate/oss_and_stack/install/install-redis/install-redis-from-source.md +++ b/content/operate/oss_and_stack/install/install-redis/install-redis-from-source.md @@ -63,4 +63,4 @@ If successful, you'll see the startup logs for Redis, and Redis will be running To stop Redis, enter `Ctrl-C`. -For a more complete installation, continue with [these instructions]({{< baseurl >}}operate/oss_and_stack/install/install-redis/#install-redis-properly). +For a more complete installation, continue with [these instructions]({{< relref "operate/oss_and_stack/install/install-redis/#install-redis-properly" >}}). diff --git a/content/operate/oss_and_stack/management/admin.md b/content/operate/oss_and_stack/management/admin.md index 4902047426..bf6ee97a90 100644 --- a/content/operate/oss_and_stack/management/admin.md +++ b/content/operate/oss_and_stack/management/admin.md @@ -16,9 +16,9 @@ weight: 1 * Deploy Redis using the Linux operating system. Redis is also tested on OS X, and from time to time on FreeBSD and OpenBSD systems. However, Linux is where most of the stress testing is performed, and where most production deployments are run. -* Set the Linux kernel overcommit memory setting to 1. Add `vm.overcommit_memory = 1` to `/etc/sysctl.conf`. Then, reboot or run the command `sysctl vm.overcommit_memory=1` to activate the setting. See [FAQ: Background saving fails with a fork() error on Linux?]({{< baseurl >}}develop/get-started/faq/#background-saving-fails-with-a-fork-error-on-linux) for details. +* Set the Linux kernel overcommit memory setting to 1. Add `vm.overcommit_memory = 1` to `/etc/sysctl.conf`. Then, reboot or run the command `sysctl vm.overcommit_memory=1` to activate the setting. See [FAQ: Background saving fails with a fork() error on Linux?]({{< relref "develop/get-started/faq/#background-saving-fails-with-a-fork-error-on-linux" >}}) for details. -* To ensure the Linux kernel feature Transparent Huge Pages does not impact Redis memory usage and latency, run the command: `echo never > /sys/kernel/mm/transparent_hugepage/enabled` to disable it. See [Latency Diagnosis - Latency induced by transparent huge pages]({{< baseurl >}}operate/oss_and_stack/management/optimization/latency#latency-induced-by-transparent-huge-pages) for additional context. +* To ensure the Linux kernel feature Transparent Huge Pages does not impact Redis memory usage and latency, run the command: `echo never > /sys/kernel/mm/transparent_hugepage/enabled` to disable it. See [Latency Diagnosis - Latency induced by transparent huge pages]({{< relref "operate/oss_and_stack/management/optimization/latency#latency-induced-by-transparent-huge-pages" >}}) for additional context. ### Memory diff --git a/content/operate/oss_and_stack/management/optimization/latency.md b/content/operate/oss_and_stack/management/optimization/latency.md index 3968279bd7..73d783933c 100644 --- a/content/operate/oss_and_stack/management/optimization/latency.md +++ b/content/operate/oss_and_stack/management/optimization/latency.md @@ -30,7 +30,7 @@ return here to read the full documentation. 2. For EC2 users, make sure you use HVM based modern EC2 instances, like m3.medium. Otherwise fork() is too slow. 3. Transparent huge pages must be disabled from your kernel. Use `echo never > /sys/kernel/mm/transparent_hugepage/enabled` to disable them, and restart your Redis process. 4. If you are using a virtual machine, it is possible that you have an intrinsic latency that has nothing to do with Redis. Check the minimum latency you can expect from your runtime environment using `./redis-cli --intrinsic-latency 100`. Note: you need to run this command in *the server* not in the client. -5. Enable and use the [Latency monitor]({{< baseurl >}}operate/oss_and_stack/management/optimization/latency-monitor) feature of Redis in order to get a human readable description of the latency events and causes in your Redis instance. +5. Enable and use the [Latency monitor]({{< relref "operate/oss_and_stack/management/optimization/latency-monitor" >}}) feature of Redis in order to get a human readable description of the latency events and causes in your Redis instance. In general, use the following table for durability VS latency/performance tradeoffs, ordered from stronger safety to better latency. @@ -59,7 +59,7 @@ Since Redis 2.8.13, Redis provides latency monitoring capabilities that are able to sample different execution paths to understand where the server is blocking. This makes debugging of the problems illustrated in this documentation much simpler, so we suggest enabling latency monitoring -ASAP. Please refer to the [Latency monitor documentation]({{< baseurl >}}operate/oss_and_stack/management/optimization/latency-monitor). +ASAP. Please refer to the [Latency monitor documentation]({{< relref "operate/oss_and_stack/management/optimization/latency-monitor" >}}). While the latency monitoring sampling and reporting capabilities will make it simpler to understand the source of latency in your Redis system, it is still diff --git a/content/operate/oss_and_stack/management/replication.md b/content/operate/oss_and_stack/management/replication.md index 29d3ad280a..0cb93b3475 100644 --- a/content/operate/oss_and_stack/management/replication.md +++ b/content/operate/oss_and_stack/management/replication.md @@ -30,7 +30,7 @@ the [`WAIT`](/commands/wait) command. However [`WAIT`](/commands/wait) is only a specified number of acknowledged copies in the other Redis instances, it does not turn a set of Redis instances into a CP system with strong consistency: acknowledged writes can still be lost during a failover, depending on the exact configuration -of the Redis persistence. However, [WAIT]({{< baseurl >}}commands/wait) dramatically reduces the probability of losing a write after a failure event to specific hard-to-trigger failure modes. +of the Redis persistence. However, [WAIT]({{< relref "commands/wait" >}}) dramatically reduces the probability of losing a write after a failure event to specific hard-to-trigger failure modes. You can check the Redis Sentinel or Redis Cluster documentation for more information about high availability and failover. The rest of this document mainly describes the basic characteristics of Redis basic replication. diff --git a/content/operate/oss_and_stack/management/security/acl.md b/content/operate/oss_and_stack/management/security/acl.md index ac90fcb94b..4a5c546b7e 100644 --- a/content/operate/oss_and_stack/management/security/acl.md +++ b/content/operate/oss_and_stack/management/security/acl.md @@ -448,7 +448,7 @@ The example set of ACL rules is unable to handle a request copying data from `ap However, using key selectors you can define a set of ACL rules that can handle this request `+@all ~app1:* %R~app2:*`. The first pattern is able to match `app1:user` and the second pattern is able to match `app2:user`. -Which type of permission is required for a command is documented through [key specifications]({{< baseurl >}}develop/reference/key-specs#logical-operation-flags). +Which type of permission is required for a command is documented through [key specifications]({{< relref "develop/reference/key-specs#logical-operation-flags" >}}). The type of permission is based off the keys logical operation flags. The insert, update, and delete flags map to the write key permission. The access flag maps to the read key permission. diff --git a/content/operate/oss_and_stack/stack-with-enterprise/bloom/commands.md b/content/operate/oss_and_stack/stack-with-enterprise/bloom/commands.md index 0831fa321d..0b7232b462 100644 --- a/content/operate/oss_and_stack/stack-with-enterprise/bloom/commands.md +++ b/content/operate/oss_and_stack/stack-with-enterprise/bloom/commands.md @@ -18,67 +18,67 @@ The following tables list probabilistic data structure commands. See the command | Command | Redis
Enterprise | Redis
Cloud | Description | |:--------|:----------------------|:-----------------|:------| -| [BF.ADD]({{< baseurl >}}commands/bf.add) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Adds an item to the filter. | -| [BF.EXISTS]({{< baseurl >}}commands/bf.exists) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Checks if an item exists in the filter. | -| [BF.INFO]({{< baseurl >}}commands/bf.info) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Returns information about a Bloom filter. | -| [BF.INSERT]({{< baseurl >}}commands/bf.insert) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Adds multiple items to a filter. If the key does not exist, it creates a new filter. | -| [BF.LOADCHUNK]({{< baseurl >}}commands/bf.loadchunk) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Restores a Bloom filter previously saved with [BF.SCANDUMP]({{< baseurl >}}commands/bf.scandump). | -| [BF.MADD]({{< baseurl >}}commands/bf.madd) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Adds multiple items to the filter. | -| [BF.MEXISTS]({{< baseurl >}}commands/bf.mexists) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | For multiple items, checks if each item exists in the filter. | -| [BF.RESERVE]({{< baseurl >}}commands/bf.reserve) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Creates a Bloom filter. Sets the false positive rate and capacity. | -| [BF.SCANDUMP]({{< baseurl >}}commands/bf.scandump) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Starts an incremental save of a Bloom filter. | +| [BF.ADD]({{< relref "commands/bf.add" >}}) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Adds an item to the filter. | +| [BF.EXISTS]({{< relref "commands/bf.exists" >}}) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Checks if an item exists in the filter. | +| [BF.INFO]({{< relref "commands/bf.info" >}}) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Returns information about a Bloom filter. | +| [BF.INSERT]({{< relref "commands/bf.insert" >}}) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Adds multiple items to a filter. If the key does not exist, it creates a new filter. | +| [BF.LOADCHUNK]({{< relref "commands/bf.loadchunk" >}}) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Restores a Bloom filter previously saved with [BF.SCANDUMP]({{< relref "commands/bf.scandump" >}}). | +| [BF.MADD]({{< relref "commands/bf.madd" >}}) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Adds multiple items to the filter. | +| [BF.MEXISTS]({{< relref "commands/bf.mexists" >}}) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | For multiple items, checks if each item exists in the filter. | +| [BF.RESERVE]({{< relref "commands/bf.reserve" >}}) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Creates a Bloom filter. Sets the false positive rate and capacity. | +| [BF.SCANDUMP]({{< relref "commands/bf.scandump" >}}) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Starts an incremental save of a Bloom filter. | ## Cuckoo filter commands | Command | Redis
Enterprise | Redis
Cloud | Description | |:--------|:----------------------|:-----------------|:------| -| [CF.ADD]({{< baseurl >}}commands/cf.add) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Adds an item to a filter. | -| [CF.ADDNX]({{< baseurl >}}commands/cf.addnx) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Adds an item to a filter only if the item does not already exist. | -| [CF.COUNT]({{< baseurl >}}commands/cf.count) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Returns the probable number of times an item occurs in the filter. | -| [CF.DEL]({{< baseurl >}}commands/cf.del) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Removes one instance of an item from the filter. | -| [CF.EXISTS]({{< baseurl >}}commands/cf.exists) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Checks if an item exists in the filter. | -| [CF.INFO]({{< baseurl >}}commands/cf.info) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Returns information about a cuckoo filter. | -| [CF.INSERT]({{< baseurl >}}commands/cf.insert) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Adds multiple items to a filter. Optionally sets the capacity if the filter does not already exist. | -| [CF.INSERTNX]({{< baseurl >}}commands/cf.insertnx) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Adds multiple items to a filter if they do not already exist. Optionally sets the capacity if the filter does not already exist. | -| [CF.LOADCHUNK]({{< baseurl >}}commands/cf.loadchunk) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Restores a cuckoo filter previously saved with [CF.SCANDUMP]({{< baseurl >}}commands/cf.scandump). | -| [CF.MEXISTS]({{< baseurl >}}commands/cf.mexists) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | For multiple items, checks if each item exists in the filter. | -| [CF.RESERVE]({{< baseurl >}}commands/cf.reserve) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Creates a cuckoo filter and sets its capacity. | -| [CF.SCANDUMP]({{< baseurl >}}commands/cf.scandump) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Starts an incremental save of a cuckoo filter. | +| [CF.ADD]({{< relref "commands/cf.add" >}}) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Adds an item to a filter. | +| [CF.ADDNX]({{< relref "commands/cf.addnx" >}}) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Adds an item to a filter only if the item does not already exist. | +| [CF.COUNT]({{< relref "commands/cf.count" >}}) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Returns the probable number of times an item occurs in the filter. | +| [CF.DEL]({{< relref "commands/cf.del" >}}) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Removes one instance of an item from the filter. | +| [CF.EXISTS]({{< relref "commands/cf.exists" >}}) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Checks if an item exists in the filter. | +| [CF.INFO]({{< relref "commands/cf.info" >}}) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Returns information about a cuckoo filter. | +| [CF.INSERT]({{< relref "commands/cf.insert" >}}) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Adds multiple items to a filter. Optionally sets the capacity if the filter does not already exist. | +| [CF.INSERTNX]({{< relref "commands/cf.insertnx" >}}) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Adds multiple items to a filter if they do not already exist. Optionally sets the capacity if the filter does not already exist. | +| [CF.LOADCHUNK]({{< relref "commands/cf.loadchunk" >}}) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Restores a cuckoo filter previously saved with [CF.SCANDUMP]({{< relref "commands/cf.scandump" >}}). | +| [CF.MEXISTS]({{< relref "commands/cf.mexists" >}}) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | For multiple items, checks if each item exists in the filter. | +| [CF.RESERVE]({{< relref "commands/cf.reserve" >}}) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Creates a cuckoo filter and sets its capacity. | +| [CF.SCANDUMP]({{< relref "commands/cf.scandump" >}}) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Starts an incremental save of a cuckoo filter. | ## Count-min sketch commands | Command | Redis
Enterprise | Redis
Cloud | Description | |:--------|:----------------------|:-----------------|:------| -| [CMS.INCRBY]({{< baseurl >}}commands/cms.incrby) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Increases item counts. | -| [CMS.INFO]({{< baseurl >}}commands/cms.info) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Returns width, depth, and total count of the sketch. | -| [CMS.INITBYDIM]({{< baseurl >}}commands/cms.initbydim) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Initializes a count-min sketch to the specified dimensions (width and depth). | -| [CMS.INITBYPROB]({{< baseurl >}}commands/cms.initbyprob) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Initializes a count-min sketch to allow the specified overestimation percent for the item count and the probability of overestimation. | -| [CMS.MERGE]({{< baseurl >}}commands/cms.merge) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Merges several sketches into one sketch. | -| [CMS.QUERY]({{< baseurl >}}commands/cms.query) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Returns the count for one or more items in a sketch. | +| [CMS.INCRBY]({{< relref "commands/cms.incrby" >}}) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Increases item counts. | +| [CMS.INFO]({{< relref "commands/cms.info" >}}) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Returns width, depth, and total count of the sketch. | +| [CMS.INITBYDIM]({{< relref "commands/cms.initbydim" >}}) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Initializes a count-min sketch to the specified dimensions (width and depth). | +| [CMS.INITBYPROB]({{< relref "commands/cms.initbyprob" >}}) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Initializes a count-min sketch to allow the specified overestimation percent for the item count and the probability of overestimation. | +| [CMS.MERGE]({{< relref "commands/cms.merge" >}}) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Merges several sketches into one sketch. | +| [CMS.QUERY]({{< relref "commands/cms.query" >}}) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Returns the count for one or more items in a sketch. | ## Top-k commands | Command | Redis
Enterprise | Redis
Cloud | Description | |:--------|:----------------------|:-----------------|:------| -| [TOPK.ADD]({{< baseurl >}}commands/topk.add) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Adds an item to the data structure. | -| [TOPK.COUNT]({{< baseurl >}}commands/topk.count) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Returns probable item counts. | -| [TOPK.INCRBY]({{< baseurl >}}commands/topk.incrby) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Increases the score of an item by the specified number. | -| [TOPK.INFO]({{< baseurl >}}commands/topk.info) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Returns the number of required items (k), width, depth, and decay values. | -| [TOPK.LIST]({{< baseurl >}}commands/topk.list) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Returns the keys of items in the top-k list. Optionally returns their item counts. | -| [TOPK.QUERY]({{< baseurl >}}commands/topk.query) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Checks whether an item is one of top-k items. | -| [TOPK.RESERVE]({{< baseurl >}}commands/topk.reserve) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Initializes a top-k with the specified number of top occurring items to keep, width, depth, and decay. | +| [TOPK.ADD]({{< relref "commands/topk.add" >}}) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Adds an item to the data structure. | +| [TOPK.COUNT]({{< relref "commands/topk.count" >}}) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Returns probable item counts. | +| [TOPK.INCRBY]({{< relref "commands/topk.incrby" >}}) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Increases the score of an item by the specified number. | +| [TOPK.INFO]({{< relref "commands/topk.info" >}}) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Returns the number of required items (k), width, depth, and decay values. | +| [TOPK.LIST]({{< relref "commands/topk.list" >}}) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Returns the keys of items in the top-k list. Optionally returns their item counts. | +| [TOPK.QUERY]({{< relref "commands/topk.query" >}}) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Checks whether an item is one of top-k items. | +| [TOPK.RESERVE]({{< relref "commands/topk.reserve" >}}) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Initializes a top-k with the specified number of top occurring items to keep, width, depth, and decay. | ## T-digest sketch commands | Command | Redis
Enterprise | Redis
Cloud | Description | |:--------|:----------------------|:-----------------|:------| -| [TDIGEST.ADD]({{< baseurl >}}commands/tdigest.add) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Adds one or more samples to a t-digest sketch. | -| [TDIGEST.CDF]({{< baseurl >}}commands/tdigest.cdf) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Estimates the fraction of all observations which are less than or equal to the specified value. | -| [TDIGEST.CREATE]({{< baseurl >}}commands/tdigest.create) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Allocates memory and initializes a t-digest sketch. | -| [TDIGEST.INFO]({{< baseurl >}}commands/tdigest.info) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Returns information about the t-digest sketch. | -| [TDIGEST.MAX]({{< baseurl >}}commands/tdigest.max) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Returns the maximum value from the sketch. | -| [TDIGEST.MERGE]({{< baseurl >}}commands/tdigest.merge) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Copies values from one sketch to another. | -| [TDIGEST.MIN]({{< baseurl >}}commands/tdigest.min) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Returns the minimum value from the sketch. | -| [TDIGEST.QUANTILE]({{< baseurl >}}commands/tdigest.quantile) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Estimates one or more cutoffs. | -| [TDIGEST.RESET]({{< baseurl >}}commands/tdigest.reset) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Resets the sketch and reinitializes it. | -| [TDIGEST.TRIMMED_MEAN]({{< baseurl >}}commands/tdigest.trimmed_mean) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Estimates the mean value from the sketch, excluding values outside the specified range. | +| [TDIGEST.ADD]({{< relref "commands/tdigest.add" >}}) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Adds one or more samples to a t-digest sketch. | +| [TDIGEST.CDF]({{< relref "commands/tdigest.cdf" >}}) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Estimates the fraction of all observations which are less than or equal to the specified value. | +| [TDIGEST.CREATE]({{< relref "commands/tdigest.create" >}}) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Allocates memory and initializes a t-digest sketch. | +| [TDIGEST.INFO]({{< relref "commands/tdigest.info" >}}) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Returns information about the t-digest sketch. | +| [TDIGEST.MAX]({{< relref "commands/tdigest.max" >}}) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Returns the maximum value from the sketch. | +| [TDIGEST.MERGE]({{< relref "commands/tdigest.merge" >}}) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Copies values from one sketch to another. | +| [TDIGEST.MIN]({{< relref "commands/tdigest.min" >}}) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Returns the minimum value from the sketch. | +| [TDIGEST.QUANTILE]({{< relref "commands/tdigest.quantile" >}}) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Estimates one or more cutoffs. | +| [TDIGEST.RESET]({{< relref "commands/tdigest.reset" >}}) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Resets the sketch and reinitializes it. | +| [TDIGEST.TRIMMED_MEAN]({{< relref "commands/tdigest.trimmed_mean" >}}) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Estimates the mean value from the sketch, excluding values outside the specified range. | diff --git a/content/operate/oss_and_stack/stack-with-enterprise/deprecated-features/graph/graph-quickstart.md b/content/operate/oss_and_stack/stack-with-enterprise/deprecated-features/graph/graph-quickstart.md index 60ac0fdc34..9af8dca8e6 100644 --- a/content/operate/oss_and_stack/stack-with-enterprise/deprecated-features/graph/graph-quickstart.md +++ b/content/operate/oss_and_stack/stack-with-enterprise/deprecated-features/graph/graph-quickstart.md @@ -217,7 +217,7 @@ Alex's updated friend count: [[1]] You can use the [Redis Insight]({{< relref "/develop/tools/insight" >}}) workbench to visualize the relationships between the nodes of your graph. -1. Connect to your database with Redis Insight. You can [connect manually]({{< baseurl >}}develop/connect/insight/#add-a-standalone-redis-database) or use the [auto-discovery]({{< baseurl >}}develop/connect/insight/#auto-discovery-for-redis-cloud-databases) feature. +1. Connect to your database with Redis Insight. You can [connect manually]({{< relref "develop/connect/insight/#add-a-standalone-redis-database" >}}) or use the [auto-discovery]({{< relref "develop/connect/insight/#auto-discovery-for-redis-cloud-databases" >}}) feature. 1. Select the **Workbench** button: diff --git a/content/operate/oss_and_stack/stack-with-enterprise/deprecated-features/triggers-and-functions/Debugging.md b/content/operate/oss_and_stack/stack-with-enterprise/deprecated-features/triggers-and-functions/Debugging.md index 313d566261..048d89527f 100644 --- a/content/operate/oss_and_stack/stack-with-enterprise/deprecated-features/triggers-and-functions/Debugging.md +++ b/content/operate/oss_and_stack/stack-with-enterprise/deprecated-features/triggers-and-functions/Debugging.md @@ -46,7 +46,7 @@ After loading the library and executing the function with `TFCALL`, you'll see s ### Use Redis pub/sub -If you don't have access to your Redis database log files, you can use pub/sub. The following example demonstrates how to use the [client.call]({{< baseurl >}}develop/interact/programmability/triggers-and-functions/concepts/javascript_api/#clientcall) API to publish to a pub/sub channel. +If you don't have access to your Redis database log files, you can use pub/sub. The following example demonstrates how to use the [client.call]({{< relref "develop/interact/programmability/triggers-and-functions/concepts/javascript_api/#clientcall" >}}) API to publish to a pub/sub channel. ```javascript #!js api_version=1.0 name=lib diff --git a/content/operate/oss_and_stack/stack-with-enterprise/deprecated-features/triggers-and-functions/Quick_Start_CLI.md b/content/operate/oss_and_stack/stack-with-enterprise/deprecated-features/triggers-and-functions/Quick_Start_CLI.md index 83ca1c95d0..1c49062d23 100644 --- a/content/operate/oss_and_stack/stack-with-enterprise/deprecated-features/triggers-and-functions/Quick_Start_CLI.md +++ b/content/operate/oss_and_stack/stack-with-enterprise/deprecated-features/triggers-and-functions/Quick_Start_CLI.md @@ -98,7 +98,7 @@ redis-cli -x TFUNCTION LOAD REPLACE < ./main.js Functions within Redis can respond to events using keyspace triggers. While the majority of these events are initiated by command invocations, they also include events that occur when a key expires or is removed from the database. -For the full list of supported events, please refer to the [Redis keyspace notifications page]({{< baseurl >}}develop/use/keyspace-notifications#events-generated-by-different-commands/?utm_source=redis\&utm_medium=app\&utm_campaign=redisinsight_triggers_and_functions_guide). +For the full list of supported events, please refer to the [Redis keyspace notifications page]({{< relref "develop/use/keyspace-notifications#events-generated-by-different-commands/?utm_source=redis\&utm_medium=app\&utm_campaign=redisinsight_triggers_and_functions_guide" >}}). The following code creates a new keyspace trigger that adds a new field to a new or updated hash with the latest update time. diff --git a/content/operate/oss_and_stack/stack-with-enterprise/deprecated-features/triggers-and-functions/Quick_Start_RI.md b/content/operate/oss_and_stack/stack-with-enterprise/deprecated-features/triggers-and-functions/Quick_Start_RI.md index 02e17892a3..35b9b97659 100644 --- a/content/operate/oss_and_stack/stack-with-enterprise/deprecated-features/triggers-and-functions/Quick_Start_RI.md +++ b/content/operate/oss_and_stack/stack-with-enterprise/deprecated-features/triggers-and-functions/Quick_Start_RI.md @@ -59,7 +59,7 @@ Click on the **+ Add Library** button as before and, instead of adding the code Functions within Redis can respond to events using keyspace triggers. While the majority of these events are initiated by command invocations, they also include events that occur when a key expires or is removed from the database. -For the full list of supported events, please refer to the [Redis keyspace notifications page]({{< baseurl >}}develop/use/keyspace-notifications#events-generated-by-different-commands/?utm_source=redis\&utm_medium=app\&utm_campaign=redisinsight_triggers_and_functions_guide). +For the full list of supported events, please refer to the [Redis keyspace notifications page]({{< relref "develop/use/keyspace-notifications#events-generated-by-different-commands/?utm_source=redis\&utm_medium=app\&utm_campaign=redisinsight_triggers_and_functions_guide" >}}). The following code creates a new keyspace trigger that adds a new field to a new or updated hash with the latest update time. diff --git a/content/operate/oss_and_stack/stack-with-enterprise/deprecated-features/triggers-and-functions/concepts/Cluster_Support.md b/content/operate/oss_and_stack/stack-with-enterprise/deprecated-features/triggers-and-functions/concepts/Cluster_Support.md index 8880a1a60f..9729f89bb2 100644 --- a/content/operate/oss_and_stack/stack-with-enterprise/deprecated-features/triggers-and-functions/concepts/Cluster_Support.md +++ b/content/operate/oss_and_stack/stack-with-enterprise/deprecated-features/triggers-and-functions/concepts/Cluster_Support.md @@ -109,7 +109,7 @@ The remote function arguments and results are serialized in the following way: ## Execution timeout -Remote functions will not be permitted to run forever and will timeout. The timeout period can be configured using [remote-task-default-timeout]({{< baseurl >}}develop/interact/programmability/triggers-and-functions/configuration/#remote-task-default-timeout). +Remote functions will not be permitted to run forever and will timeout. The timeout period can be configured using [remote-task-default-timeout]({{< relref "develop/interact/programmability/triggers-and-functions/configuration/#remote-task-default-timeout" >}}). When using `async_client.runOnShards` API, the timeout will be added as error to the error array. When using `async_client.runOnKey`, a timeout will cause an exception to be raised. ## Remote function limitations diff --git a/content/operate/oss_and_stack/stack-with-enterprise/deprecated-features/triggers-and-functions/concepts/triggers/KeySpace_Triggers.md b/content/operate/oss_and_stack/stack-with-enterprise/deprecated-features/triggers-and-functions/concepts/triggers/KeySpace_Triggers.md index 674dbc4749..51fa1f8626 100644 --- a/content/operate/oss_and_stack/stack-with-enterprise/deprecated-features/triggers-and-functions/concepts/triggers/KeySpace_Triggers.md +++ b/content/operate/oss_and_stack/stack-with-enterprise/deprecated-features/triggers-and-functions/concepts/triggers/KeySpace_Triggers.md @@ -22,7 +22,7 @@ Keyspace triggers allow you to register a function that will be executed wheneve 1. Expired: This event is fired when a key expires from the database. 2. Evicted: This event is fired when a key is evicted from the database. -For a complete list of supported events, please refer to the [Redis keyspace notifications page]({{< baseurl >}}develop/use/keyspace-notifications#events-generated-by-different-commands). +For a complete list of supported events, please refer to the [Redis keyspace notifications page]({{< relref "develop/use/keyspace-notifications#events-generated-by-different-commands" >}}). To register a keyspace trigger, you need to use the `redis.registerKeySpaceTrigger` API when loading your library. The following example demonstrates how to register a database trigger that adds a "last updated" field whenever a hash key is modified: diff --git a/content/operate/oss_and_stack/stack-with-enterprise/deprecated-features/triggers-and-functions/concepts/triggers/Stream_Triggers.md b/content/operate/oss_and_stack/stack-with-enterprise/deprecated-features/triggers-and-functions/concepts/triggers/Stream_Triggers.md index 9297fb0c14..2f0aee1f05 100644 --- a/content/operate/oss_and_stack/stack-with-enterprise/deprecated-features/triggers-and-functions/concepts/triggers/Stream_Triggers.md +++ b/content/operate/oss_and_stack/stack-with-enterprise/deprecated-features/triggers-and-functions/concepts/triggers/Stream_Triggers.md @@ -21,7 +21,7 @@ Redis Stack's triggers and functions feature comes with a full stream API to pro ## Register a stream consumer -Triggers and functions provide an API that allows to register a stream trigger. Do not get confused with [Redis streams consumer groups]({{< baseurl >}}develop/data-types/streams#consumer-groups), triggers and functions uses the Redis Module API to efficiently read the stream and manage its consumers. This approach gives a much better performance as there is no need to invoke any Redis commands in order to read from the stream. Lets see a simple example: +Triggers and functions provide an API that allows to register a stream trigger. Do not get confused with [Redis streams consumer groups]({{< relref "develop/data-types/streams#consumer-groups" >}}), triggers and functions uses the Redis Module API to efficiently read the stream and manage its consumers. This approach gives a much better performance as there is no need to invoke any Redis commands in order to read from the stream. Lets see a simple example: ```js #!js api_version=1.0 name=myFirstLibrary diff --git a/content/operate/oss_and_stack/stack-with-enterprise/json/commands.md b/content/operate/oss_and_stack/stack-with-enterprise/json/commands.md index 3cd6d10da1..02be813e88 100644 --- a/content/operate/oss_and_stack/stack-with-enterprise/json/commands.md +++ b/content/operate/oss_and_stack/stack-with-enterprise/json/commands.md @@ -15,27 +15,27 @@ The following table lists JSON commands. See the command links for more informat | Command | Redis
Enterprise | Redis
Cloud | Description | |:--------|:----------------------|:-----------------|:------| -| [JSON.ARRAPPEND]({{< baseurl >}}commands/json.arrappend) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Appends an element to a JSON array. | -| [JSON.ARRINDEX]({{< baseurl >}}commands/json.arrindex) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Returns the index of a value's first occurrence in a JSON array. | -| [JSON.ARRINSERT]({{< baseurl >}}commands/json.arrinsert) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Inserts JSON values into a JSON array before the given index. | -| [JSON.ARRLEN]({{< baseurl >}}commands/json.arrlen) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Returns the length of a JSON array. | -| [JSON.ARRPOP]({{< baseurl >}}commands/json.arrpop) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Removes and returns an element located at the index in the JSON array. | -| [JSON.ARRTRIM]({{< baseurl >}}commands/json.arrtrim) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Trims a JSON array so that it contains only the specified inclusive range of elements. | -| [JSON.CLEAR]({{< baseurl >}}commands/json.clear) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Clears container values (arrays/objects) and sets numeric values to 0. | -| [JSON.DEBUG]({{< baseurl >}}commands/json.debug) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Debugging container command. | -| [JSON.DEBUG HELP]({{< baseurl >}}commands/json.debug-help) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Returns helpful information about the [JSON.DEBUG]({{< baseurl >}}commands/json.debug) command. | -| [JSON.DEBUG MEMORY]({{< baseurl >}}commands/json.debug-memory/) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Reports a JSON element's memory usage in bytes. | -| [JSON.DEL]({{< baseurl >}}commands/json.del) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Removes a JSON element. | -| [JSON.FORGET]({{< baseurl >}}commands/json.forget) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Removes a JSON element, the same as [JSON.DEL]({{< baseurl >}}commands/json.del). | -| [JSON.GET]({{< baseurl >}}commands/json.get) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Returns the value of an element in JSON-serialized form. | -| [JSON.MGET]({{< baseurl >}}commands/json.mget) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Returns the values of multiple elements. | -| [JSON.NUMINCRBY]({{< baseurl >}}commands/json.numincrby) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Increments the number stored at path by the specified number. | -| [JSON.NUMMULTBY]({{< baseurl >}}commands/json.nummultby) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Multiplies the number stored at path by the specified number. (deprecated as of RedisJSON v2.0) | -| [JSON.OBJKEYS]({{< baseurl >}}commands/json.objkeys) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Returns the keys contained in the specified JSON object. | -| [JSON.OBJLEN]({{< baseurl >}}commands/json.objlen) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Returns the number of keys in the specified JSON object. | -| [JSON.RESP]({{< baseurl >}}commands/json.resp) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Returns a JSON element in [Redis Serialization Protocol (RESP)]({{< relref "/develop/reference/protocol-spec" >}}) format. | -| [JSON.SET]({{< baseurl >}}commands/json.set) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Sets the value of a JSON element. | -| [JSON.STRAPPEND]({{< baseurl >}}commands/json.strappend) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Appends the given string to the specified key's existing strings. | -| [JSON.STRLEN]({{< baseurl >}}commands/json.strlen) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Returns the length of a string. | -| [JSON.TOGGLE]({{< baseurl >}}commands/json.toggle) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | If the boolean is `true`, changes it to `false`. If the boolean is `false`, changes it to `true`. | -| [JSON.TYPE]({{< baseurl >}}commands/json.type) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Returns a JSON element's type. | +| [JSON.ARRAPPEND]({{< relref "commands/json.arrappend" >}}) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Appends an element to a JSON array. | +| [JSON.ARRINDEX]({{< relref "commands/json.arrindex" >}}) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Returns the index of a value's first occurrence in a JSON array. | +| [JSON.ARRINSERT]({{< relref "commands/json.arrinsert" >}}) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Inserts JSON values into a JSON array before the given index. | +| [JSON.ARRLEN]({{< relref "commands/json.arrlen" >}}) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Returns the length of a JSON array. | +| [JSON.ARRPOP]({{< relref "commands/json.arrpop" >}}) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Removes and returns an element located at the index in the JSON array. | +| [JSON.ARRTRIM]({{< relref "commands/json.arrtrim" >}}) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Trims a JSON array so that it contains only the specified inclusive range of elements. | +| [JSON.CLEAR]({{< relref "commands/json.clear" >}}) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Clears container values (arrays/objects) and sets numeric values to 0. | +| [JSON.DEBUG]({{< relref "commands/json.debug" >}}) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Debugging container command. | +| [JSON.DEBUG HELP]({{< relref "commands/json.debug-help" >}}) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Returns helpful information about the [JSON.DEBUG]({{< relref "commands/json.debug" >}}) command. | +| [JSON.DEBUG MEMORY]({{< relref "commands/json.debug-memory/" >}}) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Reports a JSON element's memory usage in bytes. | +| [JSON.DEL]({{< relref "commands/json.del" >}}) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Removes a JSON element. | +| [JSON.FORGET]({{< relref "commands/json.forget" >}}) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Removes a JSON element, the same as [JSON.DEL]({{< relref "commands/json.del" >}}). | +| [JSON.GET]({{< relref "commands/json.get" >}}) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Returns the value of an element in JSON-serialized form. | +| [JSON.MGET]({{< relref "commands/json.mget" >}}) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Returns the values of multiple elements. | +| [JSON.NUMINCRBY]({{< relref "commands/json.numincrby" >}}) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Increments the number stored at path by the specified number. | +| [JSON.NUMMULTBY]({{< relref "commands/json.nummultby" >}}) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Multiplies the number stored at path by the specified number. (deprecated as of RedisJSON v2.0) | +| [JSON.OBJKEYS]({{< relref "commands/json.objkeys" >}}) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Returns the keys contained in the specified JSON object. | +| [JSON.OBJLEN]({{< relref "commands/json.objlen" >}}) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Returns the number of keys in the specified JSON object. | +| [JSON.RESP]({{< relref "commands/json.resp" >}}) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Returns a JSON element in [Redis Serialization Protocol (RESP)]({{< relref "/develop/reference/protocol-spec" >}}) format. | +| [JSON.SET]({{< relref "commands/json.set" >}}) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Sets the value of a JSON element. | +| [JSON.STRAPPEND]({{< relref "commands/json.strappend" >}}) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Appends the given string to the specified key's existing strings. | +| [JSON.STRLEN]({{< relref "commands/json.strlen" >}}) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Returns the length of a string. | +| [JSON.TOGGLE]({{< relref "commands/json.toggle" >}}) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | If the boolean is `true`, changes it to `false`. If the boolean is `false`, changes it to `true`. | +| [JSON.TYPE]({{< relref "commands/json.type" >}}) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Returns a JSON element's type. | diff --git a/content/operate/oss_and_stack/stack-with-enterprise/release-notes/redisbloom/redisbloom-2.2-release-notes.md b/content/operate/oss_and_stack/stack-with-enterprise/release-notes/redisbloom/redisbloom-2.2-release-notes.md index fa47ab4cc0..04ad729457 100644 --- a/content/operate/oss_and_stack/stack-with-enterprise/release-notes/redisbloom/redisbloom-2.2-release-notes.md +++ b/content/operate/oss_and_stack/stack-with-enterprise/release-notes/redisbloom/redisbloom-2.2-release-notes.md @@ -31,7 +31,7 @@ Details: - Bug fixes: - [#481](https://github.com/RedisBloom/RedisBloom/issues/481) CF crashes on expansion 0 - - [#478](https://github.com/RedisBloom/RedisBloom/pull/478) [`BF.INFO`]({{< baseurl >}}commands/bf.info) reports an inaccurate result about the memory footprint + - [#478](https://github.com/RedisBloom/RedisBloom/pull/478) [`BF.INFO`]({{< relref "commands/bf.info" >}}) reports an inaccurate result about the memory footprint ## v2.2.17 (June 2022) @@ -43,10 +43,10 @@ Details: - Bug fixes: - - [#451](https://github.com/RedisBloom/RedisBloom/pull/451) [`TOPK.INCRBY`]({{< baseurl >}}commands/topk.incrby): fix calculation when old fingerprint count is reduced to 0 - - [#462](https://github.com/RedisBloom/RedisBloom/pull/462) [`CF.RESERVE`]({{< baseurl >}}commands/cf.reserve): fix potential crash on incorrect number of parameters - - [#434](https://github.com/RedisBloom/RedisBloom/pull/434) [`CF.INSERT`]({{< baseurl >}}commands/cf.insert): fix crash when capacity is negative - - [#450](https://github.com/RedisBloom/RedisBloom/pull/450) [`TOPK.INCRBY`]({{< baseurl >}}commands/topk.incrby): limit increment to 100,000 to prevent potential long freezes + - [#451](https://github.com/RedisBloom/RedisBloom/pull/451) [`TOPK.INCRBY`]({{< relref "commands/topk.incrby" >}}): fix calculation when old fingerprint count is reduced to 0 + - [#462](https://github.com/RedisBloom/RedisBloom/pull/462) [`CF.RESERVE`]({{< relref "commands/cf.reserve" >}}): fix potential crash on incorrect number of parameters + - [#434](https://github.com/RedisBloom/RedisBloom/pull/434) [`CF.INSERT`]({{< relref "commands/cf.insert" >}}): fix crash when capacity is negative + - [#450](https://github.com/RedisBloom/RedisBloom/pull/450) [`TOPK.INCRBY`]({{< relref "commands/topk.incrby" >}}): limit increment to 100,000 to prevent potential long freezes ## v2.2.15 (May 2022) diff --git a/content/operate/oss_and_stack/stack-with-enterprise/release-notes/redisbloom/redisbloom-2.4-release-notes.md b/content/operate/oss_and_stack/stack-with-enterprise/release-notes/redisbloom/redisbloom-2.4-release-notes.md index 5c745cc373..bac9aec478 100644 --- a/content/operate/oss_and_stack/stack-with-enterprise/release-notes/redisbloom/redisbloom-2.4-release-notes.md +++ b/content/operate/oss_and_stack/stack-with-enterprise/release-notes/redisbloom/redisbloom-2.4-release-notes.md @@ -123,11 +123,11 @@ Details: - Bug fixes: - - [#609](https://github.com/RedisBloom/RedisBloom/issues/609) [CF.INFO]({{< baseurl >}}commands/cf.info) - incorrect information for large filters + - [#609](https://github.com/RedisBloom/RedisBloom/issues/609) [CF.INFO]({{< relref "commands/cf.info" >}}) - incorrect information for large filters - Improvements: - - [#389](https://github.com/RedisBloom/RedisBloom/issues/389) Introduce [BF.CARD]({{< baseurl >}}commands/bf.card) to retrieve the cardinality of a Bloom filter or 0 when such key does not exist + - [#389](https://github.com/RedisBloom/RedisBloom/issues/389) Introduce [BF.CARD]({{< relref "commands/bf.card" >}}) to retrieve the cardinality of a Bloom filter or 0 when such key does not exist ## v2.4 GA (v2.4.3) (November 2022) @@ -155,15 +155,15 @@ Using t-digest is simple and straightforward: `TDIGEST.CREATE key [COMPRESSION compression]` initializes a new t-digest sketch (and errors if the key already exists). The `COMPRESSION` argument is used to specify the tradeoff between accuracy and memory consumption. The default is 100. Higher values mean more accuracy. - `TDIGEST.ADD key value...` adds new observations (floating-point values) to the sketch. You can repeat calling [TDIGEST.ADD]({{< baseurl >}}commands/tdigest.add) whenever new observations are available. + `TDIGEST.ADD key value...` adds new observations (floating-point values) to the sketch. You can repeat calling [TDIGEST.ADD]({{< relref "commands/tdigest.add" >}}) whenever new observations are available. * **Estimating fractions or ranks by values** Use `TDIGEST.CDF key value...` to retrieve, for each input **value**, an estimation of the **fraction** of (observations **smaller** than the given value + half the observations equal to the given value). - `TDIGEST.RANK key value...` is similar to [TDIGEST.CDF]({{< baseurl >}}commands/tdigest.cdf), but used for estimating the number of observations instead of the fraction of observations. More accurately it returns, for each input **value**, an estimation of the **number** of (observations **smaller** than a given value + half the observations equal to the given value). + `TDIGEST.RANK key value...` is similar to [TDIGEST.CDF]({{< relref "commands/tdigest.cdf" >}}), but used for estimating the number of observations instead of the fraction of observations. More accurately it returns, for each input **value**, an estimation of the **number** of (observations **smaller** than a given value + half the observations equal to the given value). - And lastly, `TDIGEST.REVRANK key value...` is similar to [TDIGEST.RANK]({{< baseurl >}}commands/tdigest.rank), but returns, for each input **value**, an estimation of the **number** of (observations **larger** than a given value + half the observations equal to the given value). + And lastly, `TDIGEST.REVRANK key value...` is similar to [TDIGEST.RANK]({{< relref "commands/tdigest.rank" >}}), but returns, for each input **value**, an estimation of the **number** of (observations **larger** than a given value + half the observations equal to the given value). * **Estimating values by fractions or ranks** diff --git a/content/operate/oss_and_stack/stack-with-enterprise/release-notes/redisearch/redisearch-2.4-release-notes.md b/content/operate/oss_and_stack/stack-with-enterprise/release-notes/redisearch/redisearch-2.4-release-notes.md index bb0382b4f1..c99590ea7c 100644 --- a/content/operate/oss_and_stack/stack-with-enterprise/release-notes/redisearch/redisearch-2.4-release-notes.md +++ b/content/operate/oss_and_stack/stack-with-enterprise/release-notes/redisearch/redisearch-2.4-release-notes.md @@ -227,21 +227,21 @@ All VSS queries or any query using the `PARAMS` option must use Dialect version Hybrid queries are often used in modern ecommerce search applications featuring “visual” similarity plus metadata similarity. For example, you can use a single hybrid query to find products that are visually similar to a given image within a price range and/or geo-location. -- Use [`FT.CONFIG SET`]({{< baseurl >}}commands/ft.config-set) to set `DEFAULT_DIALECT` at the module level. By default, `DEFAULT_DIALECT` is set to 1. +- Use [`FT.CONFIG SET`]({{< relref "commands/ft.config-set" >}}) to set `DEFAULT_DIALECT` at the module level. By default, `DEFAULT_DIALECT` is set to 1. - Override `DIALECT`: It is possible to override the module-level dialect for a specific command at runtime. You can specify the dialect when executing any of the following commands: - - [`FT.SEARCH`]({{< baseurl >}}commands/ft.search) + - [`FT.SEARCH`]({{< relref "commands/ft.search" >}}) - - [`FT.AGGREGATE`]({{< baseurl >}}commands/ft.aggregate) + - [`FT.AGGREGATE`]({{< relref "commands/ft.aggregate" >}}) - - [`FT.EXPLAIN`]({{< baseurl >}}commands/ft.explain) + - [`FT.EXPLAIN`]({{< relref "commands/ft.explain" >}}) - - [`FT.EXPLAINCLI`]({{< baseurl >}}commands/ft.explaincli) + - [`FT.EXPLAINCLI`]({{< relref "commands/ft.explaincli" >}}) - - [`FT.SPELLCHECK`]({{< baseurl >}}commands/ft.spellcheck) + - [`FT.SPELLCHECK`]({{< relref "commands/ft.spellcheck" >}}) If you do not specify dialect when running any of these commands, they will use the default module-level dialect value. diff --git a/content/operate/oss_and_stack/stack-with-enterprise/release-notes/redisearch/redisearch-2.8-release-notes.md b/content/operate/oss_and_stack/stack-with-enterprise/release-notes/redisearch/redisearch-2.8-release-notes.md index 583fd5dd76..6ab49ea0e9 100644 --- a/content/operate/oss_and_stack/stack-with-enterprise/release-notes/redisearch/redisearch-2.8-release-notes.md +++ b/content/operate/oss_and_stack/stack-with-enterprise/release-notes/redisearch/redisearch-2.8-release-notes.md @@ -298,11 +298,11 @@ Features: - Introduce support for geo polygon shapes and queries: - - Adding `GEOSHAPE` [field type]({{< baseurl >}}commands/ft.create) to map polygons in the `SCHEMA` on `FT.CREATE` (MOD-4798) + - Adding `GEOSHAPE` [field type]({{< relref "commands/ft.create" >}}) to map polygons in the `SCHEMA` on `FT.CREATE` (MOD-4798) - Support for polygons `POLYGON` and `POINT` using [WKT notation](https://en.wikipedia.org/wiki/Well-known_text_representation_of_geometry), for example `POLYGON((lon1 lat1, lon2 lat2, ...))` - - Adjust the [query syntax]({{< baseurl >}}commands/ft.search#examples) on `FT.SEARCH` for polygons using the predicate `@geom:[OPERATOR $poly]` and defining polygon in WKT format as `PARAMS 2 poly "POLYGON((10 20, ...))"` using `DIALECT 3` + - Adjust the [query syntax]({{< relref "commands/ft.search#examples" >}}) on `FT.SEARCH` for polygons using the predicate `@geom:[OPERATOR $poly]` and defining polygon in WKT format as `PARAMS 2 poly "POLYGON((10 20, ...))"` using `DIALECT 3` - Initially `WITHIN` and `CONTAINS` operators with `GEOSHAPES` for now diff --git a/content/operate/oss_and_stack/stack-with-enterprise/release-notes/redisjson/redisjson-2.6-release-notes.md b/content/operate/oss_and_stack/stack-with-enterprise/release-notes/redisjson/redisjson-2.6-release-notes.md index 5bbef24c3d..cb02fbb478 100644 --- a/content/operate/oss_and_stack/stack-with-enterprise/release-notes/redisjson/redisjson-2.6-release-notes.md +++ b/content/operate/oss_and_stack/stack-with-enterprise/release-notes/redisjson/redisjson-2.6-release-notes.md @@ -123,7 +123,7 @@ RedisJSON 2.6 introduces support for RESP3 and new commands. ### What's new in 2.6 -- Introduce [`JSON.MERGE`]({{< baseurl >}}commands/json.merge) in compliance with [RFC 7396](https://datatracker.ietf.org/doc/html/rfc7396), supporting: +- Introduce [`JSON.MERGE`]({{< relref "commands/json.merge" >}}) in compliance with [RFC 7396](https://datatracker.ietf.org/doc/html/rfc7396), supporting: - Creating new attributes on an existing JSON document @@ -133,7 +133,7 @@ RedisJSON 2.6 introduces support for RESP3 and new commands. - Array update - replacing an entire array with the new value -- Introduce [`JSON.MSET`]({{< baseurl >}}commands/json.mset), supporting atomic multiple sets for keys in the same hash slot +- Introduce [`JSON.MSET`]({{< relref "commands/json.mset" >}}), supporting atomic multiple sets for keys in the same hash slot - New `FORMAT` argument in `JSON.ARRPOP` and `JSON.GET` to retrieve the results as JSON strings or RESP3 hierarchical structures (RESP3 only) diff --git a/content/operate/oss_and_stack/stack-with-enterprise/release-notes/redistimeseries/redistimeseries-1.6-release-notes.md b/content/operate/oss_and_stack/stack-with-enterprise/release-notes/redistimeseries/redistimeseries-1.6-release-notes.md index 42c3de252f..1207e43ec1 100644 --- a/content/operate/oss_and_stack/stack-with-enterprise/release-notes/redistimeseries/redistimeseries-1.6-release-notes.md +++ b/content/operate/oss_and_stack/stack-with-enterprise/release-notes/redistimeseries/redistimeseries-1.6-release-notes.md @@ -55,8 +55,8 @@ Details: - Bug fixes: - [#1203](https://github.com/RedisTimeSeries/RedisTimeSeries/pull/1203) Compaction rules are not replicated (Replica Of) on Redis Enterprise - - [#1204](https://github.com/RedisTimeSeries/RedisTimeSeries/issues/1204) When the last sample is deleted with [`TS.DEL`]({{< baseurl >}}commands/ts.del), it may still be accessible with [`TS.GET`]({{< baseurl >}}commands/ts.get) - - [#1226](https://github.com/RedisTimeSeries/RedisTimeSeries/pull/1226) [`TS.MRANGE`]({{< baseurl >}}commands/ts.mrange), [`TS.MREVRANGE`]({{< baseurl >}}commands/ts.mrevrange): on a multi-shard environment, some chunks may be skipped + - [#1204](https://github.com/RedisTimeSeries/RedisTimeSeries/issues/1204) When the last sample is deleted with [`TS.DEL`]({{< relref "commands/ts.del" >}}), it may still be accessible with [`TS.GET`]({{< relref "commands/ts.get" >}}) + - [#1226](https://github.com/RedisTimeSeries/RedisTimeSeries/pull/1226) [`TS.MRANGE`]({{< relref "commands/ts.mrange" >}}), [`TS.MREVRANGE`]({{< relref "commands/ts.mrevrange" >}}): on a multi-shard environment, some chunks may be skipped {{}} New RDB version (v5). RDB files created with 1.6.16 are not backward compatible. @@ -72,8 +72,8 @@ Details: - Bug fixes: - - [#1176](https://github.com/RedisTimeSeries/RedisTimeSeries/issues/1176), [#1187](https://github.com/RedisTimeSeries/RedisTimeSeries/pull/1187) When executing [`DEL`]({{< baseurl >}}commands/ts.del), chunk index could be set to a wrong value and cause some data to be inaccessible - - [#1180](https://github.com/RedisTimeSeries/RedisTimeSeries/pull/1180) When executing [`MADD`]({{< baseurl >}}commands/ts.madd), make sure that only successful insertions are replicated + - [#1176](https://github.com/RedisTimeSeries/RedisTimeSeries/issues/1176), [#1187](https://github.com/RedisTimeSeries/RedisTimeSeries/pull/1187) When executing [`DEL`]({{< relref "commands/ts.del" >}}), chunk index could be set to a wrong value and cause some data to be inaccessible + - [#1180](https://github.com/RedisTimeSeries/RedisTimeSeries/pull/1180) When executing [`MADD`]({{< relref "commands/ts.madd" >}}), make sure that only successful insertions are replicated ## v1.6.11 (May 2022) @@ -99,10 +99,10 @@ Details: - Bug fixes: - - [#1074](https://github.com/RedisTimeSeries/RedisTimeSeries/pull/1074) [`RANGE`]({{< baseurl >}}commands/ts.range), [`REVRANGE`]({{< baseurl >}}commands/ts.revrange), [`MRANGE`]({{< baseurl >}}commands/ts.mrange), and [`MREVRANGE`]({{< baseurl >}}commands/ts.mrevrange): Possibly incorrect result when using `ALIGN` and aggregating a bucket with a timestamp close to 0 + - [#1074](https://github.com/RedisTimeSeries/RedisTimeSeries/pull/1074) [`RANGE`]({{< relref "commands/ts.range" >}}), [`REVRANGE`]({{< relref "commands/ts.revrange" >}}), [`MRANGE`]({{< relref "commands/ts.mrange" >}}), and [`MREVRANGE`]({{< relref "commands/ts.mrevrange" >}}): Possibly incorrect result when using `ALIGN` and aggregating a bucket with a timestamp close to 0 - [#1094](https://github.com/RedisTimeSeries/RedisTimeSeries/pull/1094) [LibMR](https://github.com/RedisGears/LibMR): Potential memory leak; memory release delay - - [#1127](https://github.com/RedisTimeSeries/RedisTimeSeries/pull/1127) Memory leak on [`RANGE`]({{< baseurl >}}commands/ts.range) and [`REVRANGE`]({{< baseurl >}}commands/ts.revrange) when argument parsing fails - - [#1096](https://github.com/RedisTimeSeries/RedisTimeSeries/pull/1096) [`RANGE`]({{< baseurl >}}commands/ts.range), [`REVRANGE`]({{< baseurl >}}commands/ts.revrange), [`MRANGE`]({{< baseurl >}}commands/ts.mrange), and [`MREVRANGE`]({{< baseurl >}}commands/ts.mrevrange): Using `FILTER_BY_TS` without specifying timestamps now returns an error as expected + - [#1127](https://github.com/RedisTimeSeries/RedisTimeSeries/pull/1127) Memory leak on [`RANGE`]({{< relref "commands/ts.range" >}}) and [`REVRANGE`]({{< relref "commands/ts.revrange" >}}) when argument parsing fails + - [#1096](https://github.com/RedisTimeSeries/RedisTimeSeries/pull/1096) [`RANGE`]({{< relref "commands/ts.range" >}}), [`REVRANGE`]({{< relref "commands/ts.revrange" >}}), [`MRANGE`]({{< relref "commands/ts.mrange" >}}), and [`MREVRANGE`]({{< relref "commands/ts.mrevrange" >}}): Using `FILTER_BY_TS` without specifying timestamps now returns an error as expected ## v1.6.9 (February 2022) diff --git a/content/operate/oss_and_stack/stack-with-enterprise/release-notes/redistimeseries/redistimeseries-1.8-release-notes.md b/content/operate/oss_and_stack/stack-with-enterprise/release-notes/redistimeseries/redistimeseries-1.8-release-notes.md index 357f910715..5b8a185ce9 100644 --- a/content/operate/oss_and_stack/stack-with-enterprise/release-notes/redistimeseries/redistimeseries-1.8-release-notes.md +++ b/content/operate/oss_and_stack/stack-with-enterprise/release-notes/redistimeseries/redistimeseries-1.8-release-notes.md @@ -150,8 +150,8 @@ Details: - Bug fixes: - [#1360](https://github.com/RedisTimeSeries/RedisTimeSeries/pull/1360) Potential crash when upgrading from v1.6 to 1.8 if there are compactions with `min` or `max` aggregation (MOD-4559) - - [#1370](https://github.com/RedisTimeSeries/RedisTimeSeries/issues/1370) Potential crash when using [TS.REVRANGE]({{< baseurl >}}commands/ts.revrange) or [TS.MREVRANGE]({{< baseurl >}}commands/ts.mrevrange) with aggregation - - [#1347](https://github.com/RedisTimeSeries/RedisTimeSeries/pull/1347) When adding samples with [TS.ADD]({{< baseurl >}}commands/ts.add) or [TS.MADD]({{< baseurl >}}commands/ts.madd) using `*` as timestamp, the timestamp could differ between master and replica shards + - [#1370](https://github.com/RedisTimeSeries/RedisTimeSeries/issues/1370) Potential crash when using [TS.REVRANGE]({{< relref "commands/ts.revrange" >}}) or [TS.MREVRANGE]({{< relref "commands/ts.mrevrange" >}}) with aggregation + - [#1347](https://github.com/RedisTimeSeries/RedisTimeSeries/pull/1347) When adding samples with [TS.ADD]({{< relref "commands/ts.add" >}}) or [TS.MADD]({{< relref "commands/ts.madd" >}}) using `*` as timestamp, the timestamp could differ between master and replica shards - Improvements: - [#1215](https://github.com/RedisTimeSeries/RedisTimeSeries/issues/1215) OSS cluster: Support TLS and IPv6; introduce new configuration parameter: [OSS_GLOBAL_PASSWORD]({{< relref "/develop/data-types/timeseries/" >}}configuration/#oss_global_password) @@ -169,15 +169,15 @@ RedisTimeSeries 1.8 introduces seven highly requested features, performance impr * **Optionally retrieving aggregation results for the latest (still open) bucket for compactions** - Till version 1.8, when a time series is a compaction, [TS.GET]({{< baseurl >}}commands/ts.get), [TS.MGET]({{< baseurl >}}commands/ts.mget), [TS.RANGE]({{< baseurl >}}commands/ts.range), [TS.REVRANGE]({{< baseurl >}}commands/ts.revrange), [TS.MRANGE]({{< baseurl >}}commands/ts.mrange), [TS.MREVRANGE]({{< baseurl >}}commands/ts.mrevrange) did not report the compacted value of the latest bucket. The reason is that the data in the latest bucket of a compaction is still partial. A bucket is ‘closed’ and compacted only upon the arrival of data that ‘opens’ a ‘new latest’ bucket. + Till version 1.8, when a time series is a compaction, [TS.GET]({{< relref "commands/ts.get" >}}), [TS.MGET]({{< relref "commands/ts.mget" >}}), [TS.RANGE]({{< relref "commands/ts.range" >}}), [TS.REVRANGE]({{< relref "commands/ts.revrange" >}}), [TS.MRANGE]({{< relref "commands/ts.mrange" >}}), [TS.MREVRANGE]({{< relref "commands/ts.mrevrange" >}}) did not report the compacted value of the latest bucket. The reason is that the data in the latest bucket of a compaction is still partial. A bucket is ‘closed’ and compacted only upon the arrival of data that ‘opens’ a ‘new latest’ bucket. There are use cases, however, where the compaction of the latest bucket should be retrieved as well. For example, a user may want to receive the count of events since the start of the decade, and the retention period for raw data is only one month. Till version 1.8, the user would have to run two queries - one on a compaction and one on the latest raw data, and then sum the results. Since version 1.8, by specifying `LATEST`, it is possible to retrieve the latest (possibly partial) bucket as well. - To report aggregations for the latest bucket, use the new optional `LATEST` flag to [TS.GET]({{< baseurl >}}commands/ts.get), [TS.MGET]({{< baseurl >}}commands/ts.mget), [TS.RANGE]({{< baseurl >}}commands/ts.range), [TS.REVRANGE]({{< baseurl >}}commands/ts.revrange), [TS.MRANGE]({{< baseurl >}}commands/ts.mrange), and [TS.REVRANGE]({{< baseurl >}}commands/ts.mrevrange). + To report aggregations for the latest bucket, use the new optional `LATEST` flag to [TS.GET]({{< relref "commands/ts.get" >}}), [TS.MGET]({{< relref "commands/ts.mget" >}}), [TS.RANGE]({{< relref "commands/ts.range" >}}), [TS.REVRANGE]({{< relref "commands/ts.revrange" >}}), [TS.MRANGE]({{< relref "commands/ts.mrange" >}}), and [TS.REVRANGE]({{< relref "commands/ts.mrevrange" >}}). * **Optionally retrieving aggregation results for empty buckets** - The commands [TS.RANGE]({{< baseurl >}}commands/ts.range), [TS.REVRANGE]({{< baseurl >}}commands/ts.revrange), [TS.MRANGE]({{< baseurl >}}commands/ts.mrange), and [TS.MREVRANGE]({{< baseurl >}}commands/ts.mrevrange) have an optional `[AGGREGATION aggregator bucketDuration]` parameter. When this parameter is specified, raw reports are aggregated per bucket. + The commands [TS.RANGE]({{< relref "commands/ts.range" >}}), [TS.REVRANGE]({{< relref "commands/ts.revrange" >}}), [TS.MRANGE]({{< relref "commands/ts.mrange" >}}), and [TS.MREVRANGE]({{< relref "commands/ts.mrevrange" >}}) have an optional `[AGGREGATION aggregator bucketDuration]` parameter. When this parameter is specified, raw reports are aggregated per bucket. Till version 1.8, results were not reported for empty buckets. With `EMPTY`, it is now possible to report aggregations for empty buckets as well. @@ -193,7 +193,7 @@ RedisTimeSeries 1.8 introduces seven highly requested features, performance impr For the `last` aggregator and the new `twa` aggregator, the `EMPTY` flag is used for gap filling (see below). - To report aggregations for empty buckets, use the new optional `EMPTY` flag in [TS.RANGE]({{< baseurl >}}commands/ts.range), [TS.REVRANGE]({{< baseurl >}}commands/ts.revrange), [TS.MRANGE]({{< baseurl >}}commands/ts.mrange), and [TS.MREVRANGE]({{< baseurl >}}commands/ts.mrevrange). + To report aggregations for empty buckets, use the new optional `EMPTY` flag in [TS.RANGE]({{< relref "commands/ts.range" >}}), [TS.REVRANGE]({{< relref "commands/ts.revrange" >}}), [TS.MRANGE]({{< relref "commands/ts.mrange" >}}), and [TS.MREVRANGE]({{< relref "commands/ts.mrevrange" >}}). Regardless of the values of `fromTimestamp` and `toTimestamp`, no data is reported for empty buckets that end before the earliest sample or begin after the latest sample in the time series. @@ -215,7 +215,7 @@ RedisTimeSeries 1.8 introduces seven highly requested features, performance impr {{A graph that illustrates gap-filling.}} - Consider we want to use [TS.RANGE]({{< baseurl >}}commands/ts.range) to calculate the average value of each bucket (p1, p2, p3 in the diagram above). Using avg, the value reported for bucket p2 would be NaN, as this bucket contains no samples. If we use `EMPTY` with `twa`, on the other hand, the average value for bucket p2 would be calculated based on the linear interpolation of the value left of p2 and the value right of p2. + Consider we want to use [TS.RANGE]({{< relref "commands/ts.range" >}}) to calculate the average value of each bucket (p1, p2, p3 in the diagram above). Using avg, the value reported for bucket p2 would be NaN, as this bucket contains no samples. If we use `EMPTY` with `twa`, on the other hand, the average value for bucket p2 would be calculated based on the linear interpolation of the value left of p2 and the value right of p2. When sampling a continuous signal, we can use this ‘gap-filling’ capability to calculate the average value of the signal over equal-width buckets without concern about bucket alignment or missing samples. @@ -223,11 +223,11 @@ RedisTimeSeries 1.8 introduces seven highly requested features, performance impr * **Ability to control how bucket timestamps are reported** - Till version 1.8, [TS.RANGE]({{< baseurl >}}commands/ts.range), [TS.REVRANGE]({{< baseurl >}}commands/ts.revrange), [TS.MRANGE]({{< baseurl >}}commands/ts.mrange), and [TS.MREVRANGE]({{< baseurl >}}commands/ts.mrevrange) returned the start time of each reported bucket as its timestamp. + Till version 1.8, [TS.RANGE]({{< relref "commands/ts.range" >}}), [TS.REVRANGE]({{< relref "commands/ts.revrange" >}}), [TS.MRANGE]({{< relref "commands/ts.mrange" >}}), and [TS.MREVRANGE]({{< relref "commands/ts.mrevrange" >}}) returned the start time of each reported bucket as its timestamp. Changing this behavior and reporting each bucket’s start time, end time, or mid-time is now possible. This is required in many use cases. For example, when drawing bars in trading applications, annotating each bar with the end timestamp of the bucket it represents is very common. - The way bucket timestamps are reported can be specified with the new optional `BUCKETTIMESTAMP` parameter of [TS.RANGE]({{< baseurl >}}commands/ts.range), [TS.REVRANGE]({{< baseurl >}}commands/ts.revrange), [TS.MRANGE]({{< baseurl >}}commands/ts.mrange), and [TS.MREVRANGE]({{< baseurl >}}commands/ts.mrevrange). + The way bucket timestamps are reported can be specified with the new optional `BUCKETTIMESTAMP` parameter of [TS.RANGE]({{< relref "commands/ts.range" >}}), [TS.REVRANGE]({{< relref "commands/ts.revrange" >}}), [TS.MRANGE]({{< relref "commands/ts.mrange" >}}), and [TS.MREVRANGE]({{< relref "commands/ts.mrevrange" >}}). `-` or `low`: the bucket's start time (default) @@ -241,7 +241,7 @@ RedisTimeSeries 1.8 introduces seven highly requested features, performance impr But what if we want to aggregate daily events from 06:00 to 06:00 the next day? We can now specify alignment for compaction rules. - Alignment can be specified with the new optional `alignTimestamp` parameter of [TS.CREATERULE]({{< baseurl >}}commands/ts.createrule) and the [COMPACTION_POLICY]({{< relref "/develop/data-types/timeseries/configuration" >}}) configuration parameter. Specifying `alignTimestamp` ensures that there is a bucket that starts exactly at `alignTimestamp` and all other buckets are aligned accordingly. `alignTimestamp` is expressed in milliseconds. The default value is 0 (aligned with the epoch). + Alignment can be specified with the new optional `alignTimestamp` parameter of [TS.CREATERULE]({{< relref "commands/ts.createrule" >}}) and the [COMPACTION_POLICY]({{< relref "/develop/data-types/timeseries/configuration" >}}) configuration parameter. Specifying `alignTimestamp` ensures that there is a bucket that starts exactly at `alignTimestamp` and all other buckets are aligned accordingly. `alignTimestamp` is expressed in milliseconds. The default value is 0 (aligned with the epoch). * **New reducers** @@ -249,7 +249,7 @@ RedisTimeSeries 1.8 introduces seven highly requested features, performance impr It is now possible, for example, to calculate the maximal temperature per timeframe for each sensor and then report the average temperature (avg reducer) over groups of sensors (grouped by a given label's value). - This can be specified with the new reducer types ([TS.MRANGE]({{< baseurl >}}commands/ts.mrange) and [TS.MREVRANGE]({{< baseurl >}}commands/ts.mrevrange): `avg`, `range`, `count`, `std.p`, `std.s`, `var.p`, and `var.s`. + This can be specified with the new reducer types ([TS.MRANGE]({{< relref "commands/ts.mrange" >}}) and [TS.MREVRANGE]({{< relref "commands/ts.mrevrange" >}}): `avg`, `range`, `count`, `std.p`, `std.s`, `var.p`, and `var.s`. {{}} New RDB version (v7). RDB files created with v1.8.3 are not backward compatible. diff --git a/content/operate/oss_and_stack/stack-with-enterprise/search/_index.md b/content/operate/oss_and_stack/stack-with-enterprise/search/_index.md index acbc53eb92..4d46385187 100644 --- a/content/operate/oss_and_stack/stack-with-enterprise/search/_index.md +++ b/content/operate/oss_and_stack/stack-with-enterprise/search/_index.md @@ -21,11 +21,11 @@ The search and query engine indexes documents, which are objects that represent As the documents in your database change, the index automatically processes these changes to keep the search results up to date. With indexes, you can do: -- Language-aware [fuzzy matching]({{< baseurl >}}develop/interact/search-and-query/advanced-concepts/query_syntax#fuzzy-matching) -- Fast [auto-complete]({{< baseurl >}}develop/interact/search-and-query/administration/overview#auto-complete) -- [Exact phrase matching]({{< baseurl >}}develop/interact/search-and-query/advanced-concepts/query_syntax) -- [Numeric filtering]({{< baseurl >}}develop/interact/search-and-query/advanced-concepts/query_syntax#numeric-filters-in-query) -- [Geo-radius queries]({{< baseurl >}}develop/interact/search-and-query/advanced-concepts/query_syntax#geo-filters) +- Language-aware [fuzzy matching]({{< relref "develop/interact/search-and-query/advanced-concepts/query_syntax#fuzzy-matching" >}}) +- Fast [auto-complete]({{< relref "develop/interact/search-and-query/administration/overview#auto-complete" >}}) +- [Exact phrase matching]({{< relref "develop/interact/search-and-query/advanced-concepts/query_syntax" >}}) +- [Numeric filtering]({{< relref "develop/interact/search-and-query/advanced-concepts/query_syntax#numeric-filters-in-query" >}}) +- [Geo-radius queries]({{< relref "develop/interact/search-and-query/advanced-concepts/query_syntax#geo-filters" >}}) ## Supported document types @@ -49,7 +49,7 @@ For full-text searches, you can customize the field queries and ranking of the s When querying, you can use multiple predicates that query text, numeric, and geospatial fields in one query. You can also sort by a specific field and limit the results with an offset to produce customized results pages. -Redis Stack supports [over 15 natural languages]({{< relref "/develop/interact/search-and-query/advanced-concepts/stemming" >}}) for stemming and includes auto-complete engines with specific commands that can provide real-time [interactive search suggestions]({{< baseurl >}}commands/ft.sugadd). +Redis Stack supports [over 15 natural languages]({{< relref "/develop/interact/search-and-query/advanced-concepts/stemming" >}}) for stemming and includes auto-complete engines with specific commands that can provide real-time [interactive search suggestions]({{< relref "commands/ft.sugadd" >}}). ## Search and query Active-Active databases diff --git a/content/operate/oss_and_stack/stack-with-enterprise/search/commands.md b/content/operate/oss_and_stack/stack-with-enterprise/search/commands.md index 70b8947112..188b3ed18a 100644 --- a/content/operate/oss_and_stack/stack-with-enterprise/search/commands.md +++ b/content/operate/oss_and_stack/stack-with-enterprise/search/commands.md @@ -16,31 +16,31 @@ The following table lists search and query commands. See the command links for m | Command | Redis Enterprise Software | Redis Cloud
Flexible & Annual | Redis Cloud
Free & Fixed | Description | |:--------|:----------------------|:-----------------|:-----------------|:------| -| [FT.AGGREGATE]({{< baseurl >}}commands/ft.aggregate) | ✅ Supported | ✅ Supported | ✅ Supported | Runs a search query on an index and groups, sorts, transforms, limits, and/or filters the results. | -| [FT.ALIASADD]({{< baseurl >}}commands/ft.aliasadd) | ✅ Supported | ✅ Supported | ✅ Supported | Adds an alias to an index. | -| [FT.ALIASDEL]({{< baseurl >}}commands/ft.aliasdel) | ✅ Supported | ✅ Supported | ✅ Supported | Removes an alias from an index. | -| [FT.ALIASUPDATE]({{< baseurl >}}commands/ft.aliasupdate) | ✅ Supported | ✅ Supported | ✅ Supported | Adds an alias to an index. If the alias already exists for a different index, it updates the alias to point to the specified index instead. | -| [FT.ALTER]({{< baseurl >}}commands/ft.alter) | ✅ Supported | ✅ Supported | ✅ Supported | Adds a new field to an index. | -| [FT.CONFIG GET]({{< baseurl >}}commands/ft.config-get) | ❌ Not supported | ⚠️ Not supported[2](#table-note-2) | ❌ Not supported | Displays configuration options. | -| [FT.CONFIG HELP]({{< baseurl >}}commands/ft.config-help) | ❌ Not supported | ❌ Not supported | ❌ Not supported | Describes configuration options. | -| [FT.CONFIG SET]({{< baseurl >}}commands/ft.config-set) | ⚠️ Not supported[1](#table-note-1) | ⚠️ Not supported[2](#table-note-2) | ❌ Not supported | Sets configuration options. | -| [FT.CREATE]({{< baseurl >}}commands/ft.create) | ✅ Supported | ✅ Supported | ✅ Supported | Creates an index. | -| [FT.CURSOR DEL]({{< baseurl >}}commands/ft.cursor-del) | ✅ Supported | ✅ Supported | ✅ Supported | Deletes a cursor. | -| [FT.CURSOR READ]({{< baseurl >}}commands/ft.cursor-read/) | ✅ Supported | ✅ Supported | ✅ Supported | Reads the next results from an existing cursor. | -| [FT.DICTADD]({{< baseurl >}}commands/ft.dictadd) | ✅ Supported | ✅ Supported | ✅ Supported | Adds terms to a dictionary. | -| [FT.DICTDEL]({{< baseurl >}}commands/ft.dictdel) | ✅ Supported | ✅ Supported | ✅ Supported | Deletes terms from a dictionary. | -| [FT.DICTDUMP]({{< baseurl >}}commands/ft.dictdump) | ✅ Supported | ✅ Supported | ✅ Supported | Returns all terms in the specified dictionary. | -| [FT.DROPINDEX]({{< baseurl >}}commands/ft.dropindex) | ✅ Supported | ✅ Supported | ✅ Supported | Deletes an index. | -| [FT.EXPLAIN]({{< baseurl >}}commands/ft.explain) | ✅ Supported | ✅ Supported | ✅ Supported | Returns the execution plan for a complex query as a string. | -| [FT.EXPLAINCLI]({{< baseurl >}}commands/ft.explaincli) | ✅ Supported | ✅ Supported | ✅ Supported | Returns the execution plan for a complex query as an [array]({{< baseurl >}}develop/reference/protocol-spec/#arrays). | -| [FT.INFO]({{< baseurl >}}commands/ft.info) | ✅ Supported | ✅ Supported | ✅ Supported | Returns index information and statistics. | -| [FT._LIST]({{< baseurl >}}commands/ft._list) | ✅ Supported | ✅ Supported | ✅ Supported | Lists all indexes. | -| [FT.PROFILE]({{< baseurl >}}commands/ft.profile) | ✅ Supported | ✅ Supported | ✅ Supported | Runs [FT.SEARCH]({{< baseurl >}}commands/ft.search) or [FT.AGGREGATE]({{< baseurl >}}commands/ft.aggregate) and reports performance information. | -| [FT.SEARCH]({{< baseurl >}}commands/ft.search) | ✅ Supported | ✅ Supported | ✅ Supported | Searches an index for a text query and returns matching documents or document IDs. | -| [FT.SPELLCHECK]({{< baseurl >}}commands/ft.spellcheck) | ✅ Supported | ✅ Supported | ✅ Supported | Suggests spelling corrections for misspelled terms in a query. | -| [FT.SYNDUMP]({{< baseurl >}}commands/ft.syndump) | ✅ Supported | ✅ Supported | ✅ Supported | Returns a list of synonym terms and their synonym group IDs. | -| [FT.SYNUPDATE]({{< baseurl >}}commands/ft.synupdate) | ✅ Supported | ✅ Supported | ✅ Supported | Creates or updates a synonym group with additional terms. | -| [FT.TAGVALS]({{< baseurl >}}commands/ft.tagvals) | ✅ Supported | ✅ Supported | ✅ Supported | Returns all distinct values indexed in a tag field. | +| [FT.AGGREGATE]({{< relref "commands/ft.aggregate" >}}) | ✅ Supported | ✅ Supported | ✅ Supported | Runs a search query on an index and groups, sorts, transforms, limits, and/or filters the results. | +| [FT.ALIASADD]({{< relref "commands/ft.aliasadd" >}}) | ✅ Supported | ✅ Supported | ✅ Supported | Adds an alias to an index. | +| [FT.ALIASDEL]({{< relref "commands/ft.aliasdel" >}}) | ✅ Supported | ✅ Supported | ✅ Supported | Removes an alias from an index. | +| [FT.ALIASUPDATE]({{< relref "commands/ft.aliasupdate" >}}) | ✅ Supported | ✅ Supported | ✅ Supported | Adds an alias to an index. If the alias already exists for a different index, it updates the alias to point to the specified index instead. | +| [FT.ALTER]({{< relref "commands/ft.alter" >}}) | ✅ Supported | ✅ Supported | ✅ Supported | Adds a new field to an index. | +| [FT.CONFIG GET]({{< relref "commands/ft.config-get" >}}) | ❌ Not supported | ⚠️ Not supported[2](#table-note-2) | ❌ Not supported | Displays configuration options. | +| [FT.CONFIG HELP]({{< relref "commands/ft.config-help" >}}) | ❌ Not supported | ❌ Not supported | ❌ Not supported | Describes configuration options. | +| [FT.CONFIG SET]({{< relref "commands/ft.config-set" >}}) | ⚠️ Not supported[1](#table-note-1) | ⚠️ Not supported[2](#table-note-2) | ❌ Not supported | Sets configuration options. | +| [FT.CREATE]({{< relref "commands/ft.create" >}}) | ✅ Supported | ✅ Supported | ✅ Supported | Creates an index. | +| [FT.CURSOR DEL]({{< relref "commands/ft.cursor-del" >}}) | ✅ Supported | ✅ Supported | ✅ Supported | Deletes a cursor. | +| [FT.CURSOR READ]({{< relref "commands/ft.cursor-read/" >}}) | ✅ Supported | ✅ Supported | ✅ Supported | Reads the next results from an existing cursor. | +| [FT.DICTADD]({{< relref "commands/ft.dictadd" >}}) | ✅ Supported | ✅ Supported | ✅ Supported | Adds terms to a dictionary. | +| [FT.DICTDEL]({{< relref "commands/ft.dictdel" >}}) | ✅ Supported | ✅ Supported | ✅ Supported | Deletes terms from a dictionary. | +| [FT.DICTDUMP]({{< relref "commands/ft.dictdump" >}}) | ✅ Supported | ✅ Supported | ✅ Supported | Returns all terms in the specified dictionary. | +| [FT.DROPINDEX]({{< relref "commands/ft.dropindex" >}}) | ✅ Supported | ✅ Supported | ✅ Supported | Deletes an index. | +| [FT.EXPLAIN]({{< relref "commands/ft.explain" >}}) | ✅ Supported | ✅ Supported | ✅ Supported | Returns the execution plan for a complex query as a string. | +| [FT.EXPLAINCLI]({{< relref "commands/ft.explaincli" >}}) | ✅ Supported | ✅ Supported | ✅ Supported | Returns the execution plan for a complex query as an [array]({{< relref "develop/reference/protocol-spec/#arrays" >}}). | +| [FT.INFO]({{< relref "commands/ft.info" >}}) | ✅ Supported | ✅ Supported | ✅ Supported | Returns index information and statistics. | +| [FT._LIST]({{< relref "commands/ft._list" >}}) | ✅ Supported | ✅ Supported | ✅ Supported | Lists all indexes. | +| [FT.PROFILE]({{< relref "commands/ft.profile" >}}) | ✅ Supported | ✅ Supported | ✅ Supported | Runs [FT.SEARCH]({{< relref "commands/ft.search" >}}) or [FT.AGGREGATE]({{< relref "commands/ft.aggregate" >}}) and reports performance information. | +| [FT.SEARCH]({{< relref "commands/ft.search" >}}) | ✅ Supported | ✅ Supported | ✅ Supported | Searches an index for a text query and returns matching documents or document IDs. | +| [FT.SPELLCHECK]({{< relref "commands/ft.spellcheck" >}}) | ✅ Supported | ✅ Supported | ✅ Supported | Suggests spelling corrections for misspelled terms in a query. | +| [FT.SYNDUMP]({{< relref "commands/ft.syndump" >}}) | ✅ Supported | ✅ Supported | ✅ Supported | Returns a list of synonym terms and their synonym group IDs. | +| [FT.SYNUPDATE]({{< relref "commands/ft.synupdate" >}}) | ✅ Supported | ✅ Supported | ✅ Supported | Creates or updates a synonym group with additional terms. | +| [FT.TAGVALS]({{< relref "commands/ft.tagvals" >}}) | ✅ Supported | ✅ Supported | ✅ Supported | Returns all distinct values indexed in a tag field. | 1.
Use [`rladmin`]({{< relref "/operate/rs/references/cli-utilities/rladmin" >}}) or the [REST API]({{< relref "/operate/rs/references/rest-api" >}}) to change search and query configuration for Redis Enterprise Software. See [search and query configuration compatibility with Redis Enterprise]({{< relref "/operate/oss_and_stack/stack-with-enterprise/search/config" >}}) for more information and examples. diff --git a/content/operate/oss_and_stack/stack-with-enterprise/search/config.md b/content/operate/oss_and_stack/stack-with-enterprise/search/config.md index db41089150..d3035df8f0 100644 --- a/content/operate/oss_and_stack/stack-with-enterprise/search/config.md +++ b/content/operate/oss_and_stack/stack-with-enterprise/search/config.md @@ -11,7 +11,7 @@ toc: 'false' weight: 15 --- -To configure RediSearch in [Redis Enterprise Software]({{< relref "/operate/rs" >}}) or [Redis Cloud]({{< relref "/operate/rc" >}}), use one of the following methods instead of [`FT.CONFIG SET`]({{< baseurl >}}commands/ft.config-set). +To configure RediSearch in [Redis Enterprise Software]({{< relref "/operate/rs" >}}) or [Redis Cloud]({{< relref "/operate/rc" >}}), use one of the following methods instead of [`FT.CONFIG SET`]({{< relref "commands/ft.config-set" >}}). ## Configure search in Redis Cloud diff --git a/content/operate/oss_and_stack/stack-with-enterprise/search/redisearch-2-upgrade.md b/content/operate/oss_and_stack/stack-with-enterprise/search/redisearch-2-upgrade.md index 444c38a968..7bb9945cb6 100644 --- a/content/operate/oss_and_stack/stack-with-enterprise/search/redisearch-2-upgrade.md +++ b/content/operate/oss_and_stack/stack-with-enterprise/search/redisearch-2-upgrade.md @@ -26,7 +26,7 @@ In addition, RediSearch 2.x indexes data that already existed in the database at To upgrade a Redis Enterprise Software database with RediSearch 1.x to RediSearch 2.x, you have to set up a new database with RediSearch 2.x and use the `RediSearch_Syncer.py` script to replicate the data from the old database into the new database. {{< note >}} -After you create the database or after you replicate the data, [create an index]({{< baseurl >}}commands/ft.create) with a prefix or filter that defines the keys that you want to index. +After you create the database or after you replicate the data, [create an index]({{< relref "commands/ft.create" >}}) with a prefix or filter that defines the keys that you want to index. {{< /note >}} ## Prerequisites diff --git a/content/operate/oss_and_stack/stack-with-enterprise/search/scalable-query-best-practices.md b/content/operate/oss_and_stack/stack-with-enterprise/search/scalable-query-best-practices.md index c2ba053ac7..e32dbbe77e 100644 --- a/content/operate/oss_and_stack/stack-with-enterprise/search/scalable-query-best-practices.md +++ b/content/operate/oss_and_stack/stack-with-enterprise/search/scalable-query-best-practices.md @@ -44,7 +44,7 @@ Follow these best practices for [indexing]({{}}): -- Specify the result set fields in the `RETURN` or `LOAD` clauses and include them in the index definition. Don’t just return the default result set from [`FT.SEARCH`]({{< baseurl >}}commands/ft.search/) or `LOAD *` from [`FT.AGGREGATE`]({{< baseurl >}}commands/ft.aggregate/). +- Specify the result set fields in the `RETURN` or `LOAD` clauses and include them in the index definition. Don’t just return the default result set from [`FT.SEARCH`]({{< relref "commands/ft.search/" >}}) or `LOAD *` from [`FT.AGGREGATE`]({{< relref "commands/ft.aggregate/" >}}). - Use `LIMIT` to reduce the result set size. diff --git a/content/operate/oss_and_stack/stack-with-enterprise/search/search-active-active.md b/content/operate/oss_and_stack/stack-with-enterprise/search/search-active-active.md index 1c5b0a916a..0065d02a88 100644 --- a/content/operate/oss_and_stack/stack-with-enterprise/search/search-active-active.md +++ b/content/operate/oss_and_stack/stack-with-enterprise/search/search-active-active.md @@ -16,7 +16,7 @@ You can run search operations on any instance of an Active-Active database. ## How it works 1. Create an Active-Active database with RediSearch 2.x enabled. -1. [Create the index]({{< baseurl >}}commands/ft.create) on each instance of the database. +1. [Create the index]({{< relref "commands/ft.create" >}}) on each instance of the database. 1. If you are using [synonyms]({{< relref "/develop/interact/search-and-query/advanced-concepts/synonyms" >}}), you need to add them to each replica. 1. The index is maintained by each instance outside of the database keyspace, so only updates to the hashes in the databases are synchronized. @@ -24,11 +24,11 @@ You can run search operations on any instance of an Active-Active database. Active-Active databases do not support the following search and query commands: -- [`FT.DROPINDEX` ]({{< baseurl >}}commands/ft.dropindex) -- [`FT.SUGADD`]({{< baseurl >}}commands/ft.sugadd) -- [`FT.SUGGET`]({{< baseurl >}}commands/ft.sugget) -- [`FT.SUGDEL`]({{< baseurl >}}commands/ft.sugdel) -- [`FT.SUGLEN`]({{< baseurl >}}commands/ft.suglen) +- [`FT.DROPINDEX` ]({{< relref "commands/ft.dropindex" >}}) +- [`FT.SUGADD`]({{< relref "commands/ft.sugadd" >}}) +- [`FT.SUGGET`]({{< relref "commands/ft.sugget" >}}) +- [`FT.SUGDEL`]({{< relref "commands/ft.sugdel" >}}) +- [`FT.SUGLEN`]({{< relref "commands/ft.suglen" >}}) ## Example diff --git a/content/operate/oss_and_stack/stack-with-enterprise/timeseries/_index.md b/content/operate/oss_and_stack/stack-with-enterprise/timeseries/_index.md index 8593572e79..8281fe758c 100644 --- a/content/operate/oss_and_stack/stack-with-enterprise/timeseries/_index.md +++ b/content/operate/oss_and_stack/stack-with-enterprise/timeseries/_index.md @@ -30,7 +30,7 @@ Each sample is a tuple of the time and the value of 128 bits, ## Time series capabilities -Redis Stack provides a new data type that uses chunks of memory of fixed size for time series samples, indexed by the same Radix Tree implementation as Redis streams. With streams, you can create [a capped stream]({{< baseurl >}}develop/data-types/streams/#capped-streams), effectively limiting the number of messages by count. For time series, you can apply a retention policy in milliseconds. This is better for time series use cases, because they are typically interested in the data during a given time window, rather than a fixed number of samples. +Redis Stack provides a new data type that uses chunks of memory of fixed size for time series samples, indexed by the same Radix Tree implementation as Redis streams. With streams, you can create [a capped stream]({{< relref "develop/data-types/streams/#capped-streams" >}}), effectively limiting the number of messages by count. For time series, you can apply a retention policy in milliseconds. This is better for time series use cases, because they are typically interested in the data during a given time window, rather than a fixed number of samples. ### Downsampling/compaction @@ -38,13 +38,13 @@ Redis Stack provides a new data type that uses chunks of memory of fixed size fo | --- | --- | | {{< image filename="/images/rs/TimeSeries-downsampling1.png" >}} | {{< image filename="/images/rs/TimeSeries-downsampling2.png" >}} | -If you want to keep all of your raw data points indefinitely, your data set grows linearly over time. However, if your use case allows you to have less fine-grained data further back in time, downsampling can be applied. This allows you to keep fewer historical data points by aggregating raw data for a given time window using a given aggregation function. Time series support [downsampling]({{< baseurl >}}develop/data-types/timeseries/quickstart#aggregation) with the following aggregations: avg, sum, min, max, range, count, first, and last. +If you want to keep all of your raw data points indefinitely, your data set grows linearly over time. However, if your use case allows you to have less fine-grained data further back in time, downsampling can be applied. This allows you to keep fewer historical data points by aggregating raw data for a given time window using a given aggregation function. Time series support [downsampling]({{< relref "develop/data-types/timeseries/quickstart#aggregation" >}}) with the following aggregations: avg, sum, min, max, range, count, first, and last. ### Secondary indexing When using Redis’ core data structures, you can only retrieve a time series by knowing the exact key holding the time series. Unfortunately, for many time series use cases (such as root cause analysis or monitoring), your application won’t know the exact key it’s looking for. These use cases typically want to query a set of time series that relate to each other in a couple of dimensions to extract the insight you need. You could create your own secondary index with core Redis data structures to help with this, but it would come with a high development cost and require you to manage edge cases to make sure the index is correct. -Redis does this indexing for you based on `field value` pairs called [labels]({{< baseurl >}}develop/data-types/timeseries/quickstart#labels). You can add labels to each time series and use them to [filter]({{< baseurl >}}develop/data-types/timeseries/quickstart#filtering) at query time. +Redis does this indexing for you based on `field value` pairs called [labels]({{< relref "develop/data-types/timeseries/quickstart#labels" >}}). You can add labels to each time series and use them to [filter]({{< relref "develop/data-types/timeseries/quickstart#filtering" >}}) at query time. Here’s an example of creating a time series with two labels (sensor_id and area_id are the fields with values 2 and 32 respectively) and a retention window of 60,000 milliseconds: @@ -56,7 +56,7 @@ Here’s an example of creating a time series with two labels (sensor_id and are When you need to query a time series, it’s cumbersome to stream all raw data points if you’re only interested in, say, an average over a given time interval. Time series only transfer the minimum required data to ensure lowest latency. -Here's an example of [aggregation]({{< baseurl >}}develop/data-types/timeseries/quickstart#aggregation) over time buckets of 5,000 milliseconds: +Here's an example of [aggregation]({{< relref "develop/data-types/timeseries/quickstart#aggregation" >}}) over time buckets of 5,000 milliseconds: ```sh 127.0.0.1:12543> TS.RANGE temperature:3:32 1548149180000 1548149210000 AGGREGATION avg 5000 @@ -106,7 +106,7 @@ Each time series holds a single metric. We chose this design to maintain the Red {{< image filename="/images/rs/TimeSeries-modeling4.png" >}} -Our benchmark did not utilize the out-of-the-box secondary indexing capabilities of time series. Redis keeps a partial secondary index in each shard, and since the index inherits the same hash-slot of the key it indexes, it is always hosted on the same shard. This approach would make the setup for native data structures even more complex to model, so for the sake of simplicity, we decided not to include it in our benchmarks. Additionally, while Redis Enterprise can use the [proxy](https://redis.com/redis-enterprise/technology/redis-enterprise-cluster-architecture/) to fan out requests for commands like [TS.MGET]({{< baseurl >}}commands/ts.mget) and [TS.MRANGE]({{< baseurl >}}commands/ts.mrange) to all the shards and aggregate the results, we chose not to exploit this advantage in the benchmark either. +Our benchmark did not utilize the out-of-the-box secondary indexing capabilities of time series. Redis keeps a partial secondary index in each shard, and since the index inherits the same hash-slot of the key it indexes, it is always hosted on the same shard. This approach would make the setup for native data structures even more complex to model, so for the sake of simplicity, we decided not to include it in our benchmarks. Additionally, while Redis Enterprise can use the [proxy](https://redis.com/redis-enterprise/technology/redis-enterprise-cluster-architecture/) to fan out requests for commands like [TS.MGET]({{< relref "commands/ts.mget" >}}) and [TS.MRANGE]({{< relref "commands/ts.mrange" >}}) to all the shards and aggregate the results, we chose not to exploit this advantage in the benchmark either. ### Data ingestion diff --git a/content/operate/oss_and_stack/stack-with-enterprise/timeseries/commands.md b/content/operate/oss_and_stack/stack-with-enterprise/timeseries/commands.md index e8bce53972..5206607956 100644 --- a/content/operate/oss_and_stack/stack-with-enterprise/timeseries/commands.md +++ b/content/operate/oss_and_stack/stack-with-enterprise/timeseries/commands.md @@ -16,20 +16,20 @@ The following table lists time series commands. See the command links for more i | Command | Redis
Enterprise | Redis
Cloud | Description | |:--------|:----------------------|:-----------------|:------| -| [TS.ADD]({{< baseurl >}}commands/ts.add) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Appends a sample to a time series. | -| [TS.ALTER]({{< baseurl >}}commands/ts.alter) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Updates the retention, chunk size, duplicate policy, or labels for an existing time series. | -| [TS.CREATE]({{< baseurl >}}commands/ts.create) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Creates a new time series. | -| [TS.CREATERULE]({{< baseurl >}}commands/ts.createrule) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Creates a compaction rule for [downsampling]({{< baseurl >}}develop/data-types/timeseries/quickstart#aggregation). | -| [TS.DECRBY]({{< baseurl >}}commands/ts.decrby) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Decreases the value of the latest sample in a time series by the specified number. Either modifies the existing sample or adds the decreased value as a new sample, depending on the timestamp option. | -| [TS.DEL]({{< baseurl >}}commands/ts.del) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Removes all samples between two timestamps for a given time series. | -| [TS.DELETERULE]({{< baseurl >}}commands/ts.deleterule) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Removes a compaction rule. | -| [TS.GET]({{< baseurl >}}commands/ts.get) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Returns the last sample in a time series. | -| [TS.INCRBY]({{< baseurl >}}commands/ts.incrby) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Increases the value of the latest sample in a time series by the specified number. Either modifies the existing sample or adds the increased value as a new sample, depending on the timestamp option. | -| [TS.INFO]({{< baseurl >}}commands/ts.info) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Returns time series information and statistics. | -| [TS.MADD]({{< baseurl >}}commands/ts.madd) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Appends multiple samples to one or more time series. | -| [TS.MGET]({{< baseurl >}}commands/ts.mget) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Returns multiple samples with [labels]({{< baseurl >}}develop/data-types/timeseries/quickstart#labels) that match the filter. | -| [TS.MRANGE]({{< baseurl >}}commands/ts.mrange) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | For multiple time series, runs a query against samples within a range of timestamps, from earliest to latest. Supports [filtering]({{< relref "/develop/data-types/timeseries/quickstart" >}}#filtering) and [aggregation]({{< relref "/develop/data-types/timeseries/quickstart" >}}#aggregation). | -| [TS.MREVRANGE]({{< baseurl >}}commands/ts.mrevrange) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | For multiple time series, runs a query against samples within a range of timestamps in reverse order, from latest to earliest. Supports [filtering]({{< relref "/develop/data-types/timeseries/quickstart" >}}#filtering) and [aggregation]({{< relref "/develop/data-types/timeseries/quickstart" >}}#aggregation). | -| [TS.QUERYINDEX]({{< baseurl >}}commands/ts.queryindex) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Returns the keys of all time series with [labels]({{< relref "/develop/data-types/timeseries/quickstart" >}}#labels) that match the given filters. | -| [TS.RANGE]({{< baseurl >}}commands/ts.range) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | From the start of a single time series, runs a query against samples within a range of timestamps. Supports [filtering]({{< relref "/develop/data-types/timeseries/quickstart" >}}#filtering) and [aggregation]({{< relref "/develop/data-types/timeseries/quickstart" >}}#aggregation). | -| [TS.REVRANGE]({{< baseurl >}}commands/ts.revrange) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | From the end of a single time series, runs a query against samples within a range of timestamps in reverse order. Supports [filtering]({{< relref "/develop/data-types/timeseries/quickstart" >}}#filtering) and [aggregation]({{< relref "/develop/data-types/timeseries/quickstart" >}}#aggregation). | +| [TS.ADD]({{< relref "commands/ts.add" >}}) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Appends a sample to a time series. | +| [TS.ALTER]({{< relref "commands/ts.alter" >}}) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Updates the retention, chunk size, duplicate policy, or labels for an existing time series. | +| [TS.CREATE]({{< relref "commands/ts.create" >}}) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Creates a new time series. | +| [TS.CREATERULE]({{< relref "commands/ts.createrule" >}}) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Creates a compaction rule for [downsampling]({{< relref "develop/data-types/timeseries/quickstart#aggregation" >}}). | +| [TS.DECRBY]({{< relref "commands/ts.decrby" >}}) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Decreases the value of the latest sample in a time series by the specified number. Either modifies the existing sample or adds the decreased value as a new sample, depending on the timestamp option. | +| [TS.DEL]({{< relref "commands/ts.del" >}}) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Removes all samples between two timestamps for a given time series. | +| [TS.DELETERULE]({{< relref "commands/ts.deleterule" >}}) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Removes a compaction rule. | +| [TS.GET]({{< relref "commands/ts.get" >}}) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Returns the last sample in a time series. | +| [TS.INCRBY]({{< relref "commands/ts.incrby" >}}) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Increases the value of the latest sample in a time series by the specified number. Either modifies the existing sample or adds the increased value as a new sample, depending on the timestamp option. | +| [TS.INFO]({{< relref "commands/ts.info" >}}) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Returns time series information and statistics. | +| [TS.MADD]({{< relref "commands/ts.madd" >}}) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Appends multiple samples to one or more time series. | +| [TS.MGET]({{< relref "commands/ts.mget" >}}) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Returns multiple samples with [labels]({{< relref "develop/data-types/timeseries/quickstart#labels" >}}) that match the filter. | +| [TS.MRANGE]({{< relref "commands/ts.mrange" >}}) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | For multiple time series, runs a query against samples within a range of timestamps, from earliest to latest. Supports [filtering]({{< relref "/develop/data-types/timeseries/quickstart" >}}#filtering) and [aggregation]({{< relref "/develop/data-types/timeseries/quickstart" >}}#aggregation). | +| [TS.MREVRANGE]({{< relref "commands/ts.mrevrange" >}}) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | For multiple time series, runs a query against samples within a range of timestamps in reverse order, from latest to earliest. Supports [filtering]({{< relref "/develop/data-types/timeseries/quickstart" >}}#filtering) and [aggregation]({{< relref "/develop/data-types/timeseries/quickstart" >}}#aggregation). | +| [TS.QUERYINDEX]({{< relref "commands/ts.queryindex" >}}) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | Returns the keys of all time series with [labels]({{< relref "/develop/data-types/timeseries/quickstart" >}}#labels) that match the given filters. | +| [TS.RANGE]({{< relref "commands/ts.range" >}}) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | From the start of a single time series, runs a query against samples within a range of timestamps. Supports [filtering]({{< relref "/develop/data-types/timeseries/quickstart" >}}#filtering) and [aggregation]({{< relref "/develop/data-types/timeseries/quickstart" >}}#aggregation). | +| [TS.REVRANGE]({{< relref "commands/ts.revrange" >}}) | ✅ Supported

| ✅ Flexible & Annual
✅ Free & Fixed | From the end of a single time series, runs a query against samples within a range of timestamps in reverse order. Supports [filtering]({{< relref "/develop/data-types/timeseries/quickstart" >}}#filtering) and [aggregation]({{< relref "/develop/data-types/timeseries/quickstart" >}}#aggregation). | diff --git a/content/operate/rs/release-notes/rs-6-2-18-releases/rs-6-2-18-43.md b/content/operate/rs/release-notes/rs-6-2-18-releases/rs-6-2-18-43.md index a42ab3d3fd..dc172632b3 100644 --- a/content/operate/rs/release-notes/rs-6-2-18-releases/rs-6-2-18-43.md +++ b/content/operate/rs/release-notes/rs-6-2-18-releases/rs-6-2-18-43.md @@ -69,11 +69,11 @@ To learn more, see [`crdb-cli`]({{< relref "/operate/rs/references/cli-utilities Redis Enterprise Software v6.2.18-43 (September release) includes the following Redis modules: -- [RediSearch v2.4.11]({{< baseurl >}}operate/oss_and_stack/stack-with-enterprise/release-notes/redisearch/redisearch-2.4-release-notes#v2411-july-2022) -- [RedisJSON v2.2.0]({{< baseurl >}}operate/oss_and_stack/stack-with-enterprise/release-notes/redisjson/redisjson-2.2-release-notes#v220-july-2022) +- [RediSearch v2.4.11]({{< relref "operate/oss_and_stack/stack-with-enterprise/release-notes/redisearch/redisearch-2.4-release-notes#v2411-july-2022" >}}) +- [RedisJSON v2.2.0]({{< relref "operate/oss_and_stack/stack-with-enterprise/release-notes/redisjson/redisjson-2.2-release-notes#v220-july-2022" >}}) - [RedisBloom v2.2.18]({{< relref "/operate/oss_and_stack/stack-with-enterprise/bloom" >}}release-notes/redisbloom-2.2-release-notes/#v2218-july-2022) -- [RedisGraph v2.8.17]({{< baseurl >}}operate/oss_and_stack/stack-with-enterprise/release-notes/redisgraph/redisgraph-2.8-release-notes#v2817-july-2022) -- [RedisTimeSeries v1.6.17]({{< baseurl >}}operate/oss_and_stack/stack-with-enterprise/release-notes/redistimeseries/redistimeseries-1.6-release-notes#v1617-july-2022) +- [RedisGraph v2.8.17]({{< relref "operate/oss_and_stack/stack-with-enterprise/release-notes/redisgraph/redisgraph-2.8-release-notes#v2817-july-2022" >}}) +- [RedisTimeSeries v1.6.17]({{< relref "operate/oss_and_stack/stack-with-enterprise/release-notes/redistimeseries/redistimeseries-1.6-release-notes#v1617-july-2022" >}}) See [Upgrade modules]({{< relref "/operate/oss_and_stack/stack-with-enterprise/install/upgrade-module" >}}) to learn how to upgrade a module for a database. diff --git a/content/operate/rs/release-notes/rs-6-2-18-releases/rs-6-2-18-49.md b/content/operate/rs/release-notes/rs-6-2-18-releases/rs-6-2-18-49.md index 4a823c7872..4e31e699b4 100644 --- a/content/operate/rs/release-notes/rs-6-2-18-releases/rs-6-2-18-49.md +++ b/content/operate/rs/release-notes/rs-6-2-18-releases/rs-6-2-18-49.md @@ -33,11 +33,11 @@ The following table shows the MD5 checksums for the available packages: Redis Enterprise Software v6.2.18-49 (October release) includes the following Redis modules: -- [RediSearch v2.4.11]({{< baseurl >}}operate/oss_and_stack/stack-with-enterprise/release-notes/redisearch/redisearch-2.4-release-notes#v2411-july-2022) -- [RedisJSON v2.2.0]({{< baseurl >}}operate/oss_and_stack/stack-with-enterprise/release-notes/redisjson/redisjson-2.2-release-notes#v220-july-2022) +- [RediSearch v2.4.11]({{< relref "operate/oss_and_stack/stack-with-enterprise/release-notes/redisearch/redisearch-2.4-release-notes#v2411-july-2022" >}}) +- [RedisJSON v2.2.0]({{< relref "operate/oss_and_stack/stack-with-enterprise/release-notes/redisjson/redisjson-2.2-release-notes#v220-july-2022" >}}) - [RedisBloom v2.2.18]({{< relref "/operate/oss_and_stack/stack-with-enterprise/bloom" >}}release-notes/redisbloom-2.2-release-notes/#v2218-july-2022) -- [RedisGraph v2.8.17]({{< baseurl >}}operate/oss_and_stack/stack-with-enterprise/release-notes/redisgraph/redisgraph-2.8-release-notes#v2817-july-2022) -- [RedisTimeSeries v1.6.17]({{< baseurl >}}operate/oss_and_stack/stack-with-enterprise/release-notes/redistimeseries/redistimeseries-1.6-release-notes#v1617-july-2022) +- [RedisGraph v2.8.17]({{< relref "operate/oss_and_stack/stack-with-enterprise/release-notes/redisgraph/redisgraph-2.8-release-notes#v2817-july-2022" >}}) +- [RedisTimeSeries v1.6.17]({{< relref "operate/oss_and_stack/stack-with-enterprise/release-notes/redistimeseries/redistimeseries-1.6-release-notes#v1617-july-2022" >}}) See [Upgrade modules]({{< relref "/operate/oss_and_stack/stack-with-enterprise/install/upgrade-module" >}}) to learn how to upgrade a module for a database. diff --git a/content/operate/rs/release-notes/rs-6-2-18-releases/rs-6-2-18-58.md b/content/operate/rs/release-notes/rs-6-2-18-releases/rs-6-2-18-58.md index 9f9ae0931c..55a996dedd 100644 --- a/content/operate/rs/release-notes/rs-6-2-18-releases/rs-6-2-18-58.md +++ b/content/operate/rs/release-notes/rs-6-2-18-releases/rs-6-2-18-58.md @@ -33,8 +33,8 @@ The following table shows the MD5 checksums for the available packages: Redis Enterprise Software v6.2.18-58 (November release) includes newer versions of the following Redis modules: -- [RediSearch v2.4.14]({{< baseurl >}}operate/oss_and_stack/stack-with-enterprise/release-notes/redisearch/redisearch-2.4-release-notes#v2414-august-2022) -- [RedisGraph v2.8.19]({{< baseurl >}}operate/oss_and_stack/stack-with-enterprise/release-notes/redisgraph/redisgraph-2.8-release-notes#v2819-august-2022) +- [RediSearch v2.4.14]({{< relref "operate/oss_and_stack/stack-with-enterprise/release-notes/redisearch/redisearch-2.4-release-notes#v2414-august-2022" >}}) +- [RedisGraph v2.8.19]({{< relref "operate/oss_and_stack/stack-with-enterprise/release-notes/redisgraph/redisgraph-2.8-release-notes#v2819-august-2022" >}}) See [Upgrade modules]({{< relref "/operate/oss_and_stack/stack-with-enterprise/install/upgrade-module" >}}) to learn how to upgrade a module for a database. diff --git a/content/operate/rs/release-notes/rs-6-2-18-releases/rs-6-2-18-65.md b/content/operate/rs/release-notes/rs-6-2-18-releases/rs-6-2-18-65.md index 8e07649994..123baf5fa0 100644 --- a/content/operate/rs/release-notes/rs-6-2-18-releases/rs-6-2-18-65.md +++ b/content/operate/rs/release-notes/rs-6-2-18-releases/rs-6-2-18-65.md @@ -35,8 +35,8 @@ The following table shows the MD5 checksums for the available packages: Redis Enterprise Software v6.2.18-65 (December release) includes newer versions of the following Redis modules: -- [RediSearch v2.4.16]({{< baseurl >}}operate/oss_and_stack/stack-with-enterprise/release-notes/redisearch/redisearch-2.4-release-notes#v2416-november-2022) -- [RedisGraph v2.8.20]({{< baseurl >}}operate/oss_and_stack/stack-with-enterprise/release-notes/redisgraph/redisgraph-2.8-release-notes#v2820-september-2022) +- [RediSearch v2.4.16]({{< relref "operate/oss_and_stack/stack-with-enterprise/release-notes/redisearch/redisearch-2.4-release-notes#v2416-november-2022" >}}) +- [RedisGraph v2.8.20]({{< relref "operate/oss_and_stack/stack-with-enterprise/release-notes/redisgraph/redisgraph-2.8-release-notes#v2820-september-2022" >}}) See [Upgrade modules]({{< relref "/operate/oss_and_stack/stack-with-enterprise/install/upgrade-module" >}}) to learn how to upgrade a module for a database. diff --git a/content/operate/rs/release-notes/rs-6-4-2-releases/rs-6-4-2-103.md b/content/operate/rs/release-notes/rs-6-4-2-releases/rs-6-4-2-103.md index a0db14247a..7c455ead78 100644 --- a/content/operate/rs/release-notes/rs-6-4-2-releases/rs-6-4-2-103.md +++ b/content/operate/rs/release-notes/rs-6-4-2-releases/rs-6-4-2-103.md @@ -38,15 +38,15 @@ This version offers: Redis Enterprise Software version 6.4.2-103 includes the following Redis Stack modules: -- [RediSearch v2.6.12]({{< baseurl >}}operate/oss_and_stack/stack-with-enterprise/release-notes/redisearch/redisearch-2.6-release-notes) +- [RediSearch v2.6.12]({{< relref "operate/oss_and_stack/stack-with-enterprise/release-notes/redisearch/redisearch-2.6-release-notes" >}}) -- [RedisJSON v2.4.7]({{< baseurl >}}operate/oss_and_stack/stack-with-enterprise/release-notes/redisjson/redisjson-2.4-release-notes) +- [RedisJSON v2.4.7]({{< relref "operate/oss_and_stack/stack-with-enterprise/release-notes/redisjson/redisjson-2.4-release-notes" >}}) -- [RedisBloom v2.4.5]({{< baseurl >}}operate/oss_and_stack/stack-with-enterprise/release-notes/redisbloom/redisbloom-2.4-release-notes) +- [RedisBloom v2.4.5]({{< relref "operate/oss_and_stack/stack-with-enterprise/release-notes/redisbloom/redisbloom-2.4-release-notes" >}}) -- [RedisGraph v2.10.12]({{< baseurl >}}operate/oss_and_stack/stack-with-enterprise/release-notes/redisgraph/redisgraph-2.10-release-notes) +- [RedisGraph v2.10.12]({{< relref "operate/oss_and_stack/stack-with-enterprise/release-notes/redisgraph/redisgraph-2.10-release-notes" >}}) -- [RedisTimeSeries v1.8.11]({{< baseurl >}}operate/oss_and_stack/stack-with-enterprise/release-notes/redistimeseries/redistimeseries-1.8-release-notes) +- [RedisTimeSeries v1.8.11]({{< relref "operate/oss_and_stack/stack-with-enterprise/release-notes/redistimeseries/redistimeseries-1.8-release-notes" >}}) ### Resolved issues diff --git a/content/operate/rs/release-notes/rs-6-4-2-releases/rs-6-4-2-110.md b/content/operate/rs/release-notes/rs-6-4-2-releases/rs-6-4-2-110.md index bf47197806..6d86ab5082 100644 --- a/content/operate/rs/release-notes/rs-6-4-2-releases/rs-6-4-2-110.md +++ b/content/operate/rs/release-notes/rs-6-4-2-releases/rs-6-4-2-110.md @@ -35,15 +35,15 @@ Redis has announced the end of life for RedisGraph. See the [announcement](https Redis Enterprise Software version 6.4.2-110 includes the following Redis Stack modules: -- [RediSearch v2.6.12]({{< baseurl >}}operate/oss_and_stack/stack-with-enterprise/release-notes/redisearch/redisearch-2.6-release-notes) +- [RediSearch v2.6.12]({{< relref "operate/oss_and_stack/stack-with-enterprise/release-notes/redisearch/redisearch-2.6-release-notes" >}}) -- [RedisJSON v2.4.7]({{< baseurl >}}operate/oss_and_stack/stack-with-enterprise/release-notes/redisjson/redisjson-2.4-release-notes) +- [RedisJSON v2.4.7]({{< relref "operate/oss_and_stack/stack-with-enterprise/release-notes/redisjson/redisjson-2.4-release-notes" >}}) -- [RedisBloom v2.4.8]({{< baseurl >}}operate/oss_and_stack/stack-with-enterprise/release-notes/redisbloom/redisbloom-2.4-release-notes) +- [RedisBloom v2.4.8]({{< relref "operate/oss_and_stack/stack-with-enterprise/release-notes/redisbloom/redisbloom-2.4-release-notes" >}}) -- [RedisGraph v2.10.15]({{< baseurl >}}operate/oss_and_stack/stack-with-enterprise/release-notes/redisgraph/redisgraph-2.10-release-notes) +- [RedisGraph v2.10.15]({{< relref "operate/oss_and_stack/stack-with-enterprise/release-notes/redisgraph/redisgraph-2.10-release-notes" >}}) -- [RedisTimeSeries v1.8.11]({{< baseurl >}}operate/oss_and_stack/stack-with-enterprise/release-notes/redistimeseries/redistimeseries-1.8-release-notes) +- [RedisTimeSeries v1.8.11]({{< relref "operate/oss_and_stack/stack-with-enterprise/release-notes/redistimeseries/redistimeseries-1.8-release-notes" >}}) ### Resolved issues diff --git a/content/operate/rs/release-notes/rs-6-4-2-releases/rs-6-4-2-115.md b/content/operate/rs/release-notes/rs-6-4-2-releases/rs-6-4-2-115.md index 21806a5dfa..7d7cc0b044 100644 --- a/content/operate/rs/release-notes/rs-6-4-2-releases/rs-6-4-2-115.md +++ b/content/operate/rs/release-notes/rs-6-4-2-releases/rs-6-4-2-115.md @@ -31,15 +31,15 @@ This version offers: Redis Enterprise Software version 6.4.2-115 includes the following Redis Stack modules: -- [RediSearch v2.6]({{< baseurl >}}operate/oss_and_stack/stack-with-enterprise/release-notes/redisearch/redisearch-2.6-release-notes) +- [RediSearch v2.6]({{< relref "operate/oss_and_stack/stack-with-enterprise/release-notes/redisearch/redisearch-2.6-release-notes" >}}) -- [RedisJSON v2.4]({{< baseurl >}}operate/oss_and_stack/stack-with-enterprise/release-notes/redisjson/redisjson-2.4-release-notes) +- [RedisJSON v2.4]({{< relref "operate/oss_and_stack/stack-with-enterprise/release-notes/redisjson/redisjson-2.4-release-notes" >}}) -- [RedisBloom v2.4]({{< baseurl >}}operate/oss_and_stack/stack-with-enterprise/release-notes/redisbloom/redisbloom-2.4-release-notes) +- [RedisBloom v2.4]({{< relref "operate/oss_and_stack/stack-with-enterprise/release-notes/redisbloom/redisbloom-2.4-release-notes" >}}) -- [RedisGraph v2.10]({{< baseurl >}}operate/oss_and_stack/stack-with-enterprise/release-notes/redisgraph/redisgraph-2.10-release-notes) +- [RedisGraph v2.10]({{< relref "operate/oss_and_stack/stack-with-enterprise/release-notes/redisgraph/redisgraph-2.10-release-notes" >}}) -- [RedisTimeSeries v1.8]({{< baseurl >}}operate/oss_and_stack/stack-with-enterprise/release-notes/redistimeseries/redistimeseries-1.8-release-notes) +- [RedisTimeSeries v1.8]({{< relref "operate/oss_and_stack/stack-with-enterprise/release-notes/redistimeseries/redistimeseries-1.8-release-notes" >}}) ## Version changes diff --git a/content/operate/rs/release-notes/rs-6-4-2-releases/rs-6-4-2-121.md b/content/operate/rs/release-notes/rs-6-4-2-releases/rs-6-4-2-121.md index ab142acec2..156400d1ea 100644 --- a/content/operate/rs/release-notes/rs-6-4-2-releases/rs-6-4-2-121.md +++ b/content/operate/rs/release-notes/rs-6-4-2-releases/rs-6-4-2-121.md @@ -25,15 +25,15 @@ This version offers: Redis Enterprise Software version 6.4.2-121 includes the following Redis Stack modules: -- [RediSearch v2.6]({{< baseurl >}}operate/oss_and_stack/stack-with-enterprise/release-notes/redisearch/redisearch-2.6-release-notes) +- [RediSearch v2.6]({{< relref "operate/oss_and_stack/stack-with-enterprise/release-notes/redisearch/redisearch-2.6-release-notes" >}}) -- [RedisJSON v2.4]({{< baseurl >}}operate/oss_and_stack/stack-with-enterprise/release-notes/redisjson/redisjson-2.4-release-notes) +- [RedisJSON v2.4]({{< relref "operate/oss_and_stack/stack-with-enterprise/release-notes/redisjson/redisjson-2.4-release-notes" >}}) -- [RedisBloom v2.4]({{< baseurl >}}operate/oss_and_stack/stack-with-enterprise/release-notes/redisbloom/redisbloom-2.4-release-notes) +- [RedisBloom v2.4]({{< relref "operate/oss_and_stack/stack-with-enterprise/release-notes/redisbloom/redisbloom-2.4-release-notes" >}}) -- [RedisGraph v2.10]({{< baseurl >}}operate/oss_and_stack/stack-with-enterprise/release-notes/redisgraph/redisgraph-2.10-release-notes) +- [RedisGraph v2.10]({{< relref "operate/oss_and_stack/stack-with-enterprise/release-notes/redisgraph/redisgraph-2.10-release-notes" >}}) -- [RedisTimeSeries v1.8]({{< baseurl >}}operate/oss_and_stack/stack-with-enterprise/release-notes/redistimeseries/redistimeseries-1.8-release-notes) +- [RedisTimeSeries v1.8]({{< relref "operate/oss_and_stack/stack-with-enterprise/release-notes/redistimeseries/redistimeseries-1.8-release-notes" >}}) ## Version changes diff --git a/content/operate/rs/release-notes/rs-6-4-2-releases/rs-6-4-2-30.md b/content/operate/rs/release-notes/rs-6-4-2-releases/rs-6-4-2-30.md index 770e339e7f..61ed84af32 100644 --- a/content/operate/rs/release-notes/rs-6-4-2-releases/rs-6-4-2-30.md +++ b/content/operate/rs/release-notes/rs-6-4-2-releases/rs-6-4-2-30.md @@ -60,15 +60,15 @@ If you use ACLs and pub/sub channels, we recommend you review your databases and Redis Enterprise Software v6.4.2 includes the following Redis modules: -- [RediSearch v2.4.16]({{< baseurl >}}operate/oss_and_stack/stack-with-enterprise/release-notes/redisearch/redisearch-2.4-release-notes#v2416-november-2022) +- [RediSearch v2.4.16]({{< relref "operate/oss_and_stack/stack-with-enterprise/release-notes/redisearch/redisearch-2.4-release-notes#v2416-november-2022" >}}) -- [RedisJSON v2.2.0]({{< baseurl >}}operate/oss_and_stack/stack-with-enterprise/release-notes/redisjson/redisjson-2.2-release-notes#v220-july-2022) +- [RedisJSON v2.2.0]({{< relref "operate/oss_and_stack/stack-with-enterprise/release-notes/redisjson/redisjson-2.2-release-notes#v220-july-2022" >}}) - [RedisBloom v2.2.18]({{< relref "/operate/oss_and_stack/stack-with-enterprise/bloom" >}}release-notes/redisbloom-2.2-release-notes/#v2218-july-2022) -- [RedisGraph v2.8.20]({{< baseurl >}}operate/oss_and_stack/stack-with-enterprise/release-notes/redisgraph/redisgraph-2.8-release-notes#v2820-september-2022) +- [RedisGraph v2.8.20]({{< relref "operate/oss_and_stack/stack-with-enterprise/release-notes/redisgraph/redisgraph-2.8-release-notes#v2820-september-2022" >}}) -- [RedisTimeSeries v1.6.17]({{< baseurl >}}operate/oss_and_stack/stack-with-enterprise/release-notes/redistimeseries/redistimeseries-1.6-release-notes#v1617-july-2022) +- [RedisTimeSeries v1.6.17]({{< relref "operate/oss_and_stack/stack-with-enterprise/release-notes/redistimeseries/redistimeseries-1.6-release-notes#v1617-july-2022" >}}) See [Upgrade modules]({{< relref "/operate/oss_and_stack/stack-with-enterprise/install/upgrade-module" >}}) to learn how to upgrade a module for a database. diff --git a/content/operate/rs/release-notes/rs-6-4-2-releases/rs-6-4-2-94.md b/content/operate/rs/release-notes/rs-6-4-2-releases/rs-6-4-2-94.md index 506bf495bb..753c9e9810 100644 --- a/content/operate/rs/release-notes/rs-6-4-2-releases/rs-6-4-2-94.md +++ b/content/operate/rs/release-notes/rs-6-4-2-releases/rs-6-4-2-94.md @@ -40,15 +40,15 @@ The following table shows the MD5 checksums for the available packages: Redis Enterprise Software v6.4.2 includes the new features delivered in the latest [Redis Stack release (6.2.6 v7)](https://redis.com/blog/introducing-redis-stack-6-2-6-and-7-0-6/): -- [RediSearch v2.6.9]({{< baseurl >}}operate/oss_and_stack/stack-with-enterprise/release-notes/redisearch/redisearch-2.6-release-notes) +- [RediSearch v2.6.9]({{< relref "operate/oss_and_stack/stack-with-enterprise/release-notes/redisearch/redisearch-2.6-release-notes" >}}) -- [RedisJSON v2.4.7]({{< baseurl >}}operate/oss_and_stack/stack-with-enterprise/release-notes/redisjson/redisjson-2.4-release-notes) +- [RedisJSON v2.4.7]({{< relref "operate/oss_and_stack/stack-with-enterprise/release-notes/redisjson/redisjson-2.4-release-notes" >}}) -- [RedisBloom v2.4.5]({{< baseurl >}}operate/oss_and_stack/stack-with-enterprise/release-notes/redisbloom/redisbloom-2.4-release-notes) +- [RedisBloom v2.4.5]({{< relref "operate/oss_and_stack/stack-with-enterprise/release-notes/redisbloom/redisbloom-2.4-release-notes" >}}) -- [RedisGraph v2.10.10]({{< baseurl >}}operate/oss_and_stack/stack-with-enterprise/release-notes/redisgraph/redisgraph-2.10-release-notes) +- [RedisGraph v2.10.10]({{< relref "operate/oss_and_stack/stack-with-enterprise/release-notes/redisgraph/redisgraph-2.10-release-notes" >}}) -- [RedisTimeSeries v1.8.10]({{< baseurl >}}operate/oss_and_stack/stack-with-enterprise/release-notes/redistimeseries/redistimeseries-1.8-release-notes) +- [RedisTimeSeries v1.8.10]({{< relref "operate/oss_and_stack/stack-with-enterprise/release-notes/redistimeseries/redistimeseries-1.8-release-notes" >}}) See [Upgrade modules]({{< relref "/operate/oss_and_stack/stack-with-enterprise/install/upgrade-module" >}}) to learn how to upgrade a module for a database. diff --git a/content/operate/rs/release-notes/rs-7-2-4-releases/_index.md b/content/operate/rs/release-notes/rs-7-2-4-releases/_index.md index fc8f54eb65..25ef24f51d 100644 --- a/content/operate/rs/release-notes/rs-7-2-4-releases/_index.md +++ b/content/operate/rs/release-notes/rs-7-2-4-releases/_index.md @@ -71,7 +71,7 @@ To prevent potential application issues due to RESP3 breaking changes, see [Clie - [`CLUSTER SLOTS`]({{< relref "/commands/cluster-slots" >}}) is deprecated as of Redis 7.0 -- [`JSON.RESP`]({{< baseurl >}}commands/json.resp) is deprecated as of Redis Stack 7.2. +- [`JSON.RESP`]({{< relref "commands/json.resp" >}}) is deprecated as of Redis Stack 7.2. - [`QUIT`]({{< relref "/commands/quit" >}}) is deprecated as of Redis 7.2 diff --git a/content/operate/rs/release-notes/rs-7-2-4-releases/rs-7-2-4-109.md b/content/operate/rs/release-notes/rs-7-2-4-releases/rs-7-2-4-109.md index d0a42dc710..92a4ac5669 100644 --- a/content/operate/rs/release-notes/rs-7-2-4-releases/rs-7-2-4-109.md +++ b/content/operate/rs/release-notes/rs-7-2-4-releases/rs-7-2-4-109.md @@ -27,13 +27,13 @@ This version offers: Redis Enterprise Software versions 7.2.4-109 includes the following Redis Stack modules: -- [RediSearch 2.8.9]({{< baseurl >}}operate/oss_and_stack/stack-with-enterprise/release-notes/redisearch/redisearch-2.8-release-notes) +- [RediSearch 2.8.9]({{< relref "operate/oss_and_stack/stack-with-enterprise/release-notes/redisearch/redisearch-2.8-release-notes" >}}) -- [RedisJSON 2.6.6]({{< baseurl >}}operate/oss_and_stack/stack-with-enterprise/release-notes/redisjson/redisjson-2.6-release-notes) +- [RedisJSON 2.6.6]({{< relref "operate/oss_and_stack/stack-with-enterprise/release-notes/redisjson/redisjson-2.6-release-notes" >}}) -- [RedisTimeSeries 1.10.6]({{< baseurl >}}operate/oss_and_stack/stack-with-enterprise/release-notes/redistimeseries/redistimeseries-1.10-release-notes) +- [RedisTimeSeries 1.10.6]({{< relref "operate/oss_and_stack/stack-with-enterprise/release-notes/redistimeseries/redistimeseries-1.10-release-notes" >}}) -- [RedisBloom 2.6.11]({{< baseurl >}}operate/oss_and_stack/stack-with-enterprise/release-notes/redisbloom/redisbloom-2.6-release-notes) +- [RedisBloom 2.6.11]({{< relref "operate/oss_and_stack/stack-with-enterprise/release-notes/redisbloom/redisbloom-2.6-release-notes" >}}) - [RedisGears 2.0.17](https://github.com/RedisGears/RedisGears/releases/tag/v2.0.17-m18) diff --git a/content/operate/rs/release-notes/rs-7-2-4-releases/rs-7-2-4-122.md b/content/operate/rs/release-notes/rs-7-2-4-releases/rs-7-2-4-122.md index 36b2fdcf31..dc7e7da824 100644 --- a/content/operate/rs/release-notes/rs-7-2-4-releases/rs-7-2-4-122.md +++ b/content/operate/rs/release-notes/rs-7-2-4-releases/rs-7-2-4-122.md @@ -25,13 +25,13 @@ This version offers: Redis Enterprise Software versions 7.2.4-122 includes the following Redis Stack modules: -- [RediSearch 2.8]({{< baseurl >}}operate/oss_and_stack/stack-with-enterprise/release-notes/redisearch/redisearch-2.8-release-notes) +- [RediSearch 2.8]({{< relref "operate/oss_and_stack/stack-with-enterprise/release-notes/redisearch/redisearch-2.8-release-notes" >}}) -- [RedisJSON 2.6]({{< baseurl >}}operate/oss_and_stack/stack-with-enterprise/release-notes/redisjson/redisjson-2.6-release-notes) +- [RedisJSON 2.6]({{< relref "operate/oss_and_stack/stack-with-enterprise/release-notes/redisjson/redisjson-2.6-release-notes" >}}) -- [RedisTimeSeries 1.10]({{< baseurl >}}operate/oss_and_stack/stack-with-enterprise/release-notes/redistimeseries/redistimeseries-1.10-release-notes) +- [RedisTimeSeries 1.10]({{< relref "operate/oss_and_stack/stack-with-enterprise/release-notes/redistimeseries/redistimeseries-1.10-release-notes" >}}) -- [RedisBloom 2.6]({{< baseurl >}}operate/oss_and_stack/stack-with-enterprise/release-notes/redisbloom/redisbloom-2.6-release-notes) +- [RedisBloom 2.6]({{< relref "operate/oss_and_stack/stack-with-enterprise/release-notes/redisbloom/redisbloom-2.6-release-notes" >}}) - [RedisGears 2.0](https://github.com/RedisGears/RedisGears/releases/tag/v2.0.17-m18) diff --git a/content/operate/rs/release-notes/rs-7-2-4-releases/rs-7-2-4-52.md b/content/operate/rs/release-notes/rs-7-2-4-releases/rs-7-2-4-52.md index 09539f0cf5..07d8fb2c32 100644 --- a/content/operate/rs/release-notes/rs-7-2-4-releases/rs-7-2-4-52.md +++ b/content/operate/rs/release-notes/rs-7-2-4-releases/rs-7-2-4-52.md @@ -237,9 +237,9 @@ The following sections include a few highlights. For more details, see the [Redi ##### Search and query -- Introduces [Geo Polygon]({{< baseurl >}}commands/ft.search#examples) Search. Geo range queries now accept the [`GEOSHAPE`]({{< baseurl >}}commands/ft.create#required-arguments) field type, which supports polygon shapes using [WKT notation](https://en.wikipedia.org/wiki/Well-known_text_representation_of_geometry). `GEOSHAPE` supports `POLYGON` and `POINT` as shape formats and polygon operations. +- Introduces [Geo Polygon]({{< relref "commands/ft.search#examples" >}}) Search. Geo range queries now accept the [`GEOSHAPE`]({{< relref "commands/ft.create#required-arguments" >}}) field type, which supports polygon shapes using [WKT notation](https://en.wikipedia.org/wiki/Well-known_text_representation_of_geometry). `GEOSHAPE` supports `POLYGON` and `POINT` as shape formats and polygon operations. -- Performance improvements for `SORT BY` operations using [`FT.SEARCH`]({{< baseurl >}}commands/ft.search#optional-arguments) and [`FT.AGGREGATE`]({{< baseurl >}}commands/ft.aggregate#optional-arguments). +- Performance improvements for `SORT BY` operations using [`FT.SEARCH`]({{< relref "commands/ft.search#optional-arguments" >}}) and [`FT.AGGREGATE`]({{< relref "commands/ft.aggregate#optional-arguments" >}}). - New `FORMAT` for improved readability and future support for better error handling responses on `FT.SEARCH` and `FT.AGGREGATE` in RESP3 only. @@ -247,9 +247,9 @@ The following sections include a few highlights. For more details, see the [Redi JSON introduces two new commands: - - [JSON.MERGE]({{< baseurl >}}commands/json.merge) merges a given JSON value into matching paths to update, delete, or expand the JSON values at the matching paths. + - [JSON.MERGE]({{< relref "commands/json.merge" >}}) merges a given JSON value into matching paths to update, delete, or expand the JSON values at the matching paths. - - [JSON.MSET]({{< baseurl >}}commands/json.mset) sets or updates one or more JSON values according to specified key-path-value triplets. + - [JSON.MSET]({{< relref "commands/json.mset" >}}) sets or updates one or more JSON values according to specified key-path-value triplets. ##### Triggers and functions preview @@ -458,7 +458,7 @@ If you are using [LettuceMod](https://github.com/redis-developer/lettucemod/), y - [`CLUSTER SLOTS`]({{< relref "/commands/cluster-slots" >}}) is deprecated as of Redis 7.0 -- [`JSON.RESP`]({{< baseurl >}}commands/json.resp) is deprecated as of Redis Stack 7.2. +- [`JSON.RESP`]({{< relref "commands/json.resp" >}}) is deprecated as of Redis Stack 7.2. - [`QUIT`]({{< relref "/commands/quit" >}}) is deprecated as of Redis 7.2 diff --git a/layouts/shortcodes/baseurl.html b/layouts/shortcodes/baseurl.html deleted file mode 100644 index d989f64d4e..0000000000 --- a/layouts/shortcodes/baseurl.html +++ /dev/null @@ -1 +0,0 @@ -{{ $base := .Site.BaseURL }}{{ $parsed := urls.Parse $base }}{{ $path := $parsed.Path }}{{ if not (eq $path "/") }}{{- $path -}}{{ end }} \ No newline at end of file From 86f1a0a1ceede99e2cf7b4c6be8422d51f15f5b1 Mon Sep 17 00:00:00 2001 From: paoloredis Date: Fri, 7 Mar 2025 11:08:03 +0100 Subject: [PATCH 2/2] Update README --- README.md | 7 ------- 1 file changed, 7 deletions(-) diff --git a/README.md b/README.md index 71fa836575..5b0addc069 100644 --- a/README.md +++ b/README.md @@ -93,13 +93,6 @@ It's strongly advised to use `relref` because it provides the following advantag The following needs to be taken into account when using `relref`: The reference `/develop/get-started/data-store` and `/develop/get-started/data-store/` aren't the same. You must use the trailing slash if the referenced article is an `_index.md` file within a folder (e.g., `.../data-store/` for `.../data-store/_index.md`). Otherwise, you should not use the trailing slash (e.g., `.../get-started/data-store.md`). -RelRefs with dots (`.`) and hashtags (`#`) in the reference name, such as `/commands/ft.create` or `/develop/data-types/timeseries/configuration#compaction_policy`, don't seem to work. Please use the `{{< baseurl >}}` as a workaround in that case. Here are a couple of examples: - -``` -[compaction]({{< baseurl >}}/develop/data-types/timeseries/configuration#compaction_policy) -[FT.CREATE]({{< baseurl >}}/commands/ft.create) -``` - ### Images The image shortcode doesn't need to be closed anymore. Here is an example;