# FAQ

## The basics

**What is WarpSearch?**
A serverless search service for full-text, vector and hybrid search over JSON documents, with
facets and analytics. There is no cluster to size or operate. Start with the
[Quickstart](quickstart.md) or [Concepts](concepts.md).

**How is it different from Elasticsearch, OpenSearch or Solr?**
You do not run or tune anything: no nodes, shards or replicas, and nothing billed for compute
while you are not querying. It also speaks their query languages, so you can keep your clients.
See [Migrate](migrate-from-elasticsearch-opensearch-solr.md).

**Can I keep my existing client?**
Usually yes. Elasticsearch, OpenSearch and Solr clients work against the compatible endpoints,
and each page lists what is and is not supported: [Elasticsearch](compat-elasticsearch.md),
[OpenSearch](compat-opensearch.md), [Solr](compat-solr.md).

**Which query languages can I use?**
SQL, Elasticsearch/OpenSearch Query DSL, Lucene, Solr, LogQL, Grafana and the native language.
See [Query languages](query-languages.md).

## Vectors and hybrid search

**Do I need to run embeddings?**
You compute the embeddings and send the vectors. WarpSearch does not generate them for you today.
Use the same model for documents and queries. See [Vector search](vector-search.md).

**Which embedding models and dimensions work?**
Any model, since you supply the vectors. The only requirement is that every vector in a field has
the dimension you declared. Fields support up to 8192 dimensions.

**Does it support Matryoshka embeddings?**
Yes. You can search with fewer dimensions and rescore at full precision. See
[Matryoshka and dimensions](matryoshka-and-dimensions.md).

**Can a document have several vectors?**
Yes, with multi-vector fields. See [Multi-vector fields](multi-vector-fields.md).

> **Coming soon:** late-interaction (MaxSim) scoring, sparse vectors and float16 or int8 vector
> storage are in development.

**Can I combine keyword and vector search?**
Yes. Send a text query and a vector search in one request and the scores are combined. See
[Hybrid search](hybrid-search.md).

**Can I filter while doing a vector search?**
Yes. Filters are applied inside the vector search, so you still get the number of results you
asked for. See [Vector search](vector-search.md).

**Is it HNSW?**
No. Vectors use an inverted-file (IVF) index with compact quantized codes (RaBitQ or product
quantization). The index is memory-mapped, and the best candidates are rescored at full
precision.

**How good is recall?**
You control the trade-off with the number of candidates and the search effort, and you can run an
exact search to measure recall against ground truth. See [Vector search](vector-search.md).

## Writing and reading data

**Are writes searchable immediately?**
After a commit. Writes become searchable within seconds on their own, or pass `commit=true` on
the ingest request to wait for it. See [Consistency and durability](consistency-and-durability.md).

**How do updates and deletes work?**
Indexing a document with an existing id replaces it. You can delete by id, one at a time or in
batches. See [Ingesting documents](ingesting-documents.md).

**Can I update part of a document?**
Not through the native API: send the whole document again. The Elasticsearch-compatible bulk
endpoint accepts updates with upsert; see [Elasticsearch compatibility](compat-elasticsearch.md).

**Can I delete by query?**
No. Look up the ids you want to remove with a search, then delete them by id.

> **Not supported:** delete by query.

**How do I page through results?**
With `limit` and `offset`, up to the result window of your plan. There are no cursors or scroll
yet. See [Searching](searching.md) and [Limits and errors](limits-and-errors.md).

**Can I export all my data?**
There is no bulk export endpoint today. Keep the source of truth in your own system, and page
through results within the result window for smaller extracts.

**Is there highlighting?**
> **Coming soon:** highlighting is in development.

## Logs, dashboards and agents

**Can I use it for logs?**
Yes, as documents in a collection, queried with SQL, Lucene or the Elasticsearch DSL. LogQL label
selectors work too, but LogQL line filters and metric queries need a collection with a configured
message and time field, which you cannot set yourself yet. See
[Loki and LogQL](compat-loki-logql.md).

**Does it work with Grafana?**
Yes, through Grafana's Elasticsearch or OpenSearch data source. The Loki data source is not
supported, because WarpSearch does not serve the Loki HTTP API. See [Query languages](query-languages.md).

**Can an AI agent use it?**
Yes. WarpSearch has an MCP server that can also sign your user up and get an API key with their
approval. See the [Guide for AI agents](agents.md).

## Operations and security

**What happens to idle collections?**
A collection nobody has used for a while is put to sleep, and its data stays safe. The first
request afterwards may wait while it wakes, and can answer `503` with a `Retry-After` header; retry
after that long. Keep-warm avoids this; see [Pricing and cost control](pricing.md).

**Where does my data live and is it durable?**
Your data is kept in durable object storage, with snapshots taken after commits. See
[Consistency and durability](consistency-and-durability.md).

**Is my data isolated from other customers?**
Yes. Every request is tied to your account, and a key can only reach the collections it holds a
role on. Collections you cannot access look like collections that do not exist.

**How do API keys and roles work?**
Keys (`ws_live_...`) carry the role of the person or agent that created them: viewer searches,
editor also writes, admin also manages collections. See [Access control](access-control.md).

**What are the limits?**
Limits cover request size, hits per call, facets, query complexity and rate. Your plan sets them.
See [Limits and errors](limits-and-errors.md).

## Pricing

**How much does it cost?**
You pay for storage, writes, requests and returned data. There is a permanent free tier. See
[Pricing and cost control](pricing.md) and the [pricing page](/pricing).
