dodil data vsearch
Vector KNN search over a table’s vector column, executed on the tables data plane through the typed TablesVector.QueryVectors gRPC facet — not over the Qdrant wire. Alias: dodil data knn.
A “collection” in tabled is a table with a vector column, so this command wants a table and a column, not a collection id:
dodil data vsearch -b BUCKET -t TABLE --column COLUMN \
(--vector "0.12,0.03,…" | --text "some query") [--metric M] [--top-k N]| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--bucket | -b | string | — | Required. Bucket to search in (it is also the plane’s db id) |
--table | -t | string | — | Required. Table holding the vector column |
--collection | — | string | — | Alias for --table. There is no -c shorthand. |
--column | — | string | — | Required. The vector column to search |
--vector | — | string | — | Query vector as comma-separated floats |
--text | — | string | — | Query text, embedded client-side via Ignite Models before the KNN |
--model | — | string | arctic-embed-m-v2 | Embedding model for --text — must match the model that embedded the table |
--metric | — | string | cosine | cosine · euclidean · dot (aliases: cos, l2, euclid, ip, dot_product, inner) |
--top-k | — | int | 10 | Number of results |
--include-values | — | bool | false | Also return each match’s stored embedding |
Exactly one of --vector or --text is required; with neither, the command errors. --metric is mandatory on the wire — the plane rejects METRIC_UNSPECIFIED — so the CLI always sends one, defaulting to cosine.
--textneeds the unifieddodilCLI. It embeds through Ignite Models via an injected hook; the standalonedatak3binary leaves that hook unset and--texterrors with “embed yourself and pass--vector”.
Search
dodil data vsearch
# By text — one Ignite embed call, then the KNN
dodil data vsearch -b kb-prod -t chunks --column embedding \
--text "refund policy" --top-k 10
# By vector — you already have the floats
dodil data vsearch -b kb-prod -t chunks --column embedding \
--vector "0.12,0.03,…" --metric cosine --top-k 10Output
Table output is id · score rows plus a hit count. -o json returns the CLI’s own envelope — not a Qdrant-wire response, and no payloads:
{
"matches": [
{"id": "chunk-41", "score": 0.1832},
{"id": "chunk-07", "score": 0.2114}
],
"count": 2
}With --include-values, each match also carries "values": [...].
scoreis a distance, not a similarity — lower is closer.VectorMatch.scoreondodil.tables.v1is the raw metric distance (dodil-tables/proto/api/tables.proto:1104-1112). Don’t compare it against the RRF fusion scores thatPOST /:bucket/search/vectorreturns.
For payloads and metadata filters, use a stock Qdrant or Pinecone client — see Connect & wire adapters. The console’s Connect panel generates ready-to-paste snippets per language.
Text search with server-side embedding
vsearch --text embeds client-side — pure KNN semantics, no hybrid, no rerank. For server-side embedding over pipeline-mode collections (and the cross-group RRF merge), use the HTTP route instead:
curl -sS -X POST "https://api.data.dodil.io/kb-prod/search/vector" \
-H "Authorization: Bearer $DODIL_TOKEN" \
-H "Content-Type: application/json" \
-d '{"text": "refund policy", "collectionNames": ["docs"], "topK": 10}'Collection lifecycle
Creating, listing, and deleting collections stays on the control plane — and all three key off the pipeline id:
dodil data vector collection list -b kb-prod
dodil data vector collection add my-texts -b kb-prod -t text_embedding_index
dodil data vector collection delete <pipeline-id> -b kb-prodSee also
- Vector → Core Concepts — the SQL vector data model, metrics, and dispatch
- API Reference → Search — the managed
POST /:bucket/search/vectorroute - Connect & wire adapters — Qdrant / Pinecone / Postgres endpoints + credentials
- Vector → Wire Compatibility — the Qdrant / Pinecone adapter surface