This section documents search capabilities in Spice SQL, including vector search, full-text search, and lexical filtering methods. These features help retrieve relevant data using semantic similarity, keyword matching, and pattern-based filtering.
vector_search)
text_search)
rrf)
vector_search)Vector search retrieves records by semantic similarity using embeddings. It is ideal for finding related content even when exact keywords differ.
table: Dataset name (required)query: Search text (required)col: Column name (optional if only one embedding column)limit: Maximum results (optional, default: 1000)include_score: Include relevance scores (optional, default TRUE)rank_weight: Result rank weight (optional, named argument, default score * 1, only when specified as an argument in RRF)By default, vector_search retrieves up to 1000 results. To change this, specify a limit parameter in the function call.
See Vector-Based Search for configuration and advanced usage.
text_search)Full-text search uses BM25 scoring to retrieve records matching keywords in indexed columns.
table: Dataset name (required)query: Keyword or phrase (required)col: Column to search (required if multiple indexed columns)limit: Maximum results (optional, default: 1000)include_score: Include relevance scores (optional, default TRUE)rank_weight: Result rank weight (optional, named argument, default score * 1, only when specified as an argument in RRF)By default, text_search retrieves up to 1000 results. To change this, specify a limit parameter in the function call.
See Full-Text Search for configuration and details.
rrf)Reciprocal Rank Fusion (RRF) combines results from multiple search queries to improve relevance by merging rankings from different search methods. Advanced features include per-query ranking weights, recency boosting, and flexible decay functions.
rrf is variadic and takes two or more search UDTF calls as arguments. Named parameters provide advanced control over ranking, recency, and fusion behavior.
:::info
The rrf function automatically adds a fused_score column to the result set, which contains the combined relevance score from all input search queries. Results are sorted by fused_score DESC by default when no explicit ORDER BY clause is specified.
:::
Arguments:
Note that rank_weight is specified as the last argument to either a text_search or vector_search UDTF call (as shown above). All other arguments can be specified in any order after the search calls (within an rrf invocation).
| Parameter | Type | Required | Description |
|---|---|---|---|
query_1 | Search UDTF call | Yes | First search query (e.g., vector_search, text_search) |
query_2 | Search UDTF call | Yes | Second search query |
... | Search UDTF call | No | Additional search queries (variadic) |
join_key | String | No | Column name to use for joining results (default: auto-hash) |
k | Float | No | Smoothing parameter for RRF scoring (default: 60.0) |
time_column | String | No | Column name containing timestamps for recency boosting |
recency_decay | String | No | Decay function: 'linear' or 'exponential' (default: 'exponential') |
decay_constant | Float | No | Decay rate for exponential decay (default: 0.01) |
decay_scale_secs | Float | No | Time scale in seconds for decay (default: 86400) |
Basic Hybrid Search:
Weighted Ranking:
Recency-Boosted Search:
Linear Decay:
How RRF works:
RRF Score = Σ(rank_weight / (k + rank))k parameter controls ranking sensitivity (lower = more sensitive to rank position)Advanced query tuning:
rank_weight parametertime_column is specified, scores are multiplied by a decay factor
e^(-decay_constant * age_in_units) where age is in decay_scale_secsmax(0, 1 - (age_in_units / decay_window_secs))join_key is specified, rows are automatically hashed for joiningSpice SQL supports traditional filtering for exact and pattern-based matches:
% matches any sequence of characters._ matches a single character.Returns rows where the column exactly matches the value.
Spice SQL does not support the ~ or !~ operators for regular expression matching. Instead, use scalar functions such as regexp_like, regexp_match, and regexp_replace for regex-based filtering. For details and examples, see the Scalar Functions documentation.
For more on hybrid and advanced search, see Search Functionality and Vector-Based Search
decay_window_secs | Float | No | Window size for linear decay in seconds (default: 86400) |
rank_weight | Float | No | Per-query ranking weight (specified within search functions) |