RediSearch 1.4 release notes

Requirements

RediSearch v1.4.28 requires:

- Minimum Redis compatibility version (database): 4.0.0
- Minimum Redis Enterprise Software version (cluster): 5.0.0

v1.4.28 (May 2020)

This is a maintenance release for version 1.4.

Headlines:

- This release improves overall stability and provides fixes for issues found after the previous release.

Details:

- Bugfixes:
    - #[1218](https://github.com/RediSearch/RediSearch/pull/1218) Potential crash when running without concurrency and using the cursor API.

v1.4.27 (April 2020)

Headlines:

- This release improves overall stability and provides fixes for issues found after the previous release.

Details:

- Features:
    - #[1172](https://github.com/redisearch/redisearch/issues/1172) Added `exists` function that can be used on conditional updates `REPLACE PARTIAL` to check if a field exists in the document.
- Minor Enhancements:
    - #[1172](https://github.com/redisearch/redisearch/issues/1172) Lazy evaluation of the right side of 'or'/'and' clauses in IF condition.
- Bugfixes:
    - #[1110](https://github.com/redisearch/redisearch/issues/1110) Rare GC failure when accessing uninitialized variable.
    - #[1131](https://github.com/redisearch/redisearch/issues/1131) Crash on highlighting a search query where the document no longer exists.

v1.4.26 (March 2020)

Headlines:

- This release improves overall stability and provides fixes for issues found after the previous release.

Details:

- Fix rare `FORK GC` crash which caused by accessing uninitialized variable.

v1.4.25 (March 2020)

Headlines:

- This release improves overall stability and provides fixes for issues found after the previous release.

Details:

- Features:
    - #[1051](https://github.com/RediSearch/RediSearch/issues/1051) Added support for updating tag fields on document updates with `NOINDEX` fields.
- Bugfixes:
    - #[1051](https://github.com/RediSearch/RediSearch/issues/1051) `FORK GC` was not updating the unique sum of the numeric index.

v1.4.24 (January 2020)

Headlines:

- This release improves overall stability and provides fixes for issues found after the previous release.

Details:

- Bugfixes:
    - #[1038](https://github.com/RediSearch/RediSearch/issues/1038) Memory leak on cursor.
    - #[1049](https://github.com/RediSearch/RediSearch/issues/1049) Crash on conversion error when freeing other indexed fields.

v1.4.23

Headlines:

- This release improves overall stability and provides fixes for issues found after the previous release.

Details:

- Bugfixes:
    - Memory leak when cursor timed out and cursor wasn't consumed.

v1.4.22

Headlines:

- This release improves overall stability and provides fixes for issues found after the previous release.

Details:

- Bugfixes:
    - FILTER option was not working correctly with coordinator.
    - Memory leak when cursor was combined with sorted fields.

v1.4.21

Headlines:

- This release improves overall stability and provides fixes for issues found after the previous release.

Details:

- Bugfixes:
    - #[1031](https://github.com/RediSearch/RediSearch/issues/1031) Highlighting crashed when used with `NOINDEX` fields.

v1.4.20 (January 2020)

Update urgency: Medium
This is a maintenance release for version 1.4.

This release improves overall stability and provides fixes for issues found after the previous release.

- Improvements
    - #[1020](https://github.com/RediSearch/RediSearch/issues/1020) Performance improvement for reading fields that are not sortable.
- Bugfixes
    - #[1022](https://github.com/RediSearch/RediSearch/issues/1022) Illegal memory access by queries during `GC` run.
    - #[1022](https://github.com/RediSearch/RediSearch/issues/1022) Recreating the index with the same name (delete+create) removed the index from cursor list.
    - #[1022](https://github.com/RediSearch/RediSearch/issues/1022) Memory leak when performing `FT.AGGREGATE` on non-existing index.
    - #[1022](https://github.com/RediSearch/RediSearch/issues/1022) Potential data corruption during `GC` run.
    - #[1025](https://github.com/RediSearch/RediSearch/issues/1025) Aliasing not working properly with `FT.AGGREGATE`.

v1.4.19 (December 2019)

Update urgency: Medium
This is a maintenance release for version 1.4.

This release improves overall stability and provides fixes for issues found after the previous release.

- Bugfixes
    - #[1000](https://github.com/RediSearch/RediSearch/issues/1000) - `FT.DEL` was not replicated to replica correctly
    - #[1004](https://github.com/RediSearch/RediSearch/issues/1004) -  Memory leak on `TAG` array on certain situations
    - #[1006](https://github.com/RediSearch/RediSearch/issues/1006) - Unexposed error on conditional update `IF` that caused the error message to leak

v1.4.18 (November 2019)

Update urgency: Medium
This is a maintenance release for version 1.4.

This release improves overall stability and provides fixes for issues found after the previous release.

- Bug fixes
    - [#947](https://github.com/RediSearch/RediSearch/issues/947) Fix short read on FORK GC pipe that could result in a crash and potential data corruption

v1.4.17 (October 2019)

Update urgency: Medium
This is a maintenance release for version 1.4.

This release improves overall stability and provides fixes for issues found after the previous release.

- Features:
    - #[779](https://github.com/RediSearch/RediSearch/issues/779) Added `to_number()` and `to_str()` functions for ambiguity reasons
- Improvements
    - #[891](https://github.com/RediSearch/RediSearch/issues/891) All memory allocations will now use the redis memory allocator.  This means that all the memory will be exposed correctly in the redis `INFO MEMORY` command.

v1.4.16 (September 2019)

Update urgency: Medium
This is a maintenance release for version 1.4.

This release improves overall stability and provides fixes for issues found after the previous release.

Main features:

- #[883](https://github.com/RediSearch/RediSearch/issues/883) Forkgc optimizations - introduce new config parameter `FORK_GC_CLEAN_THRESHOLD`. RediSearch will only start to clean when the number of not cleaned documents is exceeding this threshold.

Main Fixes:

- #[848](https://github.com/RediSearch/RediSearch/issues/848) RediSearch will not crash when sorting on fields that don't exists in all documents.
- #[884](https://github.com/RediSearch/RediSearch/issues/884) Fix wrong results on intersect iterator.

v1.4.15 (28 August 2019)

Update urgency: Medium
This is a maintenance release for version 1.4.

This release improves overall stability and provides fixes for issues found after the previous release.

Main Fixes:

- #[866](https://github.com/RediSearch/RediSearch/issues/866) - Fix RDB corruption caused by deleting none-existing terms from the suggestion trie.
- When Redis exits, forked processes by FORK Garbage Collection will now be closed accordingly.
- For indices that are not temporary and interleaved: When an index is dropped, the indexer thread is now closed.

v1.4.14 (20 August 2019)

Update urgency: Medium
This is a maintenance release for version 1.4.

This release improves overall stability and provides fixes for issues found after the previous release.

Main Fixes:

- #[851](https://github.com/RediSearch/RediSearch/issues/851) In interleaved mode (non safemode), documents deleted by concurrent updates, will be ignored.

v1.4.13 (8 August 2019)

Update urgency: Medium
This is a maintenance release for version 1.4.

This release improves overall stability and provides fixes for issues found after the previous release .

Main Fixes:

- #[798](https://github.com/RediSearch/RediSearch/issues/798) fix issue where phonetic queries return wrong results
- #[820](https://github.com/RediSearch/RediSearch/issues/820) fix crash on getting a none existing doc from a doc table
- Fix issue with invalid memory read when using tags with ' ' (space) separator

v1.4.12 (5 August 2019)

Update urgency: Medium
This is a maintenance release for version 1.4.

This release improves overall stability and provides fixes for issues found after the previous release .

Main features:

- #[741](https://github.com/RediSearch/RediSearch/issues/741) Allow Chinese tokenizing to recognise \-escape for punctuations

Main Fixes:

- #[739](https://github.com/RediSearch/RediSearch/issues/739) Fix crash on search error
- #[346](https://github.com/RediSearch/RediSearch/issues/346) Fix issue where fuzzy can not be used with numbers
- #[769](https://github.com/RediSearch/RediSearch/issues/769) Fix rare crash on rdb loading
- #[749](https://github.com/RediSearch/RediSearch/issues/749) On prefix searches, do not expand prefixes to terms which have no documents

v1.4.11 (June 2019)

Update urgency: Medium

This release only add support for aliasing to the previews 1.4.10 release.

- Added functionality
    - #[731](https://github.com/RediSearch/RediSearch/issues/731) Add index aliasing. This allows users to provide (or remove) ‘links’ to indexes. The commands are FT.ALIASADD, FT.ALIASDEL, and FT.ALIASUPDATE.

v1.4.10 (28 May 2019)

Update urgency: Medium

This is a maintenance release for version 1.4.

This release improves overall stability and provides fixes for issues found after the previous release .

Main Fixes:

- Fix memory leak when combining SORT with APPLY on FT.AGGREGATE

v1.4.9 (18 May 2019)

Update urgency: Medium

This is a maintenance release for version 1.4.

This release improves overall stability and provides fixes for issues found after the previous release .

Main Fixes:

- Fork GC will now squash the empty blocks of the inverted indexes.
- Fix invalid memory access when using aggregate with GROUPBY.
- Fix issue where using limit with SORTBY might return duplicate results.

Known Issue:

- Memory leak when combining SORT and APPLY in FT.AGGREGATE. This issue is fixed on 1.4.10. It's recommended to skip directly to 1.4.10.

v1.4.8 (29 April 2019)

Update urgency: Low

Technical release, no changes nor fixes.

v1.4.7 (29 April 2019)

Update urgency: Medium

This is a maintenance release for version 1.4.

This release improves overall stability and provides fixes for issues found after the previous release .

Main Fixes:

- Fix issue where Dropping and recreating the same index while querying might cause crashes.

v1.4.6 (8 April 2019)

Update urgency: Medium

This is a maintenance release for version 1.4.

This release improves overall stability and provides fixes for issues found after the previous release .

Main Fixes:

- Loading a potentially corrupted RDB files generated by versions lower than 1.4
- Fix issue where `REPLACE PARTIAL` might not work properly (#[621](https://github.com/RediSearch/RediSearch/issues/621))

v1.4.5 (March 2019)

Update urgency: Low

This is a maintenance release for version 1.4.

This release improves overall stability and provides fixes for issues found after the previous release .

Main Fixes:

- Fixed issue where FORK GC causing redis rdb fork to fail

v1.4.4 (21 February 2019)

Update urgency: Low

This is a maintenance release for version 1.4.

This release improves overall stability and provides fixes for issues found after the previous release .

Main Fixes:

- Fixed memory leak on Fork GC
- Fixed key close after releasing GIL on Fork GC (might cause crashed on rare situations)

v1.4.3 (4 February 2019)

Update urgency: Low

This is a maintenance release for version 1.4.

This release improves overall stability and provides fixes for issues found after the previous release .

Main Fixes:

1. Fixed memory leak on mempool destroy
1. Fixed process crash when running with fork GC (preview)
1. Fixed fork GC  (preview)  deadlock when using Tags
1. Fixed memory leaks on index creation and deletion

v1.4.2 (27 November 2018)

Update urgency: Low

This is a maintenance release for version 1.4.

This release improves overall stability and provides fixes to issues found.

v1.4.1 (12 November 2018)

Update urgency: Medium

This is a maintenance release for version 1.4, with the next version planned for release being 2.0.

This release improves overall stability and focuses on performance improvements of the garbage collector. It also includes:

- New: Runtime Configuration
- Change: Unlimited Autocomplete Results

Garbage collector

RediSearch employs a garbage collector that removes deleted documents from the internal data structures.

In this release the garbage collection mechanism was improved in terms of efficiency, i.e. the amount of memory it reclaims, as well as in terms of performance (i.e. it is faster). The improved mechanism uses forked threads. Additional details can be found in this post: [How We Increased Garbage Collection Performance with RediSearch 1.4.1](https://redislabs.com/blog/increased-garbage-collection-performance-redisearch-1-4-1/).

The improved collection mechanism is currently **experimental*- and is not enabled by default. Enabling the new garbage collection mechanism requires setting the `GC_POLICY` configuration option to `FORK` at load time, for example:

[code example]

Runtime configuration

RediSearch's [configuration]() is applied via arguments passed to the module at load time. This release introduces the new `FT.CONFIG` command that allows to retrieve the current configuration as well as change it during runtime.

Unlimited autocomplete results

This version removes the limit of 10 results from `FT.SUGGET` - you can set the `MAX num` as high as needed.

v1.4.0 (August 2018)

**Update urgency:*- Medium - mainly due to numerous fixes

This version improves overall stability and performance of RediSearch. It also delivers better support for use cases in which documents are continuously updated. New features:

- Conditional updates
- Schema modification
- Query spelling correction
- Phonetic matching
- Enhancement: More fuzziness in search

Continuous updates

Like most search engines, RediSearch was designed for maintaining append-mostly indices. To update an existing document, the document is actually replaced - that is deleted and added to the index.

Because RediSearch provides realtime indexing and searching, it is sometimes used to search near-realtime data (or the results of its processing). In such cases, the number of indexed documents stays mostly static, but their contents are continuously updated.

To support this use case, RediSearch has been reworked internally to use 64-bit internal document IDs so that an index can sustain high update throughputs without overflowing. Furthermore and as a result, significant effort has been put into improving memory management and garbage collection.

Conditional updates

The `IF` subcommand has been add to `FT.ADD`. When used with the existing `REPLACE [PARTIAL]` subcommand, the document will be updated only if the condition provided evaluates to a truth value, otherwise a special `NOADD` reply is returned.

Schema modification

The `FT.ALTER` command has been introduced, and provides the ability to add new fields to the definition of an existing index. The contents of such newly-added fields are indexed only for new or updated documents.

Query spelling correction

Query spelling correction, a.k.a "did you mean", is now provided via the `FT.SPELLCHECK` command. It enables generating suggestions for search terms that could be misspelled. For more details see [Query Spelling Correction]().

Phonetic matching

Phonetic matching, a.k.a "Jon or John?", is now supported via the `PHONETIC` text field attribute. The terms in such fields are also indexed by their phonetic equivalents, and search results include these by default. For more details see [Phonetic Matching]().

More fuzziness in search

The fuzzy match operator, '%', can now be repeated up to three times to specify the Levenshtein distance. That means that the queries `%hello%`, `%%hello%%` and `%%%hello%%%` will perform fuzzy matching on 'hello' for all terms with LD of 1, 2 and 3, respectively.

redis-server --loadmodule ./redisearch.so GC_POLICY FORK


RediSearch 1.6 release notes

Summary: Improved performance of full-text search and aggregation queries. Support for aliasing of indices. Added a C API to embed RediSearch in other modules. Forked process garbage collection.

Requirements

RediSearch v1.6.16 requires:

- Minimum Redis compatibility version (database): 4.0.0
- Minimum Redis Enterprise Software version (cluster): 5.0.0

v1.6.16 (June 2021)

This is a maintenance release for version 1.6.

Update urgency: MODERATE - Program an upgrade of the server, but it's not urgent.

Details:

- Bug fix:

    - #[2018](https://github.com/RediSearch/RediSearch/pull/2018): FT.ADD REPLACE leaves fields from the previous document that are not included in the new document #[647](https://github.com/RediSearch/RediSearch/pull/647) #[1193](https://github.com/RediSearch/RediSearch/pull/1193)

v1.6.15 (February 2021)

This is a maintenance release for version 1.6.

Update urgency: Low

Details:

- Minor enhancements:
    - #[1225](https://github.com/RediSearch/RediSearch/pull/1225) Allow scientific representation of numbers for numeric fields.
    - #[1574](https://github.com/RediSearch/RediSearch/pull/1574) Allow SORTBY for non-sortable fields.

- Minor bugfixes:
    - #[1683](https://github.com/RediSearch/RediSearch/pull/1683) Add a module parameter _NUMERIC_COMPRESS which prevent <nobr>double -> float</nobr> compression. It prevents an issue where an exact match on some floating-point numbers is not found.
    - #[1757](https://github.com/RediSearch/RediSearch/pull/1757) Remove assertion on the limitation of the number of sortable fields, instead return an error.
    - #[1668](https://github.com/RediSearch/RediSearch/pull/1668) Query words from stopword list on tag fields.
    - #[1745](https://github.com/RediSearch/RediSearch/pull/1745) Enforce 0 value for count reducer.
    - #[1774](https://github.com/RediSearch/RediSearch/pull/1774) MINPREFIX & MAXEXPANSION can be changed in runtime.
    - #[1861](https://github.com/RediSearch/RediSearch/pull/1761) Fix issue for FT.SCOREEXPLAIN where reply array depth can exceed 7.
    - #[1689](https://github.com/RediSearch/RediSearch/pull/1689) FT.SUGGET results from RSCoordinator are more consistent.
    - Various small tweaks under the hood.

v1.6.14 (September 2020)

- This is a maintenance release for version 1.6.

Details:

- Minor features:

    - #[1420](https://github.com/RediSearch/RediSearch/pull/1420) The hard limit of the number of results produced by FT.SEARCH is now configurable with MAXSEARCHRESULTS.

- Bug fixes:

    - #[1313](https://github.com/RediSearch/RediSearch/pull/1313) Wrong error of unsupported phonetic field.
    - #[1286](https://github.com/RediSearch/RediSearch/pull/1286) Possible crash on optional search.
    - #[1449](https://github.com/RediSearch/RediSearch/pull/1449) Rare file descriptor leak on FORK GC.
    - #[1469](https://github.com/RediSearch/RediSearch/pull/1469) Endless loop when reaching internal docid above uint32_max.

v1.6.13 (May 2020)

This is a maintenance release for version 1.6.

Headlines:

- This release improves overall stability and provides fixes for issues found after the previous release.

Details:

- Bugfixes:
    - #[1186](https://github.com/RediSearch/RediSearch/pull/1186) #[1188](https://github.com/RediSearch/RediSearch/pull/1188) incorrect values for `inverted_sz_mb` and `num_records` in `FT.INFO` command.

v1.6.12 (April 2020)

Headlines:

- This release improves overall stability and provides fixes for issues found after the previous release.

Details:

- Features:
    - #[1172](https://github.com/redisearch/redisearch/issues/1172) Added `exists` function that can be used on conditional updates (`REPLACE PARTIAL`) to check if a field exists in the document.
- Minor Enhancements:
    - #[1172](https://github.com/redisearch/redisearch/issues/1172) Lazy evaluation of the right side of 'or'/'and' clauses in IF condition.
    - #[1134](https://github.com/redisearch/redisearch/issues/1134) Remove hard limit on LIMIT when using FT.SEARCH.
- Bugfixes:
    - #[1124](https://github.com/redisearch/redisearch/issues/1124) NOINDEX tag fields could not be updated on UPDATE PARTIAL with no indexed fields.
    - #[1120](https://github.com/redisearch/redisearch/issues/1120) Release loop in II_GetCriteriaTester which released the same criteria tester multiple times.
    - #[1161](https://github.com/redisearch/redisearch/issues/1161) Case where setting `MAXDOCTABLESIZE` had no effect.
    - #[1169](https://github.com/redisearch/redisearch/issues/1169) `FIRST_VALUE` reducer crashed when value did not exist.
    - #[1159](https://github.com/redisearch/redisearch/issues/1159) Infinite loop on `NOT` criteria tester.%

v1.6.11 (March 2020)

Headlines:

- This release improves overall stability and provides fixes for issues found after the previous release.

Details:

- Bugfixes:
    - #[1126](https://github.com/redisearch/redisearch/issues/1126) Memory leak introduced by queries for tag fields that have no results.

v1.6.10 (March 2020)

Headlines:

- This release improves overall stability and provides fixes for issues found after the previous release.
- This release fixes certain backwards compatibility issues compared to 1.4.  Although they are rare cases, it is recommended when upgrading to 1.6 to use this version or newer.

Details:

- Minor Enhancements:
    - #[1062](https://github.com/redisearch/redisearch/issues/1062) Added Custom stopwords list in `FT.INFO`
- Fixed backwards incompatible issues:
    - #[1075](https://github.com/redisearch/redisearch/issues/1075) Fields should always be returned to the user as a string.
    - #[1074](https://github.com/redisearch/redisearch/issues/1074) Don't truncate possible integral values when printing.
    - #[1065](https://github.com/redisearch/redisearch/issues/1065) Revert "Change how generated reducer aliases are made".
- Bugfixes:
    - #[1085](https://github.com/redisearch/redisearch/issues/1085) Min and max value on non leaf nodes in the numeric tree should not be updated.
    - #[1106](https://github.com/redisearch/redisearch/issues/1106)  Pipe leak on `FORK GC` caused by closing the fork without holding the lock.
    - #[1114](https://github.com/redisearch/redisearch/issues/1114)  PR #[986](https://github.com/redisearch/redisearch/issues/986) reverted the work from #[985](https://github.com/redisearch/redisearch/issues/985), #[989](https://github.com/redisearch/redisearch/issues/989). This PR reintroduces these features.

v1.6.9 (February 2020)

Headlines:

- This release improves overall stability and provides fixes for issues found after the previous release.

Details:

- Bugfixes:
    - #[1052](https://github.com/redisearch/redisearch/issues/1052) Remove wrong optimization on Quantile.
    - #[1057](https://github.com/redisearch/redisearch/issues/1057) Memory pool did not release memory when certain limit was reached.

v1.6.8 (February 2020)

v1.6 GA (January 2020)

This is the General Availability Release of RediSearch 1.6 (v1.6.7).

Headlines:

- Several performance improvements increasing full-text search queries up to 60% and aggregation queries up to 73%.
- Support for aliasing of indices.
- Low-level API in C (and [Rust bindings](https://github.com/RediSearch/redisearch-api-rs)) to make RediSearch embeddable in other Redis modules. [RedisGraph]() is the first GA consumer.
- Forked process Garbage Collection (FORK GC) allows for stable read latencies.

Full details:

- Added functionality
    - #[658](https://github.com/RediSearch/RediSearch/issues/658) `FT.ADD … REPLACE … NOCREATE` will not add the document if the document does not exist.
    - #[575](https://github.com/RediSearch/RediSearch/issues/575) Add index aliasing. This allows users to provide (or remove) ‘links’ to indexes. The commands are `FT.ALIASADD`, `FT.ALIASDEL`, and `FT.ALIASUPDATE`.
    - New C API to make RediSearch embeddable in other Redis modules. This API allows other Redis modules to use functionality of RedisSearch without actually having the "module" functionality active. Note that this must still be used on Redis proper. Modules that are already incorporating this API
    - [RedisGraph](https://github.com/RedisGraph/RedisGraph/releases/tag/v2.0.1) GA
    - [RedisTimeSeries](https://github.com/RedisTimeSeries/RedisTimeSeries/pull/186) (WIP)
    - [RedisJSON](https://github.com/RedisJSON/RedisJSON2) (WIP)

- Performance improvements
    - Improve performance when using many union (|) iterators
    - Improve performance when using many intersect iterators
    - Improve overall index reading performance
    - #[598](https://github.com/RediSearch/RediSearch/issues/598) Do not return `foo: NULL` if `foo` is not present in the document. This conserves network bandwidth

- Bugfixes - Semantics
    - #[688](https://github.com/RediSearch/RediSearch/issues/688) #[623](https://github.com/RediSearch/RediSearch/issues/623) Fix various issues with optional (~) search operator:
        - Fixes omitted results when using union operators in addition to optional iterators.
        - Allow optional iterator to be used in isolation in promotion-only mode (without a filter query)
        - Fix issue where weight attribute was being ignored
    - #[653](https://github.com/RediSearch/RediSearch/issues/653) FT.GET will no longer return a document as existing if it was not added by FT.ADD, even if the document exists in the server as a plain redis hash
    - FT.AGGREGATE is now more stringent with its semantics, avoiding nonsensical queries or referencing fields which do not exist in the schema or LOADed.
    - #[779](https://github.com/RediSearch/RediSearch/issues/779) Added `to_number()` and `to_str()` functions for ambiguity reasons
    - #[906](https://github.com/RediSearch/RediSearch/issues/906) A description of how scores were calculated can be added by adding 'EXPLAINSCORE'
    - #[897](https://github.com/RediSearch/RediSearch/issues/897) `FORK GC` has now lowest priority over indexing and read queries
    - Added automated tests to ensure macOs build works

- Bugfixes - Crash/Stability
    - Improved overall architectural stability
    - #[666](https://github.com/RediSearch/RediSearch/issues/666) Fix crash when conflict between internal key name and user key name is encountered; e.g. creating a new document with `ft:two/two`
    - #[697](https://github.com/RediSearch/RediSearch/issues/697) #[588](https://github.com/RediSearch/RediSearch/issues/588) Fix memory leaks
    - #[691](https://github.com/RediSearch/RediSearch/issues/691) Fix crash on `FT.EXPLAIN`
    - Proper module-level and index-level cleanup functionality
    - Simplified concurrency model
    - #[898](https://github.com/RediSearch/RediSearch/issues/898) Fix rare issue where `FORK GC` doesn't exists on termination of Redis
    - #[865](https://github.com/RediSearch/RediSearch/issues/865) When using `FT.SEARCH` with `SORTBY`, it will only be possible to sort by one field
    - #[917](https://github.com/RediSearch/RediSearch/issues/917) Fix wrong results introduced in a skip optimisation
    - #[888](https://github.com/RediSearch/RediSearch/issues/888) `NULL` terms cause `FORK` GC to crash
    - #[887](https://github.com/RediSearch/RediSearch/issues/887) Chinese searches not being converted to simplified Chinese.
    - Fix `FORK GC` issue where read from pipe did not returned all the data


RediSearch 2.0 release notes

Summary: Automatically indexes data based on a key pattern. Scale a single index over multiple Redis shards. Improved query performance.

Requirements

RediSearch v2.0.13 requires:

- Minimum Redis compatibility version (database): 6.0.0
- Minimum Redis Enterprise Software version (cluster): 6.0.0

v2.0.15 (December 2021)

This is a maintenance release for RediSearch 2.0.

Update urgency: `MODERATE` - Program an upgrade of the server, but it's not urgent.

Details:

- Bug fixes:
    - [#2388](https://github.com/RediSearch/RediSearch/pull/2388) Garbage Collection (GC) for empty ranges in numeric index
    - [#2409](https://github.com/RediSearch/RediSearch/pull/2409) Introduction of `FORK_GC_CLEAN_NUMERIC_EMPTY_NODES true` module argument to enable [#2388](https://github.com/RediSearch/RediSearch/pull/2388) (off by default)
    - [#325](https://github.com/RediSearch/RediSearch/pull/325) Used Redis allocator in hiredis (RSCoordinator)
    - [#2362](https://github.com/RediSearch/RediSearch/pull/2362) Crash on empty field name

v2.0.13 (November 2021)

This is a maintenance release for version 2.0.

Details:

- Enhancements:
  - #[2243](https://github.com/redisearch/redisearch/issues/2243) Add `LOAD *` for FT.AGGREGATE which will load all fields

- Bug fixes:
  - #[2269](https://github.com/redisearch/redisearch/issues/2269) #[2291](https://github.com/redisearch/redisearch/issues/2291) Remove TAG values from trie with no entries on Garbage Collection.
  - #[2287](https://github.com/redisearch/redisearch/issues/2287) Uninitialized read on `FT.ADD`
  - #[2342](https://github.com/redisearch/redisearch/issues/2342) Check for NULL result on intersect iterator
  - #[2350](https://github.com/redisearch/redisearch/issues/2350) Crash on `FT.AGGREGATE` with `LIMIT 0 0`

v2.0.12 (September 2021)

This is a maintenance release for version 2.0.

Details:

- Enhancements:
  - #[2184](https://github.com/redisearch/redisearch/issues/2184) API: getter functions for score, language and stop words list
  - #[2188](https://github.com/redisearch/redisearch/issues/2188) Introduced the UNF parameter to SORTABLE to disable normalisation on TAG/TEXT fields
  - #[2218](https://github.com/redisearch/redisearch/issues/2218) API: added RediSearch_CreateDocument2

- Bug fix:
  - #[2153](https://github.com/redisearch/redisearch/issues/2153) Restore FT.INFO complexity to O(1)
  - #[2203](https://github.com/redisearch/redisearch/issues/2203) FT.AGGREGATE returns inaccurate results when TAG field is not set in hash

v2.0.11 (August 2021)

This is a maintenance release for version 2.0.

Details:

- Enhancements:
  - #[2156](https://github.com/redisearch/redisearch/issues/2156) TAG fields can now be case sensitive using the `CASESENSITIVE` parameter
  - #[2113](https://github.com/redisearch/redisearch/issues/2113) An already existing document that can't be updated is removed from the index (JIRA MOD-1266)
  - #[267](https://github.com/RediSearch/RSCoordinator/pull/267) #[287](https://github.com/RediSearch/RSCoordinator/pull/287) Updated Hiredis to support Intershard TLS

- Bug Fixes:
  - #[2117](https://github.com/redisearch/redisearch/issues/2117) #[2115](https://github.com/redisearch/redisearch/issues/2115) Fix crash on coordinator on first value reducer

v2.0.10 (July 2021)

This is a maintenance release for version 2.0.

Details:

- Enhancements:
    - #[2025](https://github.com/redisearch/redisearch/issues/2025) Improve performances on numeric range search
    - #[1958](https://github.com/redisearch/redisearch/issues/1958) #[2033](https://github.com/redisearch/redisearch/issues/2033) Support of sortable on the `GEO` type
    - #[2079](https://github.com/redisearch/redisearch/issues/2079) Update to Snowball 2.1.0, adds Armenian, Serbian and Yiddish stemming support
    - #[2002](https://github.com/redisearch/redisearch/issues/2002) Add stopwords list support in the API

- Bug fix:
    - #[2045](https://github.com/redisearch/redisearch/issues/2045) Possible crash when loading an RDB file (silently ignore double load of alias)
    - #[2099](https://github.com/redisearch/redisearch/issues/2099) #[2101](https://github.com/redisearch/redisearch/issues/2101) Fixes possible crash with CRDT on `FT.DROPINDEX`
    - #[1994](https://github.com/redisearch/redisearch/issues/1994) Skip intersect iterator qsort if `INORDER` flag is used
    - #[257](https://github.com/redisearch/rscoordinator/issues/257) Switch coordinator to send _FT.CURSOR instead FT.CURSOR to prevent data access without holding the lock

v2.0.9 (May 2021)

This is a maintenance release for version 2.0.

Details:

- Bug fix in RSCoordinator:
    - #[259](https://github.com/RediSearch/RSCoordinator/pull/259): Fix deadlock on cursor read by performing cursor command on background thread

v2.0.8 (May 2021)

This is a maintenance release for version 2.0.

This release fixes an important regression introduced by the 2.0 release. The payload is supposed to be returned only when the WITHPAYLOADS parameter is set.

Details:

- Bug fixes:
    - #[1959](https://github.com/redisearch/redisearch/issues/1959) Renamed parse_time() to parsetime()
    - #[1932](https://github.com/redisearch/redisearch/issues/1932) Fixed crash resulted from LIMIT arguments
    - #[1919](https://github.com/redisearch/redisearch/issues/1919) Prevent GC fork from crashing
- Minor enhancements:
    - #[1880](https://github.com/redisearch/redisearch/issues/1880) Optimisation of intersect iterator
    - #[1914](https://github.com/redisearch/redisearch/issues/1914) Do not return payload as a field

v2.0.7 (May 2021)

This is a maintenance release for version 2.0.

Details:

- Major enhancements:
    - #[1864](https://github.com/redisearch/redisearch/issues/1864) Improve query time by predetermining reply array length.
    - #[1879](https://github.com/redisearch/redisearch/issues/1879) Improve loading time by calling RM_ScanKey instead of RM_Call
- Major bug fix:
    - #[1866](https://github.com/redisearch/redisearch/issues/1866) Fix a linking issue causing incompatibility with Redis 6.2.0.
    - #[1842](https://github.com/redisearch/redisearch/issues/1842) #1852 Fix macOS build.
- Minor bug fixes:
    - #[1850](https://github.com/redisearch/redisearch/issues/1850) Fix a race condition on drop temporary index.
    - #[1855](https://github.com/redisearch/redisearch/issues/1855) Fix a binary payload corruption.
    - #[1876](https://github.com/redisearch/redisearch/issues/1876) Fix crash if the depth of the reply array is larger than 7.
    - #[1843](https://github.com/redisearch/redisearch/issues/1843) #[1860](https://github.com/redisearch/redisearch/issues/1860) Fix low-level API issues.

v2.0.6 (February 2021)

This is a maintenance release for version 2.0.

Details:

- Minor additions:
    - #[1696](https://github.com/redisearch/redisearch/issues/1696) The maximum number of results produced by `FT.AGGREGATE` is now configurable: `MAXAGGREGATERESULTS`.
    - #[1708](https://github.com/redisearch/redisearch/issues/1708) [Stemming]() updated with support of new languages: Basque, Catalan, Greek, Indonesian, Irish, Lithuanian, Nepali.
- Minor bugfixes:
    - #[1668](https://github.com/redisearch/redisearch/issues/1668) Fixes support of stop words in [tag fields](). Solves also the following related issues: #[166](https://github.com/redisearch/redisearch/issues/166),  #[984](https://github.com/redisearch/redisearch/issues/984), #[1237](https://github.com/redisearch/redisearch/issues/1237), #[1294](https://github.com/redisearch/redisearch/issues/1294).
    - #[1689](https://github.com/redisearch/redisearch/issues/1689) Consistency fix and performance improvement when using `FT.SUGGET` with [RSCoordinator](https://github.com/RediSearch/RSCoordinator).
    - #[1774](https://github.com/redisearch/redisearch/issues/1774) `MINPREFIX` and `MAXFILTEREXPANSION` configuration options can be changed at runtime.
    - #[1745](https://github.com/redisearch/redisearch/issues/1745) Enforce 0 value for `REDUCER COUNT`.
    - #[1757](https://github.com/redisearch/redisearch/issues/1757) Return an error when reaching the maximum number of sortable fields, instead of crashing.
    - #[1762](https://github.com/redisearch/redisearch/issues/1762) Align the maximum number of sortable fields with the maximum number of fields (1024)

v2.0.5 (December 2020)

This is a maintenance release for version 2.0.

Details:

- Minor features:
    - [#1696](https://github.com/RediSearch/RediSearch/pull/1696) Add `MAXAGGREGATERESULTS` module configuration for `FT.AGGREGATE`. Similar to `MAXSEARCHRESULTS` for `FT.SEARCH`, it limits the maximum number of results returned.

v2.0.4 (December 2020)

This is a maintenance release for version 2.0.

Details:

- Bugfixes in RediSearch:
    - [#1668](https://github.com/RediSearch/RediSearch/pull/1668) Stopwords are not filtered out on tag fields.
- Bugfixes in RSCoordinator:
    - [#206](https://github.com/RediSearch/RediSearch/pull/206) `FT.AGGREGATE` with `LIMIT` and `offset` greater than `0` returned fewer results than requested.

v2.0.3 (November 2020)

This is a maintenance release for version 2.0.

Minor bugfixes:

- Added [`OSS_GLOBAL_PASSWORD`](https://github.com/RediSearch/RSCoordinator#running-rscoordinator) config argument to allow specify shards password on OSS cluster.
- Update `min_redis_pack_version` to 6.0.8

v2.0.2 (November 2020)

This is a maintenance release for version 2.0.

- Minor enhancements:

    - [#1625](https://github.com/RediSearch/RediSearch/pull/1625) MAXPREFIXEXPANSIONS configuration which replaces the now deprecated config MAXEXPANSIONS. Same behaviour, more declarative naming.
    - [#1614](https://github.com/RediSearch/RediSearch/pull/1614) Prevent multiple sortby steps on FT.AGGREGATE

- Minor bug fixes:

    - [#1605](https://github.com/RediSearch/RediSearch/pull/1605) Rare bug where identical results would get a lower score

v2.0.1 (October 2020)

This is a maintenance release for version 2.0.

- Minor additions:

    - [#1432](https://github.com/RediSearch/RediSearch/pull/1432) FT.AGGREGATE allows filtering by key and returning the key by using LOAD "@__key" .

- Minor bug fixes:

    - [#1571](https://github.com/RediSearch/RediSearch/pull/1571) Using FILTER in FT.CREATE might cause index to not be in sync with data.
    - [#1572](https://github.com/RediSearch/RediSearch/pull/1572) Crash when using WITHSORTKEYS without SORTBY.
    - [#1540](https://github.com/RediSearch/RediSearch/pull/1540) SORTBY should raise an error if the field is not defined as SORTABLE.

v2.0.0 (September 2020)

RediSearch 2.0 is a public preview release meeting GA standards. This release includes several improvements in performance and usability over RediSearch 1.0. These improvements necessitate a few backward-breaking changes to the API.

Highlights

For this release, we changed the way in which the search indexes are kept in sync with your data. In RediSearch 1.x, you had to manually add data to your indexes using the `FT.ADD` command. In RediSearch 2.x, your data is indexed automatically based on a key pattern.

These changes are designed to enhance developer productivity, and to ensure that
your search indexes are always kept in sync with your data. To support this, we've
made a few changes to the API.

In addition to simplifying indexing, RediSearch 2.0 allows you to scale a single index over multiple Redis shards using the Redis cluster API.

Finally, RediSearch 2.x keeps its indexes outside of the main Redis key space. Improvements to the indexing code have increased query performance 2.4x.

You can read more details in [the RediSearch 2.0 announcement blog post](https://redislabs.com/blog/introducing-redisearch-2-0/), and you can get started by checking out this [quick start blog post](https://redislabs.com/blog/getting-started-with-redisearch-2-0/).

Details

- When you create an index, you must specify a prefix condition and/or a filter. This determines which hashes RediSearch will index.
- Several RediSearch commands now map to their Redis equivalents: `FT.ADD` -> `HSET`, `FT.DEL` -> `DEL` (equivalent to `FT.DEL` with the DD flag in RediSearch 1.x), `FT.GET` -> `HGETALL`, `FT.MGET` -> `HGETALL`.
- RediSearch indexes no longer reside within the key space, and the indexes are no longer saved to the RDB.
- You can upgrade from RediSearch 1.x to RediSearch 2.x.

Noteworthy changes

- [#1246](https://github.com/RediSearch/RediSearch/pull/1246): `geodistance` function for `FT.AGGREGATE` APPLY operation.
- [#1394](https://github.com/RediSearch/RediSearch/pull/1394): Expired documents (TTL) will be removed from the index.
- [#1394](https://github.com/RediSearch/RediSearch/pull/1394): Optimization to avoid reindexing documents when non-indexed fields are updated.
- After index creation, an initial scan starts for existing documents.  You can check the status of this scan by calling `FT.INFO` and looking at the `indexing` and `percent_indexed` values.  While `indexing` is true, queries return partial results.
- [#1435](https://github.com/RediSearch/RediSearch/pull/1435): `NOINITIALINDEX` flag on `FT.CREATE` to skip the initial scan of documents on index creation.
- [#1401](https://github.com/RediSearch/RediSearch/pull/1401): Support upgrade from v1.x and for reading RDB's created by RediSearch 1.x.
- [#1445](https://github.com/RediSearch/RediSearch/pull/1445): Support for load event. This event indexes documents when they are loaded from RDB, ensuring that indexes are fully available when RDB loading is complete (available from Redis 6.0.7 and above).
- [#1384](https://github.com/RediSearch/RediSearch/pull/1384): `FT.DROPINDEX`, which by default does not delete documents underlying the index (see deprecated `FT.DROP`).
- [#1385](https://github.com/RediSearch/RediSearch/pull/1385): Add index definition to `FT.INFO` response.
- [#1097](https://github.com/RediSearch/RediSearch/pull/1097): Add Hindi snowball stemmer.
- The `FT._LIST` command returns a list of all available indices.  Note that this is a temporary command, as indicated by the `_` in the name, so it's not documented. We're working on a [`SCAN`](-like command for databases with many indexes.
- The RediSearch version will appear in Redis as `20000`, which is equivalent to 2.0.0 in semantic versioning. Since the version of a module in Redis is numeric, we cannot explicitly add an GA flag.
- RediSearch 2.x requires Redis 6.0 or later.

Behavior changes

Make sure you review these changes before upgrading to RediSearch 2.0:

- [#1381](https://github.com/RediSearch/RediSearch/pull/1381): `FT.SYNADD` is removed; use `FT.SYNUPDATE` instead. `FT.SYNUPDATE` requires both
and index name and a synonym group ID. This ID can be any ASCII string.
- [#1437](https://github.com/RediSearch/RediSearch/pull/1437): Documents that expire during query execution time will not appear in the results (but might have been counted in the number of produced documents).
- [#1221](https://github.com/RediSearch/RediSearch/pull/1221): Synonyms support for lower case. This can result in a different result set on FT.SEARCH when using synonyms.
- RediSearch will not index hashes whose fields do not match an existing index schema. You can see the number of hashes not indexed using `FT.INFO` - `hash_indexing_failures `.  The requirement for adding support for partially indexing and blocking is captured here: [#1455](https://github.com/RediSearch/RediSearch/pull/1455).
- Removed support for `NOSAVE`.
- RDB loading will take longer due to the index not being persisted.
- Field names in the [query syntax]() are now case-sensitive.
- Deprecated commands:
    - `FT.DROP` (replaced by `FT.DROPINDEX`, which by default keeps the documents)
    - `FT.ADD` (mapped to `HSET` for backward compatibility)
    - `FT.DEL` (mapped to `DEL` for backward compatibility)
    - `FT.GET` (mapped to `HGETALL` for backward compatibility)
    - `FT.MGET` (mapped to `HGETALL` for backward compatibility)
- Removed commands:
    - `FT.ADDHASH` (no longer makes sense)
    - `FT.SYNADD` (see [#1381](https://github.com/RediSearch/RediSearch/pull/1381))
    - `FT.OPTIMIZE`


RediSearch 2.10 release notes

Summary: New vector data types. Enhanced indexing capabilities. Simplified query syntax. Expanded geospatial search.

Requirements

RediSearch v2.10.25 requires:

- Minimum Redis compatibility version (database): 7.4
- Minimum Redis Enterprise Software version (cluster): 7.8

v2.10.25 (December 2025)

This is a maintenance release for RediSearch 2.10.

Update urgency: `LOW`: No need to upgrade unless there are new features you want to use.

Improvements:

- [#7157](https://github.com/RediSearch/RediSearch/pull/7157) Show background Indexing OOM warning in FT.AGGREGATE reply in RESP3.
- [#7086](https://github.com/RediSearch/RediSearch/pull/7086) Add the default text scorer as a new configuration.
- [#7380](https://github.com/RediSearch/RediSearch/pull/7380) Rename FT.PROFILE counter fields.
- [#7366](https://github.com/RediSearch/RediSearch/pull/7366) Reduce temporary memory overhead upon index load from RDB.
- [#7393](https://github.com/RediSearch/RediSearch/pull/7393) Improve timeout check for FT.AGGREGATE in cluster mode.
- [#7451](https://github.com/RediSearch/RediSearch/pull/7451) Enhance FT.PROFILE with vector search execution details.
- [#7480](https://github.com/RediSearch/RediSearch/pull/7480) Ensure full profile output on timeout with RETURN policy.

Bug Fixes:

- [#7216](https://github.com/RediSearch/RediSearch/pull/7216) Fix a concurrency issue on Reducer in FT.AGGREGATE.
- [#7259](https://github.com/RediSearch/RediSearch/pull/7259) Fix underflow in BM25STD.
- [#7278](https://github.com/RediSearch/RediSearch/pull/7278) Report used memory as unsigned long long to avoid underflows.
- [#7340](https://github.com/RediSearch/RediSearch/pull/7340) Fix a rare leak in GC.
- [#7462](https://github.com/RediSearch/RediSearch/pull/7462) Fix Fork GC potential double-free on error path.
- [#7525](https://github.com/RediSearch/RediSearch/pull/7525) Avoid draining workers thread pool from FLUSHDB callback to avoid potential deadlocks.

Full Changelog: https://github.com/RediSearch/RediSearch/compare/v2.10.24...v2.10.25

v2.10.24 (October 2025)

This is a maintenance release for RediSearch 2.10.

Update urgency: `LOW`: No need to upgrade unless there are new features you want to use.

Bug Fixes
- [#6960](https://github.com/redisearch/redisearch/pull/6960) - FT.INFO returns the wrong number of documents in OSS Cluster with replicas.
- [#6938](https://github.com/redisearch/redisearch/pull/6938) - Fix for the HIGHLIGHT feature, where if some fields have empty strings, wrong tokens might be highlighted.
- [#7047](https://github.com/redisearch/redisearch/pull/7047) - Avoid crashing in the FT.AGGREGATE command in clusters where different shards have different ON_TIMEOUT policies configured (fail vs return).

Full Changelog: https://github.com/RediSearch/RediSearch/compare/v2.10.23...v2.10.24.

v2.10.23 (September 2025)

This is a maintenance release for RediSearch 2.10.

Update urgency: `HIGH` : There is a critical bug that may affect a subset of users. Upgrade!

Bug fixes:
- [#6672](https://github.com/RediSearch/RediSearch/pull/6672) Fix potential file descriptor leak when OOM.
- [#6763](https://github.com/RediSearch/RediSearch/pull/6763) Fix potential deadlock during RDB loading in cases where the `INFO` command is sent to the server.

Full Changelog: https://github.com/RediSearch/RediSearch/compare/v2.10.22...v2.10.23

v2.10.22 (August 2025)

This is a maintenance release for RediSearch 2.10.

Update urgency: `HIGH` : There is a critical bug that may affect a subset of users. Upgrade!

Bug fixes:
- [#6600](https://github.com/redisearch/redisearch/pull/6600) `FLUSHDB` while active queries are still running could lead to a crash due to premature release of the CURSOR (MOD-10681).

Improvements:
- [#6664](https://github.com/redisearch/redisearch/pull/6664) Time measurement on `FT.PROFILE` using thread-independent clock mechanism (MOD-10622).
- [#6647](https://github.com/redisearch/redisearch/pull/6647) Response on RESP2/3 validation was inefficiently consuming excessive CPU cycles (MOD-9687).

v2.10.21 (July 2025)

This is a maintenance release for RediSearch 2.10.

Update urgency: `LOW`: No need to upgrade unless there are new features you want to use.

Bug fixes:
- [#6405](https://github.com/redisearch/redisearch/pull/6405) Validate compatibility against RedisJSON version upon open key.

Improvements:
- [#6340](https://github.com/redisearch/redisearch/pull/6340) Handle excessive logging when processing JSON.DEL errors.

v2.10.20 (June 2025)

This is a maintenance release for RediSearch 2.10.

Update urgency: `LOW` No need to upgrade unless there are new features you want to use.

Improvements:
- [#6279](https://github.com/redisearch/redisearch/pull/6279) Added a locking mechanism for collecting `FT.INFO` statistics when concurrently running the index sanitiser (MOD-10007, MOD-9761).

v2.10.19 (June 2025)

This is a maintenance release for RediSearch 2.10.

Update urgency: `LOW` No need to upgrade unless there are new features you want to use.

Bug fixes:
- [#6211](https://github.com/redisearch/redisearch/pull/6211) Some languages (like Russian) could have multiple lower and upper case matches, causing index misbehaviour (MOD-9835).

Improvements:
- [#5637](https://github.com/redisearch/redisearch/pull/5637) Memory allocation when converting special UTF-8 symbols requires more memory (MOD-8799).

v2.10.18 (May 2025)

This is a maintenance release for RediSearch 2.10.

Update urgency: `HIGH` : There is a critical bug that may affect a subset of users. Upgrade!

Bug fixes:
- [#6184](https://github.com/redisearch/redisearch/pull/6184) Reindexing from RDB with multiple vector indices could lead to a crash due to cluster health check - NodeWD (MOD-9220,MOD-8809)
- [#6028](https://github.com/redisearch/redisearch/pull/6028) `FT.CURSOR...DEL` while another thread is reading it could lead to a crash (MOD-9408,MOD-9432,MOD-9433,MOD-9434,MOD-9435)
- [#5967](https://github.com/redisearch/redisearch/pull/5967) Indexing documents using `TEXT` without the text in the documents leads to an `inf` or `nan` score (MOD-9423)
- [#6056](https://github.com/redisearch/redisearch/pull/6056) Avoid lazy expiration in background indexing for Active-Active setup preventing keys from expiring incorrectly (MOD-9486)
- [#6108](https://github.com/redisearch/redisearch/pull/6108) A timeout failure is returned when the `ON_TIMEOUT RETURN` policy is set to stop the collection of partial results - best effort (MOD-9612)

Improvements:
- [#6007](https://github.com/redisearch/redisearch/pull/6007) Parser for intersections on parentheses and sub-queries order won't affect full-text scores (MOD-9278)
- [#6020](https://github.com/redisearch/redisearch/pull/6020) Prevent access to the Redis key space when `LOAD...@__key` is used (MOD-9419)

v2.10.17 (April 2025)

This is a maintenance release for RediSearch 2.10.

Update urgency: `HIGH` : There is a critical bug that may affect a subset of users. Upgrade!

Bug fixes:
- [#5859](https://github.com/redisearch/redisearch/pull/5859) Last query result using `FT.AGGREGATE` with `ON_TIMEOUT RETURN` and using multi-threading could be missing (MOD-9222)
- [#5858](https://github.com/redisearch/redisearch/pull/5858) Collecting empty results from shards during `FT.AGGREGATE` with RESP3 could cause a crash (MOD-9174)

Improvements:
- [#5938](https://github.com/redisearch/redisearch/pull/5938) Improved performance (reduced CPU time) of collecting vector index statistics(MOD-9354)
- [#5800](https://github.com/redisearch/redisearch/pull/5800) Improved accuracy of index memory reporting by correcting a bug that caused negative memory counts (MOD-5904)

v2.10.15 (March 2025)

This is a maintenance release for RediSearch 2.10.

Update urgency: `HIGH` : There is a critical bug that may affect a subset of users. Upgrade!

Bug fixes:
- [#5788](https://github.com/redisearch/redisearch/pull/5788) Cursor with `SORTBY` is never depleted, blocking queries if the cursor limit is reached (MOD-8483)
- [#5788](https://github.com/redisearch/redisearch/pull/5788) Empty results with RESP3 due to the `TIMEOUT`, even if `ON_TIMEOUT` is set to `RETURN`(MOD-8482)
- [#5788](https://github.com/redisearch/redisearch/pull/5788) Cursor with RESP3 on `FT.AGGREGATE` is never depleted, blocking queries if cursor the limit is achieved (MOD-8515)
- [#5788](https://github.com/redisearch/redisearch/pull/5788) Using `FT.CURSOR READ` on queries that timed out led to fewer results than expected (MOD-8606)
- [#5810](https://github.com/redisearch/redisearch/pull/5810) The `total_results` field of the `FT.AGGREGATE` command is not correct in RESP3 (MOD-9054)

Improvements:
- [#5788](https://github.com/redisearch/redisearch/pull/5788) Corrected a coordinator race condition that prevented premature release, avoiding errors and inconsistencies during query executions (MOD-8794)

v2.10.14 (March 2025)

This is a maintenance release for RediSearch 2.10.

Update urgency: `LOW` No need to upgrade unless there are new features you want to use.

Bug fixes:
- [#5704](https://github.com/redisearch/redisearch/pull/5704) Weights in the query string are ignored if using `SCORER BM25` (MOD-7896).

v2.10.13 (February 2025)

This is a maintenance release for RediSearch 2.10.

Update urgency: `LOW` No need to upgrade unless there are new features you want to use.

Bug fixes:
- [#5646](https://github.com/redisearch/redisearch/pull/5646) `FT.SEARCH` using Cyrillic characters and wildcards delivering no results (MOD-7944)

v2.10.12 (February 2025)

This is a maintenance release for RediSearch 2.10.

Update urgency: `HIGH` : There is a critical bug that may affect a subset of users. Upgrade!

Bug fixes:
- [#5596](https://github.com/redisearch/redisearch/pull/5596) Changes on the memory block reading logic could cause crash on `FT.SEARCH` with error "_Redis 7.4.2 crashed by signal: 11, si_code: 128"_

Known limitations:
- Only the first 128 characters of string fields are normalized to lowercase during ingestion (for example, on `HSET`).
    Example:

    [code example]

    The `FT.SEARCH` command will return no documents.

v2.10.11 (January 2025)

This is a maintenance release for RediSearch 2.10.

Update urgency: `HIGH` : There is a critical bug that may affect a subset of users. Upgrade!

Bug fixes:
- [#5536](https://github.com/redisearch/redisearch/pull/5536) Querying for the latest document added to the index may result in a crash if the last block is not read (MOD-8561).

v2.10.10 (January 2025)

This is a maintenance release for RediSearch 2.10

Update urgency: `SECURITY`: There are security fixes in the release.

**Security and privacy**:
- [#5459](https://github.com/redisearch/redisearch/pull/5459) (CVE-2024-51737) Query: potential out-of-bounds write (MOD-8486)

Bug fixes:
- [#5392](https://github.com/redisearch/redisearch/pull/5392) `NOSTEM` option does not work on query, just on tokenisation (index creation) (MOD-7634)
- [#5300](https://github.com/redisearch/redisearch/pull/5300) Prefix/Infix/Suffix queries longer than 1024 chars could cause a crash (MOD-7882)
- [#5294](https://github.com/redisearch/redisearch/pull/5294) Expired keys while background indexing could cause cross slot error when using `replicaof` (MOD-7949)
- [#5282](https://github.com/redisearch/redisearch/pull/5282) `FT.CURSOR READ` retrieving deleted `TAG` fields cause a crash (MOD-8011)
- [#5424](https://github.com/redisearch/redisearch/pull/5424) `FT.AGGREGATE` on numeric fields lead to `failed_calls` count increase on clustered DBs (MOD-8058)
- [#5241](https://github.com/redisearch/redisearch/pull/5241) Memory count on `bytes_collected` by the index sanitiser with missing values (MOD-8097, MOD-8114)

Improvements:
- [#5257](https://github.com/redisearch/redisearch/pull/5257) Optimizing index consumed memory with the creation only upon write operations (MOD-8125)

v2.10.7 (Septermber 2024)

This is a maintenance release for RediSearch 2.10

Update urgency: `HIGH` : There is a critical bug that may affect a subset of users. Upgrade!

Bug Fixes:
- https://github.com/RediSearch/RediSearch/pull/4941 Adjusting the module configuration to avoid routing overload on the first shard in a clustered database (MOD-7505)
- https://github.com/RediSearch/RediSearch/pull/4950 `FT.PROFILE` on `AGGREGATE` numeric queries could cause a crash due to reuse of an internal CURSOR in a large range of numeric values (MOD-7454)

v2.10.6 (August 2024):

This is a maintenance release for RediSearch 2.10.

Update urgency: `HIGH` - There is a critical bug that may affect a subset of users. Upgrade!

Bug fixes:
- [#4916](https://github.com/redisearch/redisearch/pull/4916) - Union query, similar to `"is|the"`, starting with 2 [storwords](https://redis.io/docs/latest/develop/ai/search-and-query/advanced-concepts/stopwords/) could cause a crash (MOD-7495)
- [#4895](https://github.com/redisearch/redisearch/pull/4895) - `FT.AGGREGATE` with `VERBATIM` option is not handled by the shards in cluster mode (MOD-7463)
- [#4922](https://github.com/redisearch/redisearch/pull/4922) - Counting twice the field statistics at `#search` section of `INFO` response (MOD-7339)

v2.10 GA (v2.10.5) (July 2024)

This is the General Availability release of RediSearch 2.10

Headlines:

This latest RediSearch introduces memory-efficient vector data types, enhanced indexing capabilities with support for empty and missing fields, simplified query syntax, and expanded geospatial search features.

What's new in 2.10.5

This new major version introduces new `BFLOAT16` and `FLOAT16` vector data types, reducing memory consumed by vectors while preserving accuracy. This update also includes highly-requested support for indexing empty and missing values and enhances the developer experience for queries with exact matching capabilities. Developers can now match `TAG` fields without needing to escape special characters, making the onboarding process and use of the query syntax easier. Lastly, Geospatial search capabilities have been expanded with new `INTERSECT` and `DISJOINT` operators, and ergonomics have been improved by providing better reporting of the memory consumed by the index and exposing the full-text scoring in an aggregation pipeline.

Features:

- Enhancing exact matching queries with `TAG` avoiding escaping special meaning characters using the [simpler syntax](https://redis.io/docs/latest/develop/ai/search-and-query/query/exact-match/#tag-field) `'@tag:{"my-query%term"}'` and `NUMERIC` queries:
  - [#4802](https://github.com/RediSearch/RediSearch/pull/4802) - Using double quotes to wrap exact matching query terms such as `@email:{"test@redis.com"}` in `DIALECT 2` ( MOD-7299)
  - [#4676](https://github.com/RediSearch/RediSearch/pull/4676), [#4433](https://github.com/RediSearch/RediSearch/pull/4433) - Enhancing query parser to avoid unnecessary escaping (MOD-5756)
  - [#4527](https://github.com/RediSearch/RediSearch/pull/4527) - Enhancing exact matching queries for `NUMERIC` using single value `FT.SEARCH idx @numeric:[3456]` (MOD-6623)
  - [#4802](https://github.com/RediSearch/RediSearch/pull/4802) - Enabling support for single operators in `NUMERIC` queries such as equivalence `==`, difference `!=`, greater than `>` and `>=` and less than `<` and `<=` as in `FT.SEARCH idx '@numeric==3456'` (MOD-6749)

- Adding new keywords to support indexing empty values using `INDEXEMPTY` and missing values using `INDEXMISSING` per field in the `SCHEMA` while defining the [index](https://redis.io/docs/latest/commands/ft.create/) with `FT.CREATE`
  - [#4663](https://github.com/RediSearch/RediSearch/pull/4663), [#4721](https://github.com/RediSearch/RediSearch/pull/4721) - Indexing empty strings values `""` for `TAG` and `TEXT` fields (MOD-6540, MOD-7200)
  - [#4721](https://github.com/RediSearch/RediSearch/pull/4721) - Updating the query parser to support empty value queries for `TEXT` as `FT.SEARCH idx '@text_field:""'`or `FT.SEARCH idx '""'` and for `TAG` as in `FT.SEARCH idx '@tag_field:{""}'` (MOD-7200)
  - [#4720](https://github.com/RediSearch/RediSearch/pull/4720), [#4635](https://github.com/RediSearch/RediSearch/pull/4635) - Indexing missing values for all field types introducing the query syntax function `ismissing(@field)` enabling query for missing fields as in `FT.SEARCH idx 'ismissing(@text)'` (MOD-6532)

- Enabling new vector data types reducing memory consumed by vectors with the new `BFLOAT16` and `FLOAT16`
  - [#4674](https://github.com/RediSearch/RediSearch/pull/4674) - Adding support `BFLOAT16` and `FLOAT16` in the [vector index definition](https://redis.io/docs/latest/develop/ai/search-and-query/vectors/#creation-attributes-per-algorithm) (MOD-6765, MOD-6776)

- Exposing the full-text score values during the aggregation pipeline using `ADDSCORE`. When calling the scores you can use `@__score` in the pipeline as in `FT.AGGREGATE idx 'hello' ADDSCORES SORTBY 2 @__score DESC`
  - [#4859](https://github.com/RediSearch/RediSearch/pull/4859) - Expose scores to `FT.AGGREGATE` pipeline (MOD-7190)

- [#4227](https://github.com/RediSearch/RediSearch/pull/4227) - Adding support for new operators `INTERSECT` and `DISJOINT` when querying for `GEOSHAPE` [polygons](https://redis.io/docs/latest/develop/ai/search-and-query/query/geo-spatial/) (MOD-6178)

Bug fixes (since 2.10.4):
- [#4854](https://github.com/RediSearch/RediSearch/pull/4854) - Avoid expansion on stemming from numeric values (MOD-7025)

Improvements (since 2.10.4):
- [#4865](https://github.com/RediSearch/RediSearch/pull/4865) - Add coverage for cleaning garbage entries when indexing missing fields (MOD-7415)

- The version inside Redis will be 2.10.5 in semantic versioning. Since the version of a module in Redis is numeric, we could not add a Release Candidate flag.
- Minimal Redis version: 7.4
- If indexing and querying RedisJSON data structures, this version is best combined with RedisJSON 2.8 (v2.8.2 onwards)
- If one or more fields of a hash key expire after a query begins (using FT.SEARCH or FT.AGGREGATE), Redis does not account for these lazily expired fields. As a result, keys with expired fields may still be included in the query results, leading to potentially incorrect or inconsistent results.

HSET doc __score 1.0 name "idx1S...S" mynum 1          # Assume "S...S" is a string of 252 capital S's
    FT.CREATE "idx" SCHEMA "name" "TEXT" "mynum" "NUMERIC"
    FT.SEARCH "idx" "@name:idx1S...S"                      # Assume "S...S" is a string of 252 capital S's


RediSearch 2.2 release notes

Summary: Search and index JSON documents. Profiling queries. Field aliasing.

Requirements

RediSearch v2.2.10 requires:

- Minimum Redis compatibility version (database): 6.0.0
- Minimum Redis Enterprise Software version (cluster): 6.0.0

v2.2.10 (March 2022)

This is a maintenance release for RediSearch 2.2.

Update urgency: `MODERATE`: Program an upgrade of the server, but it's not urgent.

Details:

- Improvements:

  - Mac M1 support
  - [#2645](https://github.com/RediSearch/RediSearch/pull/2645) Ignore `NULL` values in JSON documents on indexing (prior behaviour would ignore the entire document)
  - [#2623](https://github.com/RediSearch/RediSearch/pull/2623) Improved Multi Sortby error message for `FT.SEARCH`

- Bug fixes:

  - [#2641](https://github.com/RediSearch/RediSearch/pull/2641) Memory leak in Coordinator
  - [#2651](https://github.com/RediSearch/RediSearch/pull/2651) Client freeze on docs expire during query
  - [#2670](https://github.com/RediSearch/RediSearch/pull/2670) Memory leak in RediSearch found in Active-Active (MOD-2518)

v2.2.9 (March 2022)

This is a maintenance release for RediSearch 2.2.

Update urgency: `MODERATE`: Program an upgrade of the server, but it's not urgent.

Details:

- Improvements:

  - [#2605](https://github.com/RediSearch/RediSearch/pull/2605) Added support for `tls-key-file-pass` capability (MOD-2086)
  - [#2583](https://github.com/RediSearch/RediSearch/pull/2583) Release index-specific information off the main thread (performance enhancement)

- Bug fixes:

  - [#2436](https://github.com/RediSearch/RediSearch/pull/2436) When indexing JSON documents, filters cause no documents to be indexed (MOD-2214)
  - [#2507](https://github.com/RediSearch/RediSearch/pull/2507) `QUANTILE` aggregation function outputting wrong values (MOD-2432)
  - [#2521](https://github.com/RediSearch/RediSearch/pull/2521) `contains()` with an empty string argument leaves Redis hanging at CPU 100% indefinitely (MOD-2428)
  - [#2560](https://github.com/RediSearch/RediSearch/pull/2560) Free prefix and cursor efficiently for cases with many indices (MOD-2080)
  - [#2541](https://github.com/RediSearch/RediSearch/pull/2541) Numeric types for `FT.INFO` on coordinator
  - [#2553](https://github.com/RediSearch/RediSearch/pull/2553) Fix union high iterator
  - [#2404](https://github.com/RediSearch/RediSearch/pull/2404) Update coordination strategy of `FlatSearchCommandHandler`

v2.2.7 (February 2022)

This is a maintenance release for RediSearch 2.2.

Update urgency: `MODERATE`: Program an upgrade of the server, but it's not urgent.

Details:

- Bug fixes:
  - [#2466](https://github.com/RediSearch/RediSearch/pull/2466) `FT.PROFILE` for `FT.AGGREGATE` on clustered databases
  - [#2473](https://github.com/RediSearch/RediSearch/pull/2473) `FT.PROFILE` with no result processor present
  - [#2490](https://github.com/RediSearch/RediSearch/pull/2490) Case sensitivity issue in searches of TAG field on JSON

- Improvements:
  - [#2469](https://github.com/RediSearch/RediSearch/pull/2469) Add API for TAG children query nodes

v2.2.6 (January 2022)

This is a maintenance release for RediSearch 2.2.

Update urgency: `MODERATE`: Program an upgrade of the server, but it's not urgent.

Details:

- Bug fixes:

    - [#2362](https://github.com/RediSearch/RediSearch/pull/2362) Crash on empty field name
    - [#2407](https://github.com/RediSearch/RediSearch/pull/2407) Inconsistency with `FT.CREATE` and `ON`: return error for spec without fields parameters
    - [#2392](https://github.com/RediSearch/RediSearch/pull/2392) Remove limit on Geo field precision
    - [#2440](https://github.com/RediSearch/RediSearch/pull/2440) Fix in NOT(-) iterator
    - [#2414](https://github.com/RediSearch/RediSearch/pull/2414) Prevent server freeze when `FT.SEARCH` timeout while sorting
    - [#2386](https://github.com/RediSearch/RediSearch/pull/2386) Memory leak in numeric field index

- Improvements:

    - [#2424](https://github.com/RediSearch/RediSearch/pull/2424), [#2425](https://github.com/RediSearch/RediSearch/pull/2425) Performance improvements for numeric indices
    - [#2408](https://github.com/RediSearch/RediSearch/pull/2408) API: Added `RediSearch_IndexInfo`
    - [#2448](https://github.com/RediSearch/RediSearch/pull/2448) API: Added `setLang` and `setScore`

v2.2.5 (November 2021)

This is the General Availability release of RediSearch 2.2.

Headlines

#### Searching and indexing JSON documents

This release introduces the ability to [index, query, and full-text search JSON documents]() using JSONPath queries.

On the schema creation `FT.CREATE`, it is now possible to map a JSONPath query with a field. When a JSON document is indexed, the value extracted by the JSONPath query is indexed in the given field.

 _This features require the module [RedisJSON 2.0](https://www.redisjson.io) to be installed._

#### Profiling queries

With the new `FT.PROFILE` command, it is now possible to profile in detail the execution time of several internal steps involved in the execution of `FT.SEARCH` and `FT.AGGREGATE`.
That way, it is possible to understand which part of the query is taking most of the resources.

#### Field aliasing

With the support of JSON document indexing, it is now possible to map a JSONPath query to an alias. Therefore, it is possible to index the same value in different indexing attributes with different indexing strategies.

As of RediSearch v2.2, index `fields` are now known as `attributes` in order to avoid confusion with hash fields. This change impacts the `FT.INFO` command's response, which might break clients.  It is advised to upgrade your application to the latest supported Redis clients prior to upgrading to RediSearch 2.2.

Details

- Enhancements:
  - #[2337](https://github.com/redisearch/redisearch/issues/2337) Add support for Redis COPY command
  - #[2243](https://github.com/redisearch/redisearch/issues/2243) Add `LOAD *` for `FT.AGGREGATE`
  - #[2207](https://github.com/redisearch/redisearch/issues/2207) Add multi value recursive decent tag
  - #[2188](https://github.com/redisearch/redisearch/issues/2188) Add `UNF` flag for `SORTABLE` fields
  - #[2184](https://github.com/redisearch/redisearch/issues/2184) LLAPI getter functions for score, language, and stopwords list
  - #[2133](https://github.com/redisearch/redisearch/issues/2133) JSON array can be stored in a TAG field
  - #[2153](https://github.com/redisearch/redisearch/issues/2153) Improve FT.INFO complexity to O(1)
  - #[2138](https://github.com/redisearch/redisearch/issues/2138) Add `CASESENSITIVE` to `TAG` fields
  - #[2137](https://github.com/redisearch/redisearch/issues/2137) `FT.INFO` has identifier and attribute for fields

- Bug fixes:
  - #[2341](https://github.com/redisearch/redisearch/issues/2341) Fix score field for JSON
  - #[2325](https://github.com/redisearch/redisearch/issues/2325) Fix escaping for tags
  - #[2269](https://github.com/redisearch/redisearch/issues/2269) Remove empty tag values
  - #[2223](https://github.com/redisearch/redisearch/issues/2223) Replace NULL with empty iterator for child of negative iterator
  - #[2215](https://github.com/redisearch/redisearch/issues/2215) Update field limit on tags
  - #[2143](https://github.com/redisearch/redisearch/issues/2143) Partial JSON documents are not indexed
  - #[2109](https://github.com/redisearch/redisearch/issues/2109) Field loaded with 'AS' can't be used by functions

Notes:
This is the first GA version of 2.2. The version inside Redis will be 2.2.5 in semantic versioning.
_Since the version of a module in Redis is numeric, we could not add a GA flag._


RediSearch 2.4 release notes

Summary: Vector Similarity Search (VSS). New query syntax Dialect version 2. Choose between Dialect 1 and Dialect 2 for query parser behavior. Hybrid queries.

Requirements

RediSearch v2.4.16 requires:

- Minimum Redis compatibility version (database): 6.0.0
- Minimum Redis Enterprise Software version (cluster): 6.0.0

v2.4.16 (November 2022)

This is a maintenance release for RediSearch 2.4

Update urgency: `HIGH`: There is a critical bug that may affect a subset of users. Upgrade!

Details:

- Bug fixes:

  - [#2962](https://github.com/RediSearch/RediSearch/pull/2962) Crash upon AOF preload - Use local GC context in periodic callback (MOD-3951)
  - [#2863](https://github.com/RediSearch/RediSearch/pull/2863) High CPU Utilization - Change MAX_LEV_DISTANCE to 4 (MOD-3563)
  - [#3041](https://github.com/RediSearch/RediSearch/pull/3041), [#3063](https://github.com/RediSearch/RediSearch/pull/3063), [#3051](https://github.com/RediSearch/RediSearch/pull/3051), [#3143](https://github.com/RediSearch/RediSearch/pull/3143) Several memory leaks (MOD-4121, MOD-4252)
  - [#3119](https://github.com/RediSearch/RediSearch/pull/3119) Crash on intersect iterator GetCriteriaTester (MOD-4200)
  - [#3128](https://github.com/RediSearch/RediSearch/pull/3128) Filter rules must be reevaluated per index per document (MOD-4207)
  - [#3127](https://github.com/RediSearch/RediSearch/pull/3127) Fix assertion failure on wrong result counting, which leads to a crash (MOD-4214)
  - [#3171](https://github.com/RediSearch/RediSearch/pull/3171) Missing implementation of NumericRangeIterator_OnReopen which lead to crash (MOD-4255)
  - [#3191](https://github.com/RediSearch/RediSearch/pull/3191) Wrong query iterator casting which resulted in 100% CPU utilization (MOD-4290)
  - [#3197](https://github.com/RediSearch/RediSearch/pull/3197) Release failed to create temporary indices on the main thread (MOD-4388)
  - [#2981](https://github.com/RediSearch/RediSearch/pull/2981) Double freeing in iterators of hybrid queries resulting in crash (MOD-4411)
  - [#3161](https://github.com/RediSearch/RediSearch/pull/3161) Latency used to increase over time when combining INKEYS and wildcard query (MOD-4343)

v2.4.15 (October 2022)

This is a maintenance release for RediSearch 2.4.

Update urgency: `MODERATE`: Program an upgrade of the server, but it's not urgent.

Details:

- Bug fixes:

  - [#3095](https://github.com/RediSearch/RediSearch/pull/3095) Replace order of parsing the parameters and query in the coordinator (MOD-4205)
  - [#3012](https://github.com/RediSearch/RediSearch/pull/3012) Improved efficiency of LLAPI `findInfo`, which could reduce stability during upgrade in Redis Enterprise (MOD-4197, MOD-4052)
  - [#3040](https://github.com/RediSearch/RediSearch/pull/3040), [#3049](https://github.com/RediSearch/RediSearch/pull/3049) Fix for `SORTBY` numeric field for non-SORTABLE fields on the coordinator (MOD-4115)
  - [#3050](https://github.com/RediSearch/RediSearch/pull/3050) Results from fields from a missing value should come last when combined with `SORTBY` (MOD-4120)

- Improvements:

  - [#3047](https://github.com/RediSearch/RediSearch/pull/3047) Add `strlen` string function to `FT.AGGREGATE` (MOD-4141)
  - [#3038](https://github.com/RediSearch/RediSearch/pull/3038) Add `number_of_uses` to `FT.INFO` for the number of times the index was queried

v2.4.14 (August 2022)

This is a maintenance release for RediSearch 2.4.

Update urgency: `MODERATE`: Program an upgrade of the server, but it's not urgent.

Details:

- Improvements:

  - [Vector similarity v0.3.2](https://github.com/RedisAI/VectorSimilarity/releases/tag/v0.3.2)
  - [#2955](https://github.com/RediSearch/RediSearch/pull/2955) Add timeout during prefix query (MOD-3949)
  - [#2957](https://github.com/RediSearch/RediSearch/pull/2957) Efficient removal from prefix list for cases with many indices

- Bug fixes:

  - [#2937](https://github.com/RediSearch/RediSearch/pull/2937) Returning `NULL` response after encountering an expired document (MOD-3515)
  - [#2962](https://github.com/RediSearch/RediSearch/pull/2962) Crash upon AOF preload (MOD-3951)
  - [#2986](https://github.com/RediSearch/RediSearch/pull/2986) Memory leak related to schema prefixes

v2.4.11 (July 2022)

This is a maintenance release for RediSearch 2.4.

Update urgency: `MODERATE`: Program an upgrade of the server, but it's not urgent.

Details:

- Bug fixes:

  - [#2892](https://github.com/RediSearch/RediSearch/pull/2892) Combining `SORTBY` with `MAX` on `FT.SEARCH` (which is not supported) caused an inconsistent response and out-of-memory error (MOD-3540, MOD-3644)
  - [VecSim v0.3.1](https://github.com/RedisAI/VectorSimilarity/releases/tag/v0.3.1)
    - HNSW indices: reclaim memory upon deletion - HNSW index's data structures now reclaim memory and shrink upon deletion

- Improvements:

  - [VecSim v0.3.1](https://github.com/RedisAI/VectorSimilarity/releases/tag/v0.3.1)
    - HNSW indices: delete procedure is up to 40% faster
    - More accurate memory consumption reporting for HNSW indices

v2.4.10 (July 2022)

This is a maintenance release for RediSearch 2.4.

Update urgency: `MODERATE`: Program an upgrade of the server, but it's not urgent.

Details:

- Bug fixes:

  - [#2863](https://github.com/RediSearch/RediSearch/pull/2863) Crash due to too high (Levenshtein) `DISTANCE` in `FT.SPELLCHECK`. This fix limits the `DISTANCE` to 4. (MOD-3563)
  - [#2875](https://github.com/RediSearch/RediSearch/pull/2875) Not all documents with vector fields were indexed with Auto Tiering (MOD-3584)
  - [#2846](https://github.com/RediSearch/RediSearch/pull/2846) Enforce Redis Enterprise memory limit for vector indices

v2.4.9 (June 2022)

This is a maintenance release for RediSearch 2.4.

Update urgency: `MODERATE`: Program an upgrade of the server, but it's not urgent.

Details:

- Bug fixes:

  - [#2837](https://github.com/RediSearch/RediSearch/pull/2837), [#2836](https://github.com/RediSearch/RediSearch/issues/2836) Crash on `FT.AGGREGATE` "... APPLY '-INF % -1'..."
  - [#2814](https://github.com/RediSearch/RediSearch/pull/2814) `FT.EXPLAIN` without parameters causes a crash
  - [#2790](https://github.com/RediSearch/RediSearch/pull/2790) Incorrect `num_terms` value in `FT.INFO` after a term is deleted from all the docs (garbage collection)
  - [#2804](https://github.com/RediSearch/RediSearch/pull/2804) Freeze when `OFFSET`+`LIMIT` was greater than `maxSearchResults` (config)
  - [#2791](https://github.com/RediSearch/RediSearch/pull/2791) Add `BlockedClientMeasureTime` to coordinator for more accurate performance stats
  - [#2802](https://github.com/RediSearch/RediSearch/pull/2802) Tagged parts of keys (curly brackets `{}`) are now returned by `FT.SEARCH`

- Improvements:

  - [#2806](https://github.com/RediSearch/RediSearch/pull/2806) Do not load the JSON API when RediSearch is initialized as a library

- Minor breaking change:

  - As pointed out above, [#2802](https://github.com/RediSearch/RediSearch/pull/2802) is a bug fix. However, if your application relies on RediSearch incorrectly trimming the tagged part of a key (using `{}`), this could break your application. This only applies to users who are using RediSearch in clustered databases.

v2.4.8 (May 2022)

This is a maintenance release for RediSearch 2.4.

Update urgency: `MODERATE`: Program an upgrade of the server, but it's not urgent.
However, if you're using Vector Similarity (introduced in RediSearch 2.4), there are some critical bugs that may affect a subset of users. In this case, you should upgrade.

Details:

- Bug fixes:

  - [#2739](https://github.com/RediSearch/RediSearch/pull/2739) Memory leak in coordinator related to Vector Similarity (MOD-3023)
  - [#2736](https://github.com/RediSearch/RediSearch/pull/2736), [#2782](https://github.com/RediSearch/RediSearch/pull/2782) Memory allocation restrictions for Vector Similarity indices (causing OOM) (MOD-3195)
  - [#2755](https://github.com/RediSearch/RediSearch/pull/2755) Compare the entire vector field name instead of a prefix when creating a new vector index
  - [#2780](https://github.com/RediSearch/RediSearch/pull/2780) Initialize all variables in `EvalContext` (which might have led to crashes in clustered databases)

- Improvements:

  - [#2740](https://github.com/RediSearch/RediSearch/pull/2740) Performance optimization for hybrid vector queries

v2.4.6 (May 2022)

This is a maintenance release for RediSearch 2.4.

Update urgency: `MODERATE`: Program an upgrade of the server, but it's not urgent.

Details:

- Bug fixes:

  - [#2716](https://github.com/RediSearch/RediSearch/pull/2716) Removed assert statement that could cause crashes with replica of (MOD-3008, MOD-3012)
  - [#2734](https://github.com/RediSearch/RediSearch/pull/2734) `ON_TIMEOUT RETURN` policy fix: return results obtained until timeout rather than discarding them
  - [#2714](https://github.com/RediSearch/RediSearch/pull/2714) Memory leak on non-TLS setup in coordinator

v2.4.5 (April 2022)

This is a maintenance release for RediSearch 2.4.

Update urgency: `MODERATE`: Program an upgrade of the server, but it's not urgent.

Details:

- Bug fixes:

  - [#2702](https://github.com/RediSearch/RediSearch/pull/2702) `INKEYS` combined with Vector Similarity caused server unresponsiveness (MOD-2952)
  - [#2705](https://github.com/RediSearch/RediSearch/pull/2705) Incorrect results when deleting a document that was skipped at index time
  - [#2698](https://github.com/RediSearch/RediSearch/issues/2698) Synonyms in Chinese

- Improvements:

  - [#2694](https://github.com/RediSearch/RediSearch/pull/2694) Performance: In a `TEXT` field, skip term iterator if term does not appear in requested field

v2.4.3 (March 2022)

This is the General Availability release of RediSearch 2.4.

Headlines

RediSearch 2.4 introduces a new capability, Vector Similarity Search (VSS), which allows indexing and querying vector data stored (as BLOBs) in Redis hashes.

It also introduces a new query syntax to address query parser inconsistencies found in previous versions of RediSearch. Users can now choose between Dialect version 1 (to keep existing query parser behavior) or Dialect version 2 (to switch to the updated behavior).

All VSS queries or any query using the `PARAMS` option must use Dialect version 2.

What's new in 2.4

- `FT.CREATE` is extended to support the creation of 2 popular types of vector indexes:

  - **FLAT Index**

    This type of index is used when the recall is more important than the speed of query execution. A query vector will be compared to all vectors in a flat index. The search results will return the exact top k nearest neighbors to the query vector.

  - **Hierarchical Navigable Small World (HNSW) Index**

    This index is a modified implementation of the library written by the author of this influential [academic paper](https://arxiv.org/abs/1603.09320). An HNSW vector index is used when the speed of query execution is preferred over recall. The results returned are approximate nearest neighbors (ANNs).

    You can try out different HNSW index parameters (`M`, `EFCONSTRUCTION`, `EFRUNTIME`) to improve the "recall versus speed" balance.

- Use `FT.SEARCH` to retrieve the top K hashes with the most similar vectors to a given query vector.

- Hybrid queries in `FT.SEARCH`:

  Use hybrid queries to retrieve Redis hashes that match a combination of vector and non-vector search criteria. Non-vector search criteria can include expressions combining `NUMERIC`, `TEXT`, `TAG`, and `GEO` fields.

  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`]() 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`]()

    - [`FT.AGGREGATE`]()

    - [`FT.EXPLAIN`]()

    - [`FT.EXPLAINCLI`]()

    - [`FT.SPELLCHECK`]()

  If you do not specify dialect when running any of these commands, they will use the default module-level dialect value.

Details

- Features:

  - [#2671](https://github.com/RediSearch/RediSearch/pull/2671) Add Dialect support

- Performance enhancements (since 2.4-RC1):

  - [#2647](https://github.com/RediSearch/RediSearch/pull/2647) Normalize vector once for ad-hoc flat search
  - [#2638](https://github.com/RediSearch/RediSearch/pull/2638) Optimized hybrid query when no scores are required
  - [#2653](https://github.com/RediSearch/RediSearch/pull/2653) Updating specific field load optimization rule
  - [#2670](https://github.com/RediSearch/RediSearch/pull/2670) Use `REDISMODULE_EVENT_SHUTDOWN` to clear resources

- Security and privacy (since 2.4-RC1):

  - [#2584](https://github.com/RediSearch/RediSearch/pull/2584) Fix MOD-2086, added support for TLS passphrase

- Bug fixes (since 2.4-RC1):

  - [#2651](https://github.com/RediSearch/RediSearch/pull/2651) Fix client freeze on docs expire during query
  - [#2641](https://github.com/RediSearch/RediSearch/pull/2641) Memory leak in the coordinator
  - [#2645](https://github.com/RediSearch/RediSearch/pull/2645) Ignore NULL value on ingest
  - [#2654](https://github.com/RediSearch/RediSearch/pull/2654) VecSim hybrid query - return empty iterator for invalid intersection child iterator

Introducing DIALECT

RediSearch 2.4.3 introduces a new query syntax to address query parser inconsistencies found in previous versions of RediSearch. Users can now choose between:

- Dialect version 1 (to keep the query dialect as in RediSearch 2.2)

- Dialect version 2 (to use the updated dialect)

Existing RediSearch 2.2 users will not have to modify their queries since the default dialect is 1.
However, all RediSearch users should gradually update their queries to use dialect version 2.

#### Background

Under certain conditions, some query parsing rules did not behave as originally intended.
Queries containing the following operators could return unexpected results:

- `AND`
- quotes, ~, -, and % (exact, optional, negation, fuzzy)
- `OR`

To minimize the impact on existing, unaffected RediSearch users, a DIALECT setting was introduced to allow:

- Existing queries to run without any modification (DIALECT 1)

- New queries to benefit from the updated query-parsing behavior (DIALECT 2)

#### Examples of impacted queries

Your existing queries may behave differently under different DIALECT versions, if they fall into any of the following categories:

- Your query has a field modifier followed by multiple words.

  Consider this simple query <nobr>`@name:James Brown`</nobr>.

  The field modifier `@name` is followed by 2 words: `James` and `Brown`.

  With DIALECT 1, the parser interprets this query as "find `James Brown` in the `@name` field."

  With DIALECT 2, the parser interprets it as "find `James` in the `@name` field AND `Brown` in ANY text field." In other words, the query parser interprets it as <nobr>`(@name:James) Brown`</nobr>.

  With DIALECT 2, you could achieve the default behavior from DIALECT 1 by updating your query to <nobr>`@name:(James Brown)`</nobr>.

- Your query uses quotes, ~, -, % (exact, optional, negation, fuzzy).

  Consider a simple query with negation <nobr>`-hello world`</nobr>.

  With DIALECT 1, the parser interprets this query as "find values in any field that does not contain `hello` AND does not contain `world`." This is the equivalent of <nobr>`-(hello world)`</nobr> or <nobr>`-hello -world`</nobr>.

  With DIALECT 2, the parser interprets it as `-hello` AND `world`, so only `hello` is negated.

  With DIALECT 2, you could achieve the default behavior from dialect 1 by updating your query to <nobr>`-(hello world)`</nobr>.

Another example that illustrates the differences in parser behavior is
`hello world | "goodbye" moon`:

- With DIALECT 1, the parser interprets this query as searching for `(hello world | "goodbye") moon`

- With DIALECT 2, the parser interprets it as searching for either `hello world` OR `"goodbye" moon`.

This is the first GA version of 2.4. The version inside Redis will be 2.4.3 in semantic versioning. Since the version of a module in Redis is numeric, we could not add a GA flag.