Version 17.5.1
Released: February 7th 2026
Recommended Libraries
If you follow the official installation guide, you don't need to worry about this.
❤️ We’d like to thank @pakud for their work on PR #4075.
Breaking Changes
- ⚠️ v17.0.0 Issue #4120 MCL 10.0.0: Added support for
DROP CACHE. This updates the interface between the daemon and MCL. Older Manticore Search versions don't suport the newer MCL. - ⚠️ v16.0.0 Issue #4019 Percolate query JSON responses now return hit
_idand_scoreas numbers instead of strings, matching regular search; this is a breaking change for clients that relied on string type for these fields.
New Features and Improvements
- 🆕 v17.5.0 PR #130 MCL updated to 10.2.0: QWEN model support fixed and support for additional models added.
- 🆕 v17.3.0 PR #4186 Executor updated to 1.4.0, including an updated PHP version and the llm-php-ext extension.
- 🆕 v17.2.0 PR #4195 Updated MCL to 10.1.0; Added support for Qwen local embeddings models.
- 🆕 v17.1.0 Issue #3826 Jieba morphology instances are now shared across tables with the same configuration (mode, HMM flag, user dict path), greatly reducing memory use when many tables use Jieba (e.g. many empty tables no longer cause ~20 GB usage).
- 🆕 v17.0.7 Issue #2046 In RT mode, stopwords, wordforms, exceptions, and hitless_words can be set inline in
CREATE TABLE(semicolon-separated values; wordforms/exceptions use>or=>for pairs, with\escaping), so tables can be created without external files;SHOW CREATE TABLEreturns these inline values. - 🆕 v16.3.0 KNN search now defaults to oversampling=3 and rescore=1, and supports omitting k so the query limit is used as the effective k; this reduces unnecessary oversampling and improves behavior when using
SELECT *with KNN on columnar tables. - 🆕 v16.2.0 PR #4088 Added searchd
--quiet(-q) flag to suppress startup output (banner and precache messages), printing only errors; useful when starting and stopping searchd in a loop or from scripts. - 🆕 v16.0.1 Issue #3336 HTTP connections are now persistent by default when using HTTP/1.1: clients no longer need to send the
Keep-Aliveheader explicitly, reducing random connection failures in API clients (e.g. PHP, Go). To close a connection, the client sendsConnection: close. HTTP/1.0 still requiresConnection: keep-alivefor persistence.
Bug Fixes
- 🪲 v17.5.1 Issue #3498 Fixed JOIN results returning empty or duplicated values when a column was both a string attribute and a stored field; the attribute value is now returned correctly.
- 🪲 v17.4.2 Issue #2559 Fixed joins on JSON string attributes (e.g.
j.s) returning no matches; they now work like joins on plain string attributes. - 🪲 v17.4.1 Fixed stored attributes not being evaluated in final when cutoff is set.
- 🪲 v17.2.10 Issue #425 Auto table creation (auto schema) now runs for
REPLACE INTOas well asINSERT INTO, so tables are created on demand when missing. - 🪲 v17.2.9 Issue #3226 Fixed incorrect
GROUP BYresults on columnar MVA with multipleGROUP BYcolumns by rejecting such queries with the same error as rowwise ("MVA values can't be used in multiple group-by"). - 🪲 v17.2.7 Issue #1737 Fixed
highlight()withhtml_strip_mode=stripcorrupting content by decoding entities and altering tags; original entity form is now preserved in the highlighted output. - 🪲 v17.2.6 Issue #3203 Fixed
ALTER TABLE REBUILD SECONDARYfailing withfailed to rename … .tmp.spjidxwhen the table had multiple disk chunks. - 🪲 v17.2.5 Issue #3226 Fixed incorrect GROUP BY results on columnar MVA with multiple GROUP BY columns by rejecting such queries with the same error as rowwise ("MVA values can't be used in multiple group-by").
- 🪲 v17.2.4 Issue #4148 Fixed distributed queries returning stored fields from the wrong local index when agent tables contain duplicate document IDs; stored fields now follow index order and the first matching index is used for duplicates.
- 🪲 v17.2.3 Issue #4176 Fixed table rename breaking tables that use external stopwords, wordforms, or exceptions:
ATTACH TABLEnow migrates these files to the new chunk-based format and updates disk chunk headers, so afterALTER TABLE RENAMEthe daemon no longer reports missing external files on restart. - 🪲 v17.2.2 Issue #1065 Added the expand_blended search option so that query tokenization applies the table's blend rules and expands blended variants (e.g. "well-being" → "well-being" | "wellbeing" | "well" "being"), allowing one query to match documents indexed with any of those forms.
- 🪲 v17.1.3 Issue #1618 Bumped Buddy to 3.40.7. Support for using Manticore with HikariCP and JPA/MyBatis (Spring Boot) is provided via Manticore Buddy, which implements the required MySQL wire protocol behavior.
- 🪲 v17.1.2 Issue #4128 Fixed MATCH with OR over the same phrase in different fields (e.g.
(@name ="^New York$") | (@ascii_name ="^New York$")) returning matches from other fields; boolean simplification no longer drops field restrictions in that case. - 🪲 v17.1.1 Issue #4131 Fixed
ALTER TABLEwith table-level settings (e.g.html_strip='1') failing on tables with auto-embeddings with "knn_dims can't be used together with model_name"; serialization now omits knn_dims when model_name is set. - 🪲 v17.0.12 PR #4188 Fixed incorrect filter and filter tree evaluation in joined queries.
- 🪲 v17.0.11 Issue #3661 Fixed intermittent crashes when using columnar MVA64 attributes (e.g. during merge/optimize or when selecting stored/columnar attributes), by correcting docstore and blob-pool handling of columnar MVA64 data.
- 🪲 v17.0.10 Issue #3944
HIGHLIGHTand snippet generation now supportREGEXin the query string, soREGEXmatches are highlighted correctly when the sameREGEXquery is used inMATCHandHIGHLIGHT. - 🪲 v17.0.8 Issue #4159 Fixed
HISTOGRAM()returning incorrect values (e.g. zero) when the first argument is a float expression such asprice*100; histogram now uses float bucketing for float-like arguments so expression results are binned correctly. - 🪲 v17.0.5 Issue #4148 Fixed distributed queries returning the wrong stored field when an agent has multiple local indexes with duplicate document IDs; stored field is now taken from the matching index according to index order (first encounter wins), and the behavior is documented.
- 🪲 v17.0.3 Issue #4115
HIGHLIGHT()and snippet generation now support the explicit OR operator (|) inside quoted expressions, using the same query transform as search. - 🪲 v17.0.1 Issue #4118 In plain mode, KNN attributes with model_name (auto-embeddings) no longer require an explicit dims property; the table is served using the model's dimensions.
- 🪲 v16.3.4 PR #4121 Improved performance for queries that use stored columnar attributes (early-out and cached attribute dependency checks, reduced docstore reader overhead), and added
DROP CACHEto clear query, docstore, skip, and secondary index caches. - 🪲 v16.3.3 Issue #3928 Fixed scroll pagination when
ORDER BYincluded a string column: the scroll token is now applied correctly and returns the next page instead of repeating the first page. - 🪲 v16.3.2 Issue #4040 Fixed a segmentation fault during startup when stack measurement failed on some environments (e.g. AlmaLinux 10, Docker/VM): stack mocking now compares the frame delta to the remaining stack size instead of using a sum that could overflow or be wrong, so measurement no longer enters an invalid state and searchd no longer crashes after the “Something wrong measuring stack” warning.
- 🪲 v16.3.1 Issue #4062 JOIN queries now consistently report an error when left-table attributes are prefixed in
WHEREclause filters; previously in some cases (e.g. when the right table had no full-text field) the query ran without error and returned an empty result set. - 🪲 v16.2.6 Issue #1827 Backtick-quoted reserved keywords (e.g. order, year, facet) are now accepted as attribute and column names in
CREATE TABLEand in expressions, so tables and queries can use reserved words as identifiers when escaped with backticks. - 🪲 v16.2.5 Issue #4107 Fixed SphinxQL parser so expressions ending with a backticked column name parse correctly instead of raising a syntax error.
- 🪲 v16.2.4 Issue #4106
SHOW CREATE TABLEnow outputs column names that are reserved or special (e.g. knn) in backticks, so thatCREATE TABLE ... LIKEand re-executing the shown DDL work when the source table has such columns. - 🪲 v16.2.3 Issue #3661 Corrected docstore stored-attribute count during
ALTERso the non-existent.spdsrename no longer occurs, and preserved existing blob data in the blob pool when adding columnar attributes so "Blob offset out of bounds" and query/merge crashes no longer occur. - 🪲 v16.2.1 PR #4083 Fixed incorrect diacritic-related mappings in CJK, Japanese, and Korean charset tables so that base and voiced/diacritic character forms are normalized correctly for indexing and search.
- 🪲 v16.1.4 PR #4084 Fixed a memory leak of replication receiver state on joiner nodes when no files needed to be sent; added a cluster API command to clean up recv state on joiners so it is freed when the donor finds all nodes already in sync.
- 🪲 v16.1.3 Issue #615 Bumped Buddy to 3.40.5. Fixed invalid JSON errors in the KNN plugin when result rows contained bigint fields: string values were serialized unquoted (e.g. numeric-looking strings like
0000000000), producing invalid JSON; string attributes are now always serialized as quoted JSON strings. - 🪲 v16.1.2 PR #4077 Fixed JSON field output and parsing for large double values: result-set printing now uses a fallback format when the value exceeds the default buffer, and integer literals that overflow int64 are parsed as doubles instead of incorrect integers.
- 🪲 v16.1.1 Issue #2628 Improved KNN index error recovery: when an RT index fails to load a KNN index, partially loaded HNSW data is now cleaned up so the daemon no longer crashes when deleting the disk chunk.
- 🪲 v16.0.13 PR #4076 Added
searchd.attr_autoconv_strictoption (default 0) to control string-to-number conversion onINSERT/REPLACEinto RT tables: when enabled, invalid values (empty string, non-numeric, trailing characters, overflow) return errors instead of silently converting to 0. - 🪲 v16.0.12 Issue #1751 Fixed
must_notin JSON search so it behaves as logical NOT (returning all documents that do not match the inner query); also fixed SphinxQLWHERE NOT ...for filter expressions. - 🪲 v16.0.11 PR #2990 Updated Libstemmer to a version that includes the fix for the Greek stemmer (
libstemmer_el) bug #204, preventing the server crash that could occur with certain Greek text when usingmorphology='libstemmer_el'(see issue #2888). - 🪲 v16.0.10 Stored attribute evaluation moved to the postlimit stage when possible, improving performance.
- 🪲 v16.0.9 Issue #3905 Fixed an intermittent crash when index rotation coincided with SIGHUP (e.g. config reload) on the master node: with dynamic config, fork() duplicated sockets and epoll could later report an fd whose associated data was already freed. Sockets are now removed from the epoll interest list with EPOLL_CTL_DEL before being closed, preventing use-after-free in
LazyNetEvents_c::EventTick(). - 🪲 v16.0.8 Issue #3418 Updated the Buddy requirement to 3.40.4, which includes an improved format for processing-error logs: when a query fails (e.g. “unknown local table(s) 'index'”), Buddy now logs the failure reason from the daemon instead of only “Failed to handle query” with no context.
- 🪲 v16.0.7 Issue #2281 Resolved inconsistent type names for multi-value attributes in percolate tables: mva and mva64 are now accepted as synonyms for multi and multi64 in
CREATE TABLE, so either naming can be used when defining tables (e.g.CREATE TABLE t (id bigint, tags mva64, ...) type='pq'). Schema output (e.g.DESC table) continues to use the existing type names for compatibility. - 🪲 v16.0.4 PR #4047 Updated MCL version to 9.0.1. Fixed KNN float vector handling when block_size is 1 by disabling table compression in that case (compression is not used for block size 1).
- 🪲 v16.0.3 Issue #4042 Fixed a crash of a rejoined node when
ALTER CLUSTER ... ADD TABLEwas run on another node after the joiner had restarted and re-joined. - 🪲 v15.1.5 Issue #4009 Fixed query cache still being used when secondary index was forced via hints; the cache is now disabled so forced SI is always honored.
- 🪲 v15.1.4 Issue #2591 Fixed the
NOTNEARfull-text operator so it correctly excludes matches when the right-hand term appears within the specified distance either before or after the left-hand term (symmetric/backward matching). Previously NOTNEAR only considered the right term when it appeared after the left term, so for exampled NOTNEAR/3 acould incorrectly match a document containing "a b c d". NEAR now also returns an error when the distance is 0. - 🪲 v15.1.3 Issue #507 Bumped Buddy to 3.40.3. Fixed multi-query requests that use fuzzy search (
OPTION fuzzy=1) followed by show meta on/cliand/sql?mode=raw. - 🪲 v15.1.1 Issue #4009 Fixed incorrect results with SecondaryIndex hint and query cache by making SI and query cache mutually exclusive per query and adding a warning when forced SI is ignored due to a cache hit.