Skip to main content
Guide
A text index provides durable BM25 full-text search over a top-level string or string-array property on nodes or edges. Use it to rank records by exact terms and keyword relevance. For background, see What is full-text search? and What is BM25?.

Create a text index

Pass a tenant property as the final argument to partition the index by tenant. Text indexes currently require that property to be named tenant_id. See tenant-partitioned search indexes.

Search an index

Search the whole index when every record of the label is a valid result. This request returns the ten Doc nodes that best match "consensus protocol":
Hits arrive best match first, ordered by BM25 $score descending and then by ID. Use textSearchEdges / text_search_edges (TextSearchEdges in Go) to search an edge index. For a tenant-partitioned index, pass the tenant value as the final argument. $score exists only on the hit stream. Project it before traversing away from a hit if the response needs it.

Prefilter with a traversal

To rank only the nodes or edges a traversal reaches, such as documents a user can read, search within the traversal instead of the whole index. See Prefiltered search.

Search consistency

By default, searches include committed writes that the index worker has not published into the index yet. A read request can opt into eventual search, which bounds that work per search. See Search consistency for both modes, searches in write batches, and index_backpressure.

Result limits

The server caps the effective result count of a whole-index search at 800. Prefiltered searches have their own limits.

Indexed values

  • Store searchable text in a top-level String or StringArray property.
  • null and non-string values are rejected. Fix, shorten or delete them before retrying a blocked backfill; those writes are accepted while the backfill is blocked.
  • Keep tenant property names and values consistent with the definition.
  • Treat analyzer and term-position behavior as part of the index definition.
  • Keep each document within the per-document admission limits. Writes with longer text fail, and existing longer rows block a backfill with oversized_entity.

Next steps

Project search results

Preserve ranked hit metadata before continuing a traversal.

Vector indexes

Rank embeddings by semantic similarity.

Troubleshoot index operations

Resolve blocked builds and lifecycle errors.

Limits

Review analyzers, supported types, and search limits.