What changed in Typesense from 29 to 30
3 releases numbered after v29.1 up to and including v30.2, stable releases only. v29.1 and v30.2 are the newest stable releases of 29 and 30 we track; this page follows them as new ones ship.
35 changes across 3 releases
- Diversify search results using Maximum Marginal Relevance (MMR) to diversify the top 250 hits on a pre-defined similarity metric
- Synonyms are now top-level resources and can be shared between collections
- Curation rules are now top-level resources and can be shared between multiple collections
- Support facet_by for JOINed reference fields
- Fetch related documents count for a document in a joined collection with the include_fields parameter
- Support sorting and limit on joined fields with include_fields parameter
- Support for altering reference fields in the collection schema
- Add cascade_delete: false JOIN parameter for reference fields to override default cascade delete behavior
- Support group_by with Union search
- Support pinned_hits search parameter in Union search
- Support removing duplicates in Union search with remove_duplicates flag
- Add facet_sample_slope search parameter for dynamic facet sampling
- Support binding to and serving requests over IPv6 addresses
- Support copying documents when cloning collections
- Support ! as a standalone negation operator in filters with field:![value] syntax
- Support for Azure OpenAI models in Natural Language Search
- Support for GCP service account authentication in Natural Language Search models
- Support for GCP service account authentication for auto-embedding with GCP models
- Add truncate parameter in collection schema for configurable token truncation on string fields
- Add group_max_candidates search parameter to make found value accurate for group_by queries
- Improved synonym matching logic to rank matches by overall match quality rather than just number of matched tokens
- Fixed incorrect handling of numeric != filters in both lazy and eager filter execution, including explicit not-equals lists on range-indexed numeric fields
- Fixed highlighting to correctly mark single-token phrase matches and to avoid race conditions during union searches that run alongside concurrent writes
- Fixed missing synonyms, stem, and stemming_dictionary fields in curation GET responses
- Fixed a number of edge cases in diversity search
- Fixed union search deduplication so curated pinned hits are no longer collapsed
- Fixed a bug related to reference faceting
- Fixed vector search behavior so zero-match phrase queries still preserve vector search results
- Fixed scoped API key handling so embedded collection parameters can supply a missing collection in multi-search requests
- Fixed conversation search error handling so failed searches do not incorrectly reuse the first search collection
- Fixed search cache keying so scoped API key parameters and request-specific embedded params do not collide in the cache
- Fixed JSON response escaping by using nlohmann::json::dump() when serializing response payloads
- Fixed /health responsiveness during heavy bulk inserts by routing health checks to the meta thread pool
- Fixed HTTP/2 async import teardown on early exit
- Fixed search latency metric in the stats.json endpoint that was overflowing
Original release notes, newest first
The list above is our reading of these notes; the originals from Typesense are here, one fold per release.
v30.2Version 30.2
This release fixes some important bugs identified in v30.1.
Bug Fixes
- [v30.2] Fixed incorrect handling of numeric
!=filters in both lazy and eager filter execution, including explicit not-equals lists on range-indexed numeric fields. - [v30.2] Fixed highlighting to correctly mark single-token phrase matches and to avoid race conditions during union searches that run alongside concurrent writes.
- [v30.2] Fixed missing
synonyms,stem, andstemming_dictionaryfields in curation GET responses. - [v30.2] Fixed a number of edge cases in diversity search.
- [v30.2] Fixed union search deduplication so curated pinned hits are no longer collapsed.
- [v30.2] Fixed a bug related to reference faceting.
- [v30.2] Fixed vector search behavior so zero-match phrase queries still preserve vector search results.
- [v30.2] Fixed scoped API key handling so embedded collection parameters can supply a missing collection in multi-search requests.
- [v30.2] Fixed conversation search error handling so failed searches do not incorrectly reuse the first search collection.
- [v30.2] Fixed search cache keying so scoped API key parameters and request-specific embedded params do not collide in the cache.
- [v30.2] Fixed JSON response escaping by using
nlohmann::json::dump()when serializing response payloads. - [v30.2] Fixed
/healthresponsiveness during heavy bulk inserts by routing health checks to the meta thread pool. - [v30.2] Fixed HTTP/2 async import teardown on early exit.
v30.1Version 30.1
Bug fixes
- [New in 30.1]: This release contains a bug fix that caused the search latency metric in the
stats.jsonendpoint to overflow
v30.0Version 30.0
This release contains new features, enhancements, performance improvements, bug fixes and important API changes for synonyms, curation rules and analytics rules.
New Features
- Diversify Search Results: Using Maximum Marginal Relevance (MMR), you can now diversify the top 250 hits on a pre-defined similarity metric. (Docs)
- Global Synonyms: Synonyms are now top-level resources, and can be shared between collections. (Docs)
- Global Curation Rules: Curations are also top-level resources now, and can be shared between multiple collections. (Docs)
- New features in JOINs:
facet_bynow supports JOINed reference fields. (Docs)- Fetch related docs count for a document in a joined collection with the
include_fieldsparam. (Docs) - Support sorting and limit on joined fields with
include_fieldsparameter. (Docs) - Support for altering reference fields in the collection schema.
- New
cascade_delete: falseJOIN parameter for areferencefield, to override the default behavior of document being cascade deleted in case all the documents it references are deleted. Requiresasync_referenceparameter to betrue. (Docs)
- New features in Union Search:
- Facet Sampling: Make facet sampling dynamic using the new
facet_sample_slopesearch parameter. (Docs) - IPv6 Support: Typesense now supports binding to and serving requests over IPv6 addresses, enabling seamless integration and connectivity in modern IPv6-only or dual-stack networks.
Enhancements
- Support for (optionally) copying documents when cloning collections. (Docs)
- Support for
!as a standalone negation operator in filters, allowingfield:![value]syntax as an alternative tofield:!=[value]. - Support for Azure OpenAI models in Natural Language Search. (Docs)
- Support for GCP service account authentication in Natural Language Search models. (Docs)
- Support for GCP service account authentication for auto-embedding with GCP models. (Docs)
- Configurable token truncation for string fields to improve exact match filtering on long strings, using the new
truncateparameter in the collection schema. (Docs) - Return an error message when a field is declared that references another field of the same collection.
- New
group_max_candidatessearch parameter which overrides the behavior ofgroup_byqueries introduced in v29.0 wherefoundvalue is an approximation. Whengroup_max_candidatesis passed,foundwill be accurate up until its value. (Docs) - Allow non-indexed nested fields to still be marked as required.
- Improved synonym matching logic: Previously, synonym matches with a higher number of tokens (query/synonym) would be ranked higher. Now, matches are ranked by how well they match the query/synonyms overall, not just by the number of matched tokens.
- Use Transliterator objects pool to enhance tokenization performance of Cyrillic and Chinese languages.
- Support for dynamic
facet_return_parentfields. (Docs) - Support for sending an empty array to avoid embedding generation for an optional auto embedding field when indexing a document.
- Highlight the actual search query when augmenting the search query with Natural Language search.
- Enhance image embedding models support by adding CLIP Multilingual Model support.
- Support for synonym matching in curations. (Docs)
- Support stemming with curations. (Docs)
Bug Fixes
- Fix parsing of
_eval()expressions when backticks are used to wrap strings containing parentheses. - Ensure unique analytics IDs are generated when queries differ by
filter_byoranalytics_tagmetadata to prevent aggregation issues. - Fix search highlighting to use field-specific token separators instead of collection-level ones for consistent behavior.
- Return
201status code when creating conversational models, personalization models, or natural language search models to follow REST conventions. - Fix custom OpenAI-compatible endpoint URLs not being used for auto-embedding.
- Fix schema updates with embedding fields incorrectly requiring
api_keyvalidation for local models. - Fix console logging to output info messages to stdout and warnings/errors to stderr instead of all to stderr.
- Fix phrase query highlighting to highlight only exact phrase matches instead of every individual keyword occurrence.
- Set user agent when initializing HTTP client for external API calls.
- Fix hyphen handling in negation searches to only apply special treatment when token starts with
-. - Fix query sub-tokenization to respect field-level
symbols_to_indexandtoken_separatorsconfiguration. - Fix union search pagination bug where global pagination parameters were not passed to individual queries.
- Fix missing groups in case of high cardinality fields.
- Fix various deadlock scenarios related to async reference fields.
- Fix an edge case in
group_byquery along withinfixsearch. - Fix non-deterministic bucketing order when combining
group_bywith text match score bucketing, ensuring stable group pagination. - Support
id:![...]negation syntax for id filters. - Fix remote embedder cache key handling for matryoshka models with different
num_dimvalues to prevent dimension mismatches. - Fix nested array highlights to respect
highlight_affix_num_tokensfor single-token matches. - Fix phrase highlighting in nested array fields to return all matching snippets.
- Fix a crash while searching when updates are happening in parallel.
- Fixed the override matching for wildcard queries, dynamic filter, dynamic sort, and placeholders.
- Fix sort using
_eval()foridfields. - Fix missing vector distance in results when doing hybrid search with union search.
- Fix missing results when querying a stemmed field with
drop_tokens_thresholdset. - Fix an edge case where field name can be empty.
- Fix synonym resolution when
synonym_prefixis disabled. - Fix allowing the addition of the same field multiple times when altering the collection.
- Fix an edge case that enables using resolved synonyms as prefixes when prefix search is enabled.
- Fix adding the field to schema despite an error, when sorting is enabled for a field that has
autoas its type. - Fix
max_bytesparameters usage for the OpenAI's o-series and GPT-5 models. - Prevent usage of
temperatureparameter for the o-series and GPT-5 models since it is not supported. - Fix curation rule matching when doing semantic search with embedding generation.
- Fix rocksdb params assignment
- Fix missing joined collection fields in pinned hits
- Fix blocking indexing while generating embeddings.
- Fix issues of using outdated schemas when altering operations is ongoing while indexing documents.
- Fix curations with rerank_hybrid_matches
- Fix uninitialized analytics manager crash
- Validate that curation rules with
matchalso includequery, returning400otherwise. - Fix dropping nested object fields to only remove dot-delimited children, preserving similarly-prefixed top-level fields.
- Fix conversation and natural language search model updates when the model ID changes, returning
409on ID conflicts.
Deprecations / behavior changes
- Synonyms are no longer nested under Collections. We now have a top-level resource called a "Synonym Set" which is a list of synonyms that can be attached to one or more collections, or can be dynamically sent as a search parameter. Existing synonyms will be auto-migrated to synonym sets automatically on upgrading. (Docs)
- Overrides (aka Curation Rules) are no longer nested under Collections. Similar to synonym sets, we now have a top-level resource called a "Curation Set" that can be attached to one or more collections, or can be dynamically sent as a search parameter. Existing overrides will be auto-migrated to curation sets automatically on upgrading. The
override_tagsparameter has also been renamed tocuration_tags. (Docs) - The structure of Analytics Rules has changed. Old rules will be automatically migrated to the new structure internally. Read more here. (Docs)
- The export endpoint doesn't stop streaming the response if an error is encountered while loading a document from disk. The error is logged and is also returned in the response stream.
- Collections having references to each other are not allowed. If mutual reference is detected, the reference field will not be indexed.
Upgrading
Before upgrading your existing Typesense cluster to v30.0, please review the behavior changes above to prepare your application for the upgrade.
Please make sure to update your client libraries to the latest version, review the specific documentation links provided above and make any required changes to your code base if you programmatically create these resources using the API, before upgrading to this version.
We'd recommend testing on your development / staging environments before upgrading.
Typesense Cloud
If you're on Typesense Cloud:
- Go to https://cloud.typesense.org/clusters.
- Click on your cluster
- Click on "Cluster Configuration" on the left-side pane, and then click on "Modify"
- Select a new Typesense Server version in the dropdown
- Schedule a time for the upgrade.
Self Hosted
If you're self-hosting Typesense, here are instructions on how to upgrade: Docs
⚠️ IMPORTANT: When self-hosting, please initiate a snapshot before upgrading, for the Synonyms & Overrides to be migrated to v30.
Downgrading
If you use synonyms, overrides (curation rules) or analytics rules in previous versions of Typesense, we will auto-migrate them to the new resources (Synonym Sets, Curation Sets and the new format for analytics rules) on upgrading. However, if you make any changes to these resources, and then downgrade later, those changes will NOT be ported back to the old version after downgrade.
Besides the above caveat, you can downgrade to any version above v27.
Documentation
View the complete API documentation for this release here: https://typesense.org/docs/30.0/api/