Product
What Bolt Search does.
A hosted full-text search service. Send documents over a REST API or sync them from PostgreSQL, search them with an Elasticsearch-compatible API, and manage it all from a web console.
Indexes and field mappings
- What it does
- An index is a collection of documents with a schema. You declare each field’s type when you create the index, and set optional stored, indexed and fast flags.
- How you use it
PUT /v1/{index}with amappingsobject, or Create Index in the web console. Without mappings, a PostgreSQL sync job creates the index and infers the types. Mappings cannot be changed afterwards: to change them, create a new index and reindex.- What you see
GET /v1/{index}returns the mappings and the document count, andGET /v1/{index}/_mappingreturns the mappings alone. The console’s Indices page lists each index with its health and document count.
| Type | Aliases | How it is stored and searched | Typical use |
|---|---|---|---|
text | — | Full-text search with BM25 scoring (tokenized). | Titles, descriptions, article bodies |
keyword | string | Exact match and aggregations; not tokenized. Set "fast": true to aggregate. | Categories, tags, status codes |
integer | long, i64 | 64-bit signed integer. | Counts, years, quantities |
float | double, f64 | 64-bit floating point. | Prices, ratings |
boolean | bool | True or false; range queries work on it too. | Flags such as in_stock |
date | datetime | RFC 3339 timestamp, for example 2026-01-15T10:30:00Z. | Created and updated times |
Documents and bulk indexing
- What it does
- Store JSON documents under an id of your choice. Indexing an existing id replaces the whole document; there is no partial update, so send the complete document each time.
- How you use it
PUT /v1/{index}/_doc/{id}for one document;POST /v1/_bulkwith NDJSON for many index and delete actions at once;POST /v1/{index}/_delete_by_queryto remove everything that matches a query.- What you see
- Index responses carry
resultand_version. A bulk response lists the status of every action and anerrorsflag.
{"index":{"_index":"movies","_id":"1"}}
{"title":"The Matrix","year":1999,"genre":"sci-fi"}
{"delete":{"_index":"movies","_id":"3"}}Search and the query language
- What it does
- Full-text search with BM25 scoring, exact filters, boolean combinations and ranges, plus sorting, pagination and aggregations. It is a subset of the Elasticsearch query language: match_all, match, term, bool and range, with terms, metric and range aggregations.
- How you use it
POST /v1/{index}/_searchwith a JSON body. Search several indexes at once by naming up to 20, separated by commas._countand scroll are available too.- What you see
- Hits with
_scoreand_source, the total hit count, and anaggregationsobject keyed by the names you chose.
Every clause with an example is in the query reference.
PostgreSQL sync
- What it does
- Keeps an index in step with a PostgreSQL table, or with a SELECT you write. A job polls for rows past a saved cursor and indexes them. A scheduled full resync can rebuild the index and swap it in.
- How you use it
- Connect a database from Connections: paste a postgres:// URL, pick tables, and the console suggests the id and cursor columns and creates the syncs. Nothing is installed in your database; the job only runs
SELECTstatements. - What you see
- Each sync’s page shows its status, last cursor, documents synced, error count, live log and resync history.
public.articles → articles
- Total synced
- 12,500
- Last cursor
- 2026-01-01T00:00:00Z
- Errors
- 0
07:00:01 [info] polled public.articles, batch of 1000 rows
07:00:01 [info] bulk indexed 1000 documents into articles
07:00:02 [info] full batch returned, polling again
07:00:03 [info] cursor saved
Sample job. How change tracking works.
Web console
- What it does
- Everything above from a browser: indexes, documents, connections, syncs, analytics, API keys, webhooks, members, allowed origins and billing, for the project you pick in the project switcher.
- How you use it
- Sign in to the app. The sidebar has Overview; Data: Indices and Connections; Search: Explorer and Analytics; Developers: API keys and Webhooks; and Project: Settings, where Billing is a tab. You can choose a light, dark or system theme.
- What you see
- The screens below show sample data.
- Create
- A name and optional field mappings. Without mappings, a sync job creates the index.
- List
- Name, health and document count.
- Types
- text, keyword, integer, float, boolean, date.
- Input
- Plain text or a JSON query clause such as
{"match":{"title":"hello"}}, not a full request body. - Blank
match_all: browse every document.- Columns
- ID, Score and Source, plus how many results and how long the search took.
- Metering
- Every search is a query attempt that uses credits, including one with no results.
- Connect
- Paste a postgres:// URL or fill in the fields; the connection is tested before it is saved.
- Tables
- Pick tables; each gets a suggested index name, id column and cursor column.
- Passwords
- Never returned by the API.
public.articles → articles
- Total synced
- 12,500
- Last cursor
- 2026-01-01T00:00:00Z
- Errors
- 0
07:00:01 [info] polled public.articles, batch of 1000 rows
07:00:01 [info] bulk indexed 1000 documents into articles
07:00:02 [info] full batch returned, polling again
07:00:03 [info] cursor saved
- Actions
- Start, stop, reset cursor and full resync.
- Live log
- Each sync’s page shows its log as it runs.
- Resyncs
- History of each full resync with its outcome.
- Scope
- One index and a time range: 24 hours, 7 days or 30 days.
- Tabs
- Top Queries, Zero Results and Low CTR.
- API keys
- One project and a role, editor or viewer. The full key is shown once; the list shows prefixes.
- Settings
- General, Members, Allowed origins and Billing tabs.
Projects, API keys and roles
- What it does
- A project is the unit of isolation: its own indexes, data sources, sync jobs, members, API keys and credit balance. Signing up creates your account and a project you own.
- How you use it
- Create keys in Settings, API Keys: give the key a name and a role, editor or viewer, and copy it when it is shown, because it is shown only once. Settings also has Members and Allowed Origins, which controls which websites may call the project from a browser.
- What you see
- Keys are listed by prefix, such as
bsk_a1b2c3, with their role and status. A revoked key stops working at once.
| What it allows | viewer | editor | owner |
|---|---|---|---|
| Search, get documents and indexes, list indexes | Yes | Yes | Yes |
| View data sources and sync jobs | Yes | Yes | Yes |
| Index and delete documents, create and delete indexes, bulk | — | Yes | Yes |
| Manage data sources and sync jobs | — | Yes | Yes |
| Manage project members, API keys and settings | — | — | Yes |
Search analytics
- What it does
- Shows what people search for in an index: the most frequent queries, the queries that returned nothing, and the queries with a low click-through rate.
- How you use it
- Open Analytics in the console, choose an index and a range of 24 hours, 7 days or 30 days. The same data is available as
GET /v1/{index}/_analytics/…. Report a click withPOST /v1/{index}/_trackto feed click-through rates. - What you see
- Three tabs: Top Queries, Zero Results and Low CTR. Each search records its text, result count and latency. See Security for how long this data is kept.
Usage and credits
- What it does
- You pay for what you search. Authorized search, count and scroll requests are metered at 10 attempts per credit, and an _msearch request counts one attempt per contained search; writes, indexing, PostgreSQL sync and analytics are free. Credits are prepaid, in packs, and never expire.
- How you use it
- Open Billing in the project, see the available credits and the month’s usage, and buy a pack. The pricing page has an estimator.
- What you see
- A project with no credits gets HTTP 402 on metered requests until you add credits. The TypeScript SDK raises it as a
BoltSearchErrorwithstatusCode402.
Create a project, make an API key and send your first search.