Changelog¶
All notable changes to this project will be documented in this file.
The format follows Keep a Changelog and this project adheres to Semantic Versioning.
[0.3.0] - 2026-06-17¶
Added¶
- Full-text search (BM25) is now first-class -- the sparse leg of hybrid retrieval. Define a
DEFINE ANALYZERin code withAnalyzer(name, opts...)/StandardAnalyzer(name, opts...)(AnalyzerDefinition+Tokenizer+TokenFilter, rendered viaGenerateAnalyzerSQL/GenerateAnalyzerSQLIfNotExists); build a BM25-scored full-text index withBM25Index(name, columns, analyzer)(orSearchIndex(...).WithAnalyzer(...).WithBM25().WithHighlights()); and run the lexical query withQuery.FullTextSearch(field, reference, query)+Query.SearchScore(reference, alias), or theFullTextSearchQuery(...)helper.GenerateSchemaSQLFromSlicesWithAnalyzersemits analyzer DDL before the tables that reference it. Pair it withQuery.VectorSearchand fuse the two result orders by rank (Reciprocal Rank Fusion).
Fixed¶
- Full-text index now emits the SurrealDB 3.x
FULLTEXTkeyword. The full-text index keyword was renamed fromSEARCHtoFULLTEXTin SurrealDB 3.0, so the previous output (... SEARCH ANALYZER ascii) was a parse error on v3.IndexTypeSearch/SearchIndex/IndexDefinition.ToSurql*and the migration diff now emitFULLTEXT, and theINFO FOR TABLEindex parser recognises both spellings (and extracts the analyzer / BM25 / HIGHLIGHTS clauses). Seedocs/v3-patterns.md"Full-text search (BM25)" -- including the note that the v3 streaming executor's full-text scan returns rows in BM25 relevance order butsearch::scoreis not plumbed through it (returns 0), so rank by the scan's natural order.