Say this first: The sync job. Delta Sync tracks the source Delta table through change data feed and updates the index as rows are inserted, changed, and deleted.
Remember these
- Delta Sync updates the index from the source table's change data feed
- Inserts, updates, and deletes propagate without a job you maintain
- Queries combine vector similarity with keyword filters
- The index is a Unity Catalog object with its own grants
Why: A self-managed index is correct until the table changes, and then freshness is a pipeline you operate: detect changes, embed them, upsert them, and delete the ones that disappeared. In Delta Sync mode the index is defined on a Delta table column, Databricks can compute the embeddings, and change data feed drives incremental updates. Querying the index is a mix of vector similarity and keyword filters, so you can restrict by tenant or date as well as by meaning. The index is a Unity Catalog object, so grants decide who can query it. You can still supply your own vectors if you have an embedding model you do not want replaced. What you give up is control of the index internals.
CREATE VECTOR SEARCH INDEX support.ticket_index
ON support.tickets (ticket_id)
WITH (embedding_column => comment, sync_mode => 'CONTINUOUS')
Senior depth: The change is captured by change data feed, re-embedded, and upserted into the index. Until that sync completes, queries see the previous vector. Sync lag is the failure mode to monitor, not a missing cron.
Common mistake: Keeping a separate embedding job 'so we control it' and then debugging staleness every week.
Follow-up they will ask: A row is updated in the source table. What has to happen before a query sees the new text?