# Manticore Search 28.4.4: Faster KNN, better conversational search, easier installs and more faceting controls

Manticore Search 28.4.4 speeds up KNN rescoring, adds HTTP/custom-prompt conversational search, simplifies installs, improves facets and relevance defaults, and fixes auth, replication, SQL, and columnar/KNN issues.

[Manticore Search 28.4.4](/install/) has been released. This release brings faster KNN rescoring, more flexible conversational search, a simpler install and upgrade path, better faceting controls, per-table relevance defaults, and fixes across authentication, replication, SQL compatibility, distributed queries, and columnar/KNN internals.

This post is a catch-up for everything shipped from **27.2.0 through 28.4.4**.

---

## Upgrade Notes

Please review these before upgrading:

- **28.0.0 bumps the plugin ABI version `SPH_UDF_VERSION` to 12.** External UDF, ranker, and token-filter plugin binaries must be rebuilt before loading them into this version. The change lets token-filter plugins receive long [`dict=keywords_32k`](https://manual.manticoresearch.com/Creating_a_table/NLP_and_tokenization/Low-level_tokenization#dict) tokens instead of silently bypassing values above the old 126-byte plugin limit. Existing table data and configuration remain compatible, and no index migration is required. Downgrade is possible if you also restore plugin binaries built for the older ABI and do not rely on the new long-token plugin behavior. ([Issue #4667](https://github.com/manticoresoftware/manticoresearch/issues/4667), [PR #4668](https://github.com/manticoresoftware/manticoresearch/pull/4668))
- **If authentication is enabled, prioritize the 28.4.x update.** 28.4.2 fixes an authentication/authorization permission-check bypass in MySQL multi-statement execution. 28.3.4 also improves authenticated MySQL startup compatibility for Connector/J and PyMySQL, and 28.4.1 fixes authenticated replication-cluster restart recovery by persisting the stored replication user in cluster metadata. ([PR #4713](https://github.com/manticoresoftware/manticoresearch/pull/4713), [Issue #4691](https://github.com/manticoresoftware/manticoresearch/issues/4691), [Issue #4705](https://github.com/manticoresoftware/manticoresearch/issues/4705))
- **If you manage MCL separately from the daemon, upgrade it together with Manticore.** This release line includes [MCL](https://github.com/manticoresoftware/columnar) 13.7.0, the new [`embeddings_threads`](https://manual.manticoresearch.com/Server_settings/Searchd#embeddings_threads) setting, and several columnar/KNN build, packaging, and cleanup fixes. Mixing an older library with a newer daemon is not recommended. ([PR #169](https://github.com/manticoresoftware/columnar/pull/169), [PR #186](https://github.com/manticoresoftware/columnar/pull/186), [PR #4676](https://github.com/manticoresoftware/manticoresearch/pull/4676))

---

## Highlights

### Faster KNN rescoring

[KNN search](https://manual.manticoresearch.com/Searching/KNN#KNN-vector-search) now batches distance calculations during the `rescore` pass. After HNSW returns the candidate set, Manticore recomputes final full-precision distances and re-sorts the results. Batching that work reduces per-candidate overhead in the final stage of vector search.

For vector-heavy workloads, this takes work out of the part of the query that runs after candidate selection. Results do not change; the final ranking pass just has less overhead when many candidates are rescored.

### Conversational search through SQL and HTTP

[Conversational search](https://manual.manticoresearch.com/Searching/Conversational_search) is now available through the `/search` JSON API as well as SQL `CALL CHAT`. That makes it easier to use Manticore's chat flow from applications that already talk to the HTTP API and do not want to add a separate SQL path just for chat requests.

`CREATE CHAT MODEL` also gained `custom_prompt` support, so answers can follow application-specific instructions such as citation rules, tone, response length, or formatting. The feature is still built on the same Manticore Search flow: retrieve relevant documents from an existing vectorized table, build context, keep conversation history, and return an answer with supporting sources.

### One-line installation and version selection

The quick-start install path is now simpler:

```sh
curl https://manticoresearch.com | sh
```

The same installer flow can also upgrade an existing installation, list available versions, switch between stable and development repositories, and install a selected version. Package managers still remain the source of truth for installed files, repositories, services, and dependencies; the new bootstrap path just removes the manual setup steps around them.

For all options, run:

```sh
curl https://manticoresearch.com | sh -s help
```

### Facets can keep zero-count buckets visible

[Faceted search](https://manual.manticoresearch.com/Searching/Faceted_search) now supports zero-count facet buckets through SQL `ZEROES` and JSON `"zeroes": true`.

This is a small but important UI feature. In e-commerce-style filtering, you often want to keep an option visible even when the current filter combination gives it a count of `0`. Combined with `max`-mode facet behavior, zero-count buckets make it easier to show selected, available, and currently unavailable choices without hiding part of the filter vocabulary from the user.

### Better defaults for search relevance

Manticore now supports [`CREATE TABLE ... profile='relevance'`](https://manual.manticoresearch.com/Creating_a_table/Local_tables/Plain_and_real-time_table_settings#profile), plus stored per-table defaults for [`ranker`](https://manual.manticoresearch.com/Searching/Options#ranker) and [`boolean_mode`](https://manual.manticoresearch.com/Searching/Options#boolean_mode).

Based on our relevance tests, `profile='relevance'` applies better full-text defaults for typical search workloads, so new tables can start with stronger ranking behavior without every application query repeating the same options.

It also makes relevance settings part of the table definition. If a table is meant to behave like a relevance-tuned full-text search table, that choice now lives in the schema instead of being hidden in application code.

### More control over embedding CPU usage

[`embeddings_threads`](https://manual.manticoresearch.com/Server_settings/Searchd#embeddings_threads) caps the CPU threads used for auto-embedding inserts, `ALTER TABLE ... REBUILD KNN`, and text-to-vector KNN queries.

This matters on shared hosts and mixed workloads. Embedding generation and KNN rebuilds can be CPU-heavy; a server-level cap makes those jobs easier to schedule without letting them take over the whole machine.

---

## Bug Fixes

This release line includes **17 changelog-listed fixes**. The most important ones are:

- 28.4.3 fixed incompatible multi-statement handling around [`COUNT(DISTINCT ...)`](https://manual.manticoresearch.com/Searching/Grouping#COUNT%28DISTINCT-field%29), preventing incorrect carry-over and rowset corruption in multi-query result processing.
- 28.4.2 fixed an authentication/authorization permission-check bypass in MySQL multi-statement execution, so each statement in a multi-statement request is validated correctly under auth.
- 28.4.1 and 28.3.1 fixed replication-cluster recovery edge cases: authenticated cluster restart recovery and startup when a node was left alone in the cluster.
- Distributed queries with remote stored fields now fail on remote `GETFIELD` fetch errors or malformed replies instead of returning apparently successful rows with empty or untrusted stored-field values.
- Interrupted columnar/KNN merge cleanup now removes temporary component files under the tracked temp prefix, preventing orphaned `.tmp.spc.*` files from breaking later table rename, attach, or drop operations.
- DBeaver compatibility improved by accepting simple single-table aliases in `SELECT` queries.
- Connector/J and PyMySQL clients can now complete authenticated native-password login flows, and harmless session `SET` statements no longer fail under auth.
- The built-in Ukrainian lemmatizer now normalizes apostrophe words correctly, so forms such as `здоров'ям` can match `здоров'я` under `lemmatize_uk_all`.
- AOT blended-keyword handling now honors the configured `blend_mode`, restoring separator-stripped variants consistently for indexing and keyword extraction.
- RT auto-optimization no longer compacts a table below two disk chunks unless that lower cutoff is explicitly requested.
- A crash involving `percentiles` aggregations together with terms aggregations in the same `/search` request on multi-chunk RT tables was fixed.
- Long SQL parse errors now preserve UTF-8 character boundaries, so invalid queries containing Cyrillic and other multibyte text no longer produce truncated or corrupted error messages.

For the complete list, see the [changelog](https://manual.manticoresearch.com/Changelog#Version-28.4.4).

---

## Need help or want to connect?

- Join our [Slack](https://slack.manticoresearch.com)
- Visit the [Forum](https://forum.manticoresearch.com)
- Report issues or suggest features on [GitHub](https://github.com/manticoresoftware/manticoresearch/issues)
- Email us at `contact@manticoresearch.com`
