---
question: Does the vector store embed text for me?
kind: overview
---

# Vector search

The vector store keeps embeddings by collection and returns the nearest ones to a query vector. It is the kernel service `services.vector_store`. Modules use it from Python. It does not embed text: you build the vectors with an embedding model and pass them in.

Super admins can browse collections and their vectors in Nexus, under System › Data › Vector store. Similarity search is Python only.

<!-- matrix -->

## Backends

`services.vector_store` in `config.yaml` picks one adapter:

| Adapter | Storage | Used by |
|---|---|---|
| `sqlite_vec` | A SQLite file (`persistence_path`) | `config.yaml` of a new project (`abi dev up`) |
| `qdrant` | A Qdrant server (`host`, `port`) | `config.local.yaml` (Docker stack, port 6333) |
| `qdrant_in_memory` | An in-process Qdrant client (`storage_path`) | The engine default when the block is missing |
| `nats_rpc` | Another engine's vector store, over NATS | Engines that share one store |

The keys of each adapter are in the [Configuration Reference](/user-guide/get-started/configuration#vector-store). On the Docker stack, the Qdrant dashboard is at `http://localhost:6333/dashboard`.

## Key concepts

- **Collection.** A named set of vectors with one dimension and one distance metric. Names are global: the service does not prefix them with the module. Nexus chat uses `chat_<thread_id>` for the files attached to a thread.
- **Document.** One entry: an `id`, a `vector` (a NumPy array), `metadata` (a flat dict you can filter on) and an optional `payload` (any JSON, often the source text).
- **Embeddings.** `self.engine.services.model_registry.get_default_embedding_model().model` is a LangChain `Embeddings`. Store and query with the same model, or the distances mean nothing.
- **Score.** On `qdrant` and `qdrant_in_memory`, `score` is a similarity: higher is closer. On `sqlite_vec`, `score` is the distance: lower is closer.
- **Ids.** `qdrant` passes ids to Qdrant as they are, and Qdrant only accepts UUIDs and unsigned integers. Use UUID strings to stay portable. `qdrant_in_memory` and `sqlite_vec` accept any string.
- **Events.** Writes publish `CollectionEnsured`, `DocumentsAdded`, `DocumentUpdated`, `DocumentsDeleted` and `CollectionDeleted` when the event service is up. A failed publish never fails the write.
- **Dependency.** A module lists `VectorStoreService` in `ModuleDependencies.services`. Without it, `self.engine.services.vector_store` raises `ValueError`.
