---
title: Search
description: A SearchIndex is one customer lexical and vector index of JSON documents, with its own engine, credentials, backup, region and deletion.
type: tutorial
product: search
summary: What a SearchIndex is, how vectors fit, and where documents and queries are served.
updated: 2026-09-28
order: 0
---

A SearchIndex is one customer lexical and vector index of JSON documents. It
is not a namespace inside a shared service: every index has its own engine, its
own credentials, its own backup, its own region and its own deletion, so
nothing you index can be read from anyone else's.

An index is managed for you the way the rest of Data is: you create it, read
it and delete it as a Resource, and its spec is small — how vectors fit, its
region, and whether a delete is protected.

## Two ways to match, one index

`vector_dimensions` decides what a query can be:

- **0** — lexical only. You write JSON documents, a query is text, and the
  index matches the words.
- **A positive dimension** — the lexical index plus cosine queries. You write
  an embedding with each document, and a query can carry an embedding of its
  own, or text, or both.

Data never invents embeddings. The `vector` you write is the vector that is
searched, and its length is the index's `vector_dimensions`.

<PropertyTable
	properties={[
		{
			name: 'vector_dimensions',
			type: 'int32',
			description: 'The vector dimension; 0 for lexical only.',
		},
		{
			name: 'region',
			type: 'string',
			description: 'The region; default the project’s home region. Changing it moves the data by signed export and import.',
		},
		{
			name: 'deletion_protection',
			type: 'bool',
			description: 'While set, Delete fails with DELETION_PROTECTED.',
		},
	]}
/>

## Where the calls go

The index itself is administered on the one API, like the rest of Data. Its
documents and queries are served on the data host, beside the data they read:

<KeyValue
	items={[
		{ key: 'Name', value: 'orgs/{org}/projects/{project}/envs/{env}/search_indexes/{search_index}', mono: true },
		{ key: 'Id', value: 'idx_<cell><ulid>', mono: true },
		{ key: 'Documents and queries', value: 'https://api.data.sylphx.com', mono: true },
		{ key: 'Engine port', value: '8108, TLS', mono: true },
	]}
/>

`data:read` covers the reads: reading an index, listing indexes in an
environment, reading a document and running a query. Everything that changes
an index or its documents needs `data:write` — and so does `connect`, which
writes nothing but returns the index's own engine credentials. Those
credentials are not API keys, and they come back only in that answer.

Index administration has a CLI (`sylphx data search-indexes …`). Documents and
queries do not: they are calls to `https://api.data.sylphx.com`.

<RelatedDocs
	links={[
		{
			href: '/docs/search/quickstart',
			label: 'Quickstart',
			description: 'Create an index, write a document, query it and delete it.',
		},
		{
			href: '/docs/search/indexing',
			label: 'Indexing documents',
			description: 'Put, read and delete one document, and what the index stores with it.',
		},
		{
			href: '/docs/search/querying',
			label: 'Querying',
			description: 'Text, vector or both, and what a hit carries.',
		},
		{
			href: '/docs/api/search_indexes',
			label: 'The search_indexes collection',
			description: 'Every method, its scope and its examples.',
		},
	]}
/>
