github manticoresoftware/manticoresearch release-29.9.0
Manticore Search 29.9.0

4 hours ago

Version 29.9.0

Released: September 11th 2026

This release adds chunked and multi-vector auto-embeddings, safe UTF-8 identifiers, configurable embedding input limits, German sharp-s normalization, richer manticore-load benchmarking, authenticated cloud-aware backups, and memory-mapped columnar attributes by default, with fixes across KNN, hybrid and grouped search, schema changes, bulk ingestion, replication, binlog recovery, compatibility, and shutdown behavior.

❤️ We’d like to thank @tudorvasinca for their work on PR #4857, PR #4859, and PR #4873.

New Features and Improvements

  • 🆕 v29.9.0 PR #4898 Changed the default access_columnar_attrs mode from buffered file reads to mmap, allowing the operating system to cache columnar attribute data on demand without prereading it. Set access_columnar_attrs='file' explicitly to retain the previous behavior; ALTER TABLE now also reopens replaced columnar storage using the configured access mode.
  • 🆕 v29.8.0 Backup Issue #134 Updated manticore-backup to 1.11.0, allowing S3 backups and restores to use the AWS SDK credential provider chain—including IRSA, shared credentials, ECS task roles, and EC2 instance profiles—when static keys are not set, and adding AWS_SESSION_TOKEN support for temporary credentials.
  • 🆕 v29.7.0 Issue #4816 Added opt-in MAX_INPUT_TOKENS for local auto-embedding columns, allowing each input text to be truncated before embedding to bound long-document inference time and reduce retry-driven memory exhaustion. It can be set during CREATE TABLE or changed with ALTER TABLE ... MODIFY COLUMN without re-embedding existing rows; 0 or omission preserves the model’s own limit.
  • 🆕 v29.6.0 manticore-load Issue #26 Updated manticore-load to 1.28.0, adding opt-in --http mode for benchmarking through Manticore’s HTTP JSON API: writes use /bulk, searches use /search, HTTP defaults to port 9308, and --table selects the target table.
  • 🆕 v29.5.0 manticore-load PR #28 Updated manticore-load to 1.27.0, adding local searchd RSS to live progress, peak RSS, disk, and CPU usage to final reports, and aggregate monitoring across all tables in multi-command workloads.
  • 🆕 v29.4.0 MCL Issue #190 Added chunking strategies for auto-embeddings: mean embeds a long document as one averaged vector, while fixed, recursive, and sentence store multiple searchable vectors in a float_vector_array. The new MAX_TOKENS, OVERLAP_TOKENS, and MAX_CHUNKS options control chunk size, overlap, and count; existing truncate behavior remains the default.
  • 🆕 v29.3.12 Issue #4827 Added opt-in German AOT sharp-s normalization using charset_table=non_cont,german with lemmatize_de_v2 or lemmatize_de_v2_all, so ß, , and ss match equivalently in ordinary whole-word searches while index_exact_words=1 preserves their distinction in exact-word queries. Existing German morphology modes remain unchanged; switching a populated table to v2 requires rebuilding or replaying it.
  • 🆕 v29.3.4 Issue #4844 Updated manticore-backup to 1.10.4, allowing its CLI to authenticate HTTP requests with authentication options such as --user and --password or --token, and ensuring selected tables are unfrozen if a backup fails or is interrupted.
  • 🆕 v29.3.0 Issue #4770 Added consistent safe UTF-8 table, field, and attribute names across RT, percolate, distributed, template, and plain tables, SQL DDL and expressions, full-text field selectors, and inferred source schemas, allowing localized names such as Chinese and Cyrillic identifiers without renaming the source schema.
  • 🆕 v29.2.0 Issue #4099 Added float_vector_array for real-time tables, allowing each document to store and search several KNN vectors such as text chunks, product images, or video keyframes.
  • 🆕 v29.1.0 manticore-load PR #24 Updated manticore-load to 1.26.0, adding --worker-init and --worker-finalize SQL hooks for connection-scoped setup and ordered concurrent finalization around benchmark workloads.

Bug Fixes

  • 🪲 v29.8.4 Issue #4889 Fixed hybrid search ignoring filters on weight() or expressions and aliases derived from it; weight-dependent filters now run after fusion against the final text weight. Such filters in OR filter trees are not supported and now return an explicit error.
  • 🪲 v29.8.2 Issue #4893 Fixed valid fixed-length gzip-compressed /bulk requests failing with HTTP 400 when the compressed body arrived across multiple socket reads; socket-read boundaries no longer affect decompression or ingestion.
  • 🪲 v29.8.1 Issue #4884 Fixed Elasticsearch-compatible /_bulk requests returning request-level HTTP 409 for item failures, which caused clients such as Fluent Bit to retry already-applied writes; processed batches now return HTTP 200, preserve successful items, report duplicate create operations as per-item 409 version_conflict_engine_exception errors, including duplicates within the same batch, and reject malformed action metadata at request level.
  • 🪲 v29.7.2 Issue #4872 Fixed ALTER TABLE leaving stale attribute and source-field metadata on RT tables with auto-embeddings, which silently discarded values written by INSERT or REPLACE to subsequently added MVA columns and could misalign embeddings after earlier columns were dropped. Values lost before upgrading must be restored from their source or a backup.
  • 🪲 v29.7.1 MCL PR #205 Updated MCL to 14.2.1, fixing auto-embedding models potentially remaining in memory after ALTER TABLE ... MODIFY COLUMN ... MAX_INPUT_TOKENS and preventing different API_TIMEOUT and MAX_INPUT_TOKENS settings from colliding in the model cache and incorrectly reusing the same model.
  • 🪲 v29.5.1 MCL PR #204 Fixed KNN HNSW index construction occasionally leaving indexed vectors unreachable by KNN queries; newly built indexes now repair disconnected level-0 graph nodes before being saved. Existing indexes are not rewritten automatically and should be rebuilt if affected.
  • 🪲 v29.3.13 Issue #4844 Fixed SQL BACKUP and manticore-backup failing when authentication is enabled; backup operators can now authenticate with username/password or bearer tokens and require backup ON * plus read on each selected table, or unrestricted read ON * for full backups. Before downgrading to a version without the backup action, remove all backup grants.
  • 🪲 v29.3.11 PR #4879 Fixed LENGTH() on float_vector_array attributes returning the internal storage-word count instead of the number of vectors; empty arrays return 0, and the corrected value is used consistently in selection, filtering, and grouping.
  • 🪲 v29.3.10 Issue #4844 Updated Buddy to 4.4.3 to preserve the authenticated SQL user and pass Buddy’s internal bearer token to manticore-backup requests, providing the dependency-side authentication path for BACKUP; complete auth=1 support, including daemon-side backup permission checks, requires v29.3.13.
  • 🪲 v29.3.9 Issue #4639 Fixed hybrid search with GROUP BY returning empty or missing buckets, including MVA groups; grouped results now retain all buckets and honor final ORDER BY and WITHIN GROUP ORDER BY.
  • 🪲 v29.3.8 Issue #4774 Fixed equality, IN, and range filters on document IDs whose signed representation is negative returning no rows when the document-ID lookup index was used; lookup filtering now follows the index’s unsigned ID order.
  • 🪲 v29.3.7 Issue #4856 Fixed multi-chunk RT-table GROUP BY queries with more groups than max_matches potentially returning duplicate groups and incorrect split counts, or hanging searchd when COUNT(DISTINCT ...) was ordered by that count and the select list included an expression.
  • 🪲 v29.3.6 Issue #4826 Updated Buddy to 4.4.2, fixing Kafka materialized-view workers permanently stopping with Invalid JSON found when internal SELECT ...; SHOW META responses contained large integer IDs or long numeric-looking strings; response values are now preserved losslessly and ingestion continues.
  • 🪲 v29.3.5 Issue #4822 Fixed searchd intermittently crashing on JSON /search queries to distributed tables when sorting by a string attribute and aggregating a JSON field across multiple local tables.
  • 🪲 v29.3.3 Issue #4860 Fixed searchd crashing when DROP TABLE raced with an in-flight /bulk insert into an RT table using auto-embeddings; the transaction now completes against the live table or fails safely if the table is dropped or replaced.
  • 🪲 v29.3.2 Issue #4791 Fixed HTTP KNN queries on distributed and sharded tables with a local shard potentially crashing the coordinator or returning the wrong nearest neighbor when 1-bit quantization triggered rescoring; merged shard results are no longer rescored a second time.
  • 🪲 v29.3.1 PR #4864 Fixed searchd crashing when a multi-statement request’s second statement performed hybrid search by combining MATCH(), KNN(), and OPTION fusion_method='rrf'.
  • 🪲 v29.2.9 Issue #4837 Fixed indextool --apply-killlists crashing when a current-format killlist was applied to an older plain table with a legacy JSON header; indextool now reads the table’s actual on-disk format version before processing lookup data.
  • 🪲 v29.2.8 Issue #4854 Restored full CI test coverage by running GoogleTest, API consistency, indextool, and other CTest-managed tests alongside ubertests.
  • 🪲 v29.2.7 Issue #4842 Fixed ALTER TABLE ... RENAME failing with Invalid API key for remote model for real-time tables using remote auto-embeddings; table copies now preserve hidden embedding API keys without exposing them in SHOW CREATE TABLE.
  • 🪲 v29.2.6 PR #4861 Fixed a KNN search performance regression in queries with additional filters by avoiding a redundant knn_dist prefilter when the HNSW iterator already excludes documents without vectors, while preserving correct exclusion on brute-force, full-text, grouped, and faceted KNN paths.
  • 🪲 v29.2.5 Issue #4833 Fixed SQL queries on tables with UUID document IDs returning stored text fields as empty; stored fields are now retrieved correctly when selected explicitly or through SELECT *.
  • 🪲 v29.2.4 Issue #4828 Restored Sequel Ace 5.3.1+ compatibility by supporting its CAST(DATABASE() AS BINARY) and CAST(@@character_set_client AS BINARY) probes, preventing every subsequent query from failing.
  • 🪲 v29.2.3 PR #4619 Fixed graceful searchd --stopwait hanging while a sharded table was rebalanced after a node rejoined; in-progress shard transfer now stops during shutdown and detached workers use bounded waits.
  • 🪲 v29.2.2 Issue #4793 Fixed indexer failing to build plain tables when their configured path contained missing parent directories; it now creates the missing directory tree automatically when the nearest existing parent is writable.
  • 🪲 v29.2.1 PR #4832 Corrected and completed copyright and GPL license headers in recently added source files.
  • 🪲 v29.1.1 Issue #4808 Fixed upgrades from versions with v15 binlogs potentially crashing or omitting a newly flushed RT disk chunk from table metadata during shutdown; compatible recovery logs now replay, completed chunks are published before clean shutdown, and unsupported recovery formats fail safely.
  • 🪲 v29.0.6 Issue #4811 Improved fatal binlog replay diagnostics to name the matching --replay-flags recovery option: ignore-open-errors for missing binlog files and ignore-trx-errors for transaction replay failures.
  • 🪲 v29.0.5 Issue #4784 Fixed JSON /search queries with negation losing distances for NEAR and proximity operators, which caused valid positional queries to fail with a zero-distance error or behave incorrectly.
  • 🪲 v29.0.4 Issue #4788 Fixed LEFT JOIN queries ordered by string attributes returning internal @int_attr_* helper columns in client results.
  • 🪲 v29.0.3 PR #4790 Fixed malformed binary API SEARCH requests with negative or impossible element counts potentially terminating searchd; invalid counts are now rejected with protocol errors, including when max_batch_queries=0.

Don't miss a new manticoresearch release

NewReleases is sending notifications on new releases.