# Indexing

Pinot index design is workload design. The right choice depends on whether you are optimizing point lookups, range filters, text search, JSON predicates, geospatial queries, grouping-heavy rollups, or vector similarity search.

This section helps you do three things:

1. Match a query pattern to the right index.
2. Decide whether the index belongs in the table config or can be added later.
3. Validate the choice with the query patterns you actually run.

## Start here

Use the decision guide when you know the query shape but not the best index yet.

{% content-ref url="/pages/Uo2F9Ej2MMCFhtflJ7RU" %}
[Choosing Indexes](/build-with-pinot/indexing/choosing-indexes.md)
{% endcontent-ref %}

## Common index families

* [Bloom filter](/build-with-pinot/indexing/bloom-filter.md) for segment pruning on highly selective lookups.
* [Forward index](/build-with-pinot/indexing/forward-index.md) for Pinot's default row-to-value storage path.
* [FST index](/build-with-pinot/indexing/fst-index.md) for prefix and pattern-style string filtering.
* [Inverted index](/build-with-pinot/indexing/inverted-index.md) for equality, `IN`, and other highly selective filters.
* [Timestamp index](/build-with-pinot/indexing/timestamp-index.md) for time-granularity queries and rollups.
* [Range index](/build-with-pinot/indexing/range-index.md) for bounded numeric or time filters.
* [Text search support](/build-with-pinot/indexing/text-search-support.md) for tokenized search and text predicates.
* [JSON index](/build-with-pinot/indexing/json-index.md) for nested JSON predicates.
* [Geospatial support](/build-with-pinot/indexing/geospatial-support.md) for distance and spatial filtering.
* [Star-tree index](/build-with-pinot/indexing/star-tree-index.md) for repeatable aggregation and group-by workloads.
* [Vector index](/build-with-pinot/indexing/vector-index.md) for similarity search on embeddings.

## How Pinot applies indexes

Most index choices are defined in the table config, usually under `fieldConfigList` or `tableIndexConfig`, depending on the index and the configuration style you are using. The canonical table-level reference is [Table](/reference/configuration-reference/table.md).

For a practical walkthrough, see [Configure indexes](/build-with-pinot/ingestion/stream-ingestion/configure-indexes.md).

Indexes can also be added or removed after ingestion for some workloads. When you need to change an existing table, prefer the current field-level configuration style over legacy index settings.

## Query patterns to keep in mind

Indexes should reflect the actual queries you run:

* `WHERE col = value` and `WHERE col IN (...)` usually want an inverted index.
* `WHERE col BETWEEN ...` or `WHERE col > ...` usually want a range-oriented strategy.
* `TEXT_MATCH(...)` wants a text index.
* `JSON_MATCH(...)` wants a JSON index.
* `ST_Distance(...)` or other spatial predicates want geospatial support.
* `GROUP BY` on a stable dimension set often benefits from star-tree.
* `VECTOR_SIMILARITY(...)` wants vector indexing.

If you are still deciding between query engines or function support, use the [Querying Pinot](/build-with-pinot/querying-and-sql/querying-pinot.md) and [SSE vs MSE](/build-with-pinot/querying-and-sql/sse-vs-mse.md) pages to confirm the query model first.

## What this page covered

This page introduced the indexing section, the main index families, and the basic rule for choosing an index from the query pattern.

## Next step

Read the decision guide to map your query pattern to a specific index and config style.

## Related pages

* [Choosing indexes](/build-with-pinot/indexing/choosing-indexes.md)
* [Table](/reference/configuration-reference/table.md)
* [Configure indexes](/build-with-pinot/ingestion/stream-ingestion/configure-indexes.md)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.pinot.apache.org/build-with-pinot/indexing.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
