Gabriel39 opened a new issue, #68625:
URL: https://github.com/apache/doris/issues/68625

   ## Background
   
   Follow-up to #66491 and #68453; tracked by the Lance roadmap #66340.
   
   Lance catalog scans support explicit versions, timestamps, tags, and 
branches. `vector_search()` and `full_text_search()` currently accept only a 
fully qualified table name and resolve the latest version of the main chain 
during planning. They pin that version for execution, but callers cannot choose 
a historical or branch snapshot.
   
   This prevents reproducible searches against a released tag, comparisons 
between historical snapshots, and searches against an experimental branch.
   
   ## Scope
   
   - [ ] Support explicit versions, timestamps, tags, and branches in both 
search TVFs, for filesystem and REST catalogs, including namespace-managed 
versions within the supported catalog read contract.
   - [ ] Resolve the selector through the existing `LanceRefSelector` and 
catalog snapshot resolver.
   - [ ] Bind the output schema, search column and field ID, vector 
type/dimension, fragments, and index metadata to the selected snapshot.
   - [ ] Keep candidate generation, filtering, Top-K, and two-phase 
materialization on the same resolved dataset URI and version.
   - [ ] Preserve existing behavior when no selector is supplied: select and 
pin the latest main version for that execution.
   
   ## Proposed interface
   
   Add optional `version`, `timestamp`, `tag`, and `branch` properties to both 
TVFs. Keep `table` as the fully qualified catalog/database/table name.
   
   - `version`: a positive integer; mutually exclusive with `timestamp` and 
`tag`.
   - `timestamp`: parsed in the session time zone with the same semantics as 
catalog time travel; mutually exclusive with `version` and `tag`.
   - `tag`: mutually exclusive with all other selectors; the tag determines its 
branch and version.
   - `branch`: may be used alone or with `version` or `timestamp`.
   
   Proposed syntax, not currently supported:
   
   ```sql
   SELECT * FROM vector_search(
       "table" = "lance_catalog.db.documents",
       "version" = "3",
       "column" = "embedding",
       "query_vector" = "[0.1, 0.2, 0.3]",
       "top_k" = "10"
   );
   
   SELECT * FROM full_text_search(
       "table" = "lance_catalog.db.documents",
       "branch" = "dev",
       "timestamp" = "2026-09-20 12:00:00",
       "column" = "content",
       "query" = "database"
   );
   ```
   
   ## Execution semantics
   
   - Resolve each search relation's snapshot before binding its schema and 
planning index coverage. Do not combine the latest schema or indexes with 
historical data.
   - Vector search retains its existing flat-scan fallback where applicable, 
using only the selected snapshot's data.
   - Full-text search requires an appropriate committed FTS index in the 
selected snapshot. Apply existing `strict` / `index_only` coverage semantics to 
that snapshot; do not borrow a newer index or silently switch versions.
   - Missing, expired, or inaccessible snapshots and missing required 
historical index files must produce clear errors, with no fallback to latest.
   - Resolve moving selectors for each new execution, including prepared 
statements and cached plans; retain the resolved snapshot throughout that 
execution.
   - Expose the resolved version and branch in EXPLAIN.
   
   ## Implementation direction
   
   Extend the shared search TVF parameter parser and selector-aware overloads 
of `loadMetadataForSearch()` / `loadBasicMetadata()`. Reuse catalog snapshot 
resolution and the existing fixed-URI/version BE search path. Audit 
index-segment planning and two-phase reads for any reopening of latest. 
Determine any necessary BE changes from this audit rather than assuming that 
accepting the parameters alone completes support.
   
   ## Acceptance criteria
   
   - [ ] Both TVFs support every valid selector combination and reject 
conflicts and invalid inputs.
   - [ ] Tests cover versions before index creation, partially indexed appends, 
deletions, index rebuilds, schema changes, and branches whose version numbers 
overlap main while their data and indexes differ.
   - [ ] Planning followed by a new commit or tag movement cannot change the 
snapshot used by candidate generation or materialization.
   - [ ] Prepared statements and plan reuse preserve the documented 
per-execution behavior.
   - [ ] Filesystem and REST-managed regression tests verify actual rows and 
search results, including two-phase reads, not only metadata or EXPLAIN.
   - [ ] Documentation covers syntax, selector combinations, historical index 
behavior, and cleanup-related errors.
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to