Releases: valkey-io/valkey-search
Release 1.2.0-rc3
Bug fixes / Improvements
- Fixed a crash caused by lazy expiration during active search commands by using VALKEYMODULE_OPEN_KEY_NOEXPIRE and explicit expiration checks.
- Index Creation Validation: Added check for the limit of 64 text fields per index.
- Timeout Handling: Added timeout logic in aggregation stages and added comprehensive timeout tests for FT.AGGREGATE and all FT.SEARCH execution paths.
- Removed stemmed word length restrictions to support cases where a stem root can be longer than the original word.
- Support was added for the Valkey 9 CME Multi-DB feature by updating the select DB logic during RDB Load.
- Fixed GetSerializationRange logic for Aggregation
Optimizations
- Concurrent Indexing: Implemented a sharded PostingsMutexPool and utilizing Reader-Writer tree locks to improve throughput for parallel writes.
- Lock Contention: Reduced lock contention on per_key_text_indexes_ during query evaluation.
- Stemming Performance: Achieved up to 25-42% peak improvement for Snowball stemming by optimizing compiler flags.
- Tokenization improvements to reduce allocations during normalization, stemming, etc.
- Switched PositionMap to absl::btree_map, stem variants storage to vector and temporary stem mappings to InlinedVector for improved cache locality and reduced memory overhead.
- Optimized raxMutate to complete mutation operations in a single tree traversal.
- Resource Control: Introduced search.max-nonvector-search-results-fetched to limit ephemeral memory usage during non vector query searches.
- Shard Efficiency: Introduced a development (usable in debug mode) fanout-data-uniformity configuration to reduce cross shard network traffic by optimizing fanout fetching.
Full Changelog: 1.2.0-rc2...1.2.0-rc3
Release 1.2.0-rc2
Bug fixes
- Fix mutation sequence number timing bug to prevent race conditions with key deletions
- Fix to ensure an RDB from a search module loaded valkey-server (after deleting the pre-existing indexes) can be loaded onto the valkey servers without the search module
- Add null check for thread_monitor_ to prevent crashes in GetAvgCPUPercentage
- Fix unhandled text path in PreFilter Evaluators for complex OR queries
- Remove unnecessary allocation in text search operations
Optimizations
- Replace linear scan with min-heap approach in TermIterator for faster term searches
- Optimize FlatPositionMap::ReadCounts by replacing memcpy with loop-based byte reading
- Implement Size Estimation of Text Predicate key results size to help with the decision of pre-filtering vs inline-filtering in vector queries
Full Changelog: 1.2.0-rc1...1.2.0-rc2
Release 1.2.0-rc1
Note: Like valkey-search 1.1, this valkey-search 1.2 release also requires Valkey core 9.0.1 or higher.
Major New Features / Updates
- Adding text search capability. This includes updates to the FT.CREATE, FT.SEARCH, FT.AGGREGATE, Ingestion, etc.
- Refer to documentation on how to use the feature: https://valkey.io/topics/search/
- Support for SKIPINITIALSCAN option on the FT.CREATE command
- Single Slot Query support
- Added support for SORTBY functionality on the FT.SEARCH command
- Enhanced RDB format to eliminate backfill after load
- Increase default for allowed number of indexes to 1000
- Increased limit on number of fields with default updated to 1000 and max to 10000
- FT.SEARCH and FT.AGGREGATE commands are no longer marked as denyoom
- Add Memory Tracking for Index Schema Attributes
- Replica nodes no longer participate in metadata consistency protocol. All mutation information comes from the Primary
- Enhanced FT.INFO command with additional information in Cluster mode
Contributors
- @Aksha1812
- @AlexFilipImproving
- @allenss-amazon
- @baswanth09
- @BCathcart
- @daddaman-amz
- @eifrah-aws
- @eliastam
- @eric-musliner
- @murphyjacob4
- @KarthikSubbarao
- @otherscase
- @boda26
- @Arunsarma07
- @Nivesh-01
- @VoletiRam
- @yairgott
- @yanamolo
- @zvi-code
Full Changelog: 1.1.0...1.2.0-rc1
Release 1.1
Major New Features
- FT.AGGREGATE command is implemented.
- Indexes and query operations no longer require a vector component.
- Consistency of operations across the cluster is substantially improved.
- The RDB format now includes information to avoid generating a backfill on reload when it's not required. (Backward compatible with 1.0 release)
- The build system has switched to cmake.
- A pytest-based integration test environment was added
- Full DBNum support for cluster mode is implemented.
- This release requires 9.0.1 Valkey core release or higher.
What's Changed
- Add integration test framework by @murphyjacob4 in #20
- CMake support by @eifrah-aws in #33
- Ensure that Index names and Prefixes do not have a slot tag, closes #31 by @allenss-amazon in #57
- Enforce vector indexed attribute by @yairgott in #63
- Add ACL support to Valkey Search. by @jeon1226 in #49
- Automatically configure threadpool size based on physical cpu core count. by @dpbnasika in #60
- Implement new RDB format by @murphyjacob4 in #68
- Add ASAN build option by @eifrah-aws in #100
- adding support for blocking clients during keyspace notification by @yairgott in #95
- FT.SEARCH - Update neighbor sorting to always be asc by @KarthikSubbarao in #104
- Rename ValkeySearch to valkey-search by @yairgott in #119
- Dynamic thread pool by @eifrah-aws in #126
- Command registration permissions alignment with ACL prefix permissions by @yairgott in #125
- Introduce RFC for RDB format by @murphyjacob4 in #28
- Add OOM checking to index backfill by @murphyjacob4 in #135
- renaming total_indexed_hash_keys to total_indexed_documents by @yairgott in #137
- Fixing empty vector query clause ft.search cmd parsing by @yairgott in #138
- Allow changing the reader/writer threads count at runtime by @eifrah-aws in #129
- Module-Config: fix a possibility of a double free by @eifrah-aws in #149
- Enable integration tests + ASan by @eifrah-aws in #162
- Search trigger for Valkey Extension Automation by @Nikhil-Manglore in #163
- Fix bug resulting in no ingestion to indexes with the same prefix as a dropped index by @eifrah-aws in #166
- Alpine Linux related fixes by @eifrah-aws in #168
- Fix GetRedisLocalPort function to support TLS by @yanamolo in #144
- Add coordinator port info metric by @yanamolo in #177
- The module can now be built on macOS by @eifrah-aws in #178
- We renamed Valkey-Extensions to Valkey-Bundle by @Nikhil-Manglore in #189
- Valkey Test Framework: load JSON module by @eifrah-aws in #198
- Revision of info framework. by @allenss-amazon in #202
- Add FT._DEBUG command by @allenss-amazon in #207
- Limit FT.SEARCH query string parsing recursive depth by a module config by @KarthikSubbarao in #182
- Add network byte counting to coordinator client by @yulazariy in #212
- Add operational limits to create command by @aradz44 in #214
- Add CPU metrics for reader and writer threads by @yanamolo in #217
- Add query string bytes limit using a module config by @KarthikSubbarao in #222
- Add a limit on the number of terms in a search query by @aradz44 in #229
- Add limit to the K value in FT.SEARCH cmd by @aradz44 in #231
- Limit the result record in ft.search cmd by @aradz44 in #239
- Supporting tsan build and addressing the time slice mutex test issues by @yairgott in #236
- Add metric for reclaimable memory by @aradz44 in #240
- Adding support for non vector queries by @KarthikSubbarao in #218
- Fix ACL bug where commands where allowed when user has no permissions for one of the index prefixes by @yanamolo in #246
- Reimplement timeout handling. by @allenss-amazon in #249
- Change visibility for some of info fields to developer only by @yulazariy in #281
- Handle OOM during search command fanout by @yanamolo in #268
- Reject queries when no valid pre-filter and no vector filter is provided by @KarthikSubbarao in #283
- Add coordinator metadata health monitoring info field by @yulazariy in #284
- Added support for cluster with replicas by @eifrah-aws in #313
- Properly wait for replication group to reach stabilization status by @eifrah-aws in #315
- Fanout operation base and cluster-wide primary and cluster fanout operation modes by @boda26 in #310
- Strip the complete build path from logs by @Shivshankar-Reddy in #308
- feat: memory scope & memory usage for string interning store by @proost in #153
- Expose global symbols so that crash dump backtraces are useful by @allenss-amazon in #329
- Add a configuration for resuming workers after fork by @eranfrie in #301
- Introduced new "debug-mode" configuration entry. by @eifrah-aws in #339
- Add support to retrieving JSON values via the JSON shared API by @yairgott in #287
- Add configurable thread pool fairness mechanism with comprehensive testing by @yulazariy in #362
- Respect valkey and json module versions defined in build and integration tests by @ChristophKoerner in #363
- Remove command alloed acl checks is it is already done by Valkey by @yulazariy in #387
- added and removed stats and attributes from ft.info by @Nivesh-01 in #370
- tag casesentive updated to be key-value pair by @Nivesh-01 in #395
- Add --format option to build script by @BCathcart in #384
- FT.CREATE consistency check by @boda26 in #386
- FT.DROPINDEX consistency check by @boda26 in #393
- Implement server version checking on load by @allenss-amazon in #408
- Implementation of FT.AGGREGATE Command by @allenss-amazon in #345
- addressing non-vector search issues by @yairgott in #400
- prevent Valkey crash when module is loaded twice by @dmitrypol in #415
- Prevent crash on Valkey 7.2 when loading valkey-search by @dmitrypol in #427
- Cluster Map Implementation by @boda26 in #435
- Replace multiple utility libraries with unified vmsdklib dependency by @eifrah-aws in #477
- Update ProcessKeyspaceNotification to not return before trying out all attributes by @KarthikSubbarao in #489
- Revise Save/Restore for true pit snapshot. by @allenss-amazon in #401
- Add support for checking ACL key prefix permissions using the new Valkey module API. by @eifrah-aws in #479
- Populate fingerprint and version to IndexSchema by @boda26 in #480
- feat: set command info for ft.create by @proost in #299
- FT.SEARCH partition and consistency controls by @boda26 in #464
- FT.INFO partition and consi...
1.0.2
Valkey Search 1.0.2 - Released Tue 25 November 2025
Bug fixes
- Disabled creation of indexes on database numbers != 0 in cluster mode.
1.0.1
Valkey Search 1.0.1 - Released Wed 11 June 2025
Bug fixes
- Module-Config: fix a possibility of of a double free (#149)
- More resilient builds on different Linux distros (#152, #154, #158, #168, #172)
- Use a managed pointer for thread safe context in coordinator (#159)
- Enable integration tests + ASAN (#162)
- Fixed drop index bug (#166)
- Fix GetRedisLocalPort function to support TLS (#144)
1.0.0
Valkey Search 1.0.0 GA - Released Wed 28 May 2025
This is the first official release of Valkey Search 1.0. This release is fully compatible with Valkey 8.1.1 and later releases.
Behavior changes
- Adding support for blocking clients during keyspace notification (#95)
- Make index backfill batch/block size configurable (#97)
- FT.SEARCH - Update neighbor sorting to always be asc (#104)
- Add OOM checking to index backfill (#135)
Bug fixes
- Avoid unsafe code in INFO during crash dump (#98)
- Support counting cores on aarch64 (#107)
- Create index with the correct DB number (#120) (#123)
- Fix dumping corrupted rdb file (#131)
- Fix empty vector query clause ft.search cmd parsing (#138)
Performance/efficiency improvements
Build and packaging changes
- Allow building with external libs (#85)
- Don't suppress error when running python integration tests (#89)
- Add ASAN build option (#100)
Valkey Search 1.0.0 RC1 - Released Fri 28 Mar 2025
This is the first release candidate of valkey-search 1.0 that is a high-performance Vector Similarity Search engine optimized for AI-driven workloads. It delivers single-digit millisecond latency and high QPS, capable of handling billions of vectors with over 99% recall.
Valkey-Search allows users to create indexes and perform similarity searches, incorporating complex filters. It supports Approximate Nearest Neighbor (ANN) search with HNSW and exact matching using K-Nearest Neighbors (KNN). Users can index data using either Valkey Hash or Valkey-JSON data types.
Major API and Functionality
- Add the search module data type which can handle RDB load, RDB save, free, and memory usage
- Add the following search module commands:
- FT.CREATE
- FT.DROPINDEX
- FT.INFO
- FT._LIST
- FT.SEARCH
- Supported indexes
- Vector: HNSW and Flat
- Non-vector: Numeric and Tag
- Index data types include Valkey Hash and Valkey JSON.
- Cluster support including cross-shard search via coordinator mode
- Linear scaling of keyspace and compute
- ACL support
- RDB serialization of metadata including the search index
- Hybrid queries combining vector and non vector indexes
- Handle key space events for data mutation
- Expose statistics and reporting memory usage to the core valkey engine
New configurations
- Add support for the following configurations: reader-threads, writer-threads, use-coordinator, log-level
1.0.0-rc1
Valkey Search 1.0.0 RC1 - Released Fri 28 Mar 2025
This is the first release candidate of valkey-search 1.0 that is a high-performance Vector Similarity Search engine optimized for AI-driven workloads. It delivers single-digit millisecond latency and high QPS, capable of handling billions of vectors with over 99% recall.
Valkey-Search allows users to create indexes and perform similarity searches, incorporating complex filters. It supports Approximate Nearest Neighbor (ANN) search with HNSW and exact matching using K-Nearest Neighbors (KNN). Users can index data using either Valkey Hash or Valkey-JSON data types.
Major API and Functionality
- Add the search module data type which can handle RDB load, RDB save, free, and memory usage
- Add the following search module commands:
** FT.CREATE
** FT.DROPINDEX
** FT.INFO
** FT._LIST
** FT.SEARCH - Supported indexes
** Vector: HNSW and Flat
** Non-vector: Numeric and Tag - Index data types include Valkey Hash and Valkey JSON.
- Cluster support
- Linear scaling of keyspace and compute
- ACL support
- RDB serialization of metadata including the search index
- Hybrid queries combining vector and non vector indexes
- Handle key space events for data mutation
- Expose statistics and reporting memory usage to the core valkey engine
New configurations
- Add support for the following configurations: reader-threads, writer-threads, use-coordinator, log-level