> ## Documentation Index
> Fetch the complete documentation index at: https://upstash.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Redis Search Quickstart

## 1. Create Index

> [tab] TypeScript
>
> ```ts theme={"system"}
> import { Redis, s } from "@upstash/redis";
>
> const redis = Redis.fromEnv();
>
> const index = await redis.search.createIndex({
>   name: "products",
>   dataType: "json",
>   prefix: "product:",
>   schema: s.object({
>     name: s.string(),
>     description: s.string(),
>     category: s.string().noTokenize(),
>     price: s.number(),
>     inStock: s.boolean(),
>   }),
> });
> ```

> [tab] Python
>
> ```python theme={"system"}
> from upstash_redis import Redis
>
> redis = Redis.from_env()
>
> index = redis.search.create_index(
>     name="products",
>     data_type="json",
>     prefixes="product:",
>     schema={
>         "name": "TEXT",
>         "description": "TEXT",
>         "category": {"type": "TEXT", "notokenize": True},
>         "price": "F64",
>         "inStock": "BOOL",
>     },
> )
> ```

> [tab] Redis CLI
>
> ```bash theme={"system"}
> SEARCH.CREATE products ON JSON PREFIX 1 product: SCHEMA name TEXT description TEXT category TEXT NOTOKENIZE price F64 FAST inStock BOOL
> ```

> [!NOTE]
>
> Create an index once, not on every request. `createIndex` throws if an index with
> the same name already exists. To make setup safely re-runnable, pass `exists_ok=True`
> in the Python SDK, or wrap the call in a `try/catch` in TypeScript.

## 2. Add Data

Add data using standard Redis JSON commands. Any key matching the index prefix will be automatically indexed.

> [!NOTE]
>
> Writes are indexed asynchronously: a `JSON.SET` returns before the document is
> searchable. For demos and tests, call `waitIndexing()` / `wait_indexing()` to
> block until pending updates are applied. In production, queries running on a later
> request will normally hit an up-to-date index without waiting.

> [tab] TypeScript
>
> ```ts theme={"system"}
> await redis.json.set("product:1", "$", {
>   name: "Wireless Headphones",
>   description:
>     "Premium noise-cancelling wireless headphones with 30-hour battery life",
>   category: "electronics",
>   price: 199.99,
>   inStock: true,
> });
>
> await redis.json.set("product:2", "$", {
>   name: "Running Shoes",
>   description: "Lightweight running shoes with advanced cushioning technology",
>   category: "sports",
>   price: 129.99,
>   inStock: true,
> });
>
> await index.waitIndexing();
> ```

> [tab] Python
>
> ```python theme={"system"}
> redis.json.set("product:1", "$", {
>     "name": "Wireless Headphones",
>     "description": "Premium noise-cancelling wireless headphones with 30-hour battery life",
>     "category": "electronics",
>     "price": 199.99,
>     "inStock": True,
> })
>
> redis.json.set("product:2", "$", {
>     "name": "Running Shoes",
>     "description": "Lightweight running shoes with advanced cushioning technology",
>     "category": "sports",
>     "price": 129.99,
>     "inStock": True,
> })
>
> index.wait_indexing()
> ```

> [tab] Redis CLI
>
> ```bash theme={"system"}
> JSON.SET product:1 $ '{"name": "Wireless Headphones", "description": "Premium noise-cancelling wireless headphones with 30-hour battery life", "category": "electronics", "price": 199.99, "inStock": true}'
> JSON.SET product:2 $ '{"name": "Running Shoes", "description": "Lightweight running shoes with advanced cushioning technology", "category": "sports", "price": 129.99, "inStock": true}'
>
> SEARCH.WAITINDEXING products
> ```

## 3. Search Data

> [tab] TypeScript
>
> ```ts theme={"system"}
> const results = await index.query({
>   filter: { description: "wireless" },
> });
>
> const count = await index.count({
>   filter: { price: { $lt: 150 } },
> });
> ```

> [tab] Python
>
> ```python theme={"system"}
> results = index.query(filter={"description": "wireless"})
>
> count = index.count(filter={"price": {"$lt": 150}})
> ```

> [tab] Redis CLI
>
> ```bash theme={"system"}
> SEARCH.QUERY products '{"description": "wireless"}'
>
> SEARCH.COUNT products '{"price": {"$lt": 150}}'
> ```

## Next Steps

> [card] [Schema Definition](https://upstash.com/docs/redis/search/schema-definition)
>
> Define the fields you want to index and how they are matched

> [card] [Querying](https://upstash.com/docs/redis/search/querying)
>
> Learn the JSON-based query language with filters and operators

> [card] [Aggregations](https://upstash.com/docs/redis/search/aggregations)
>
> Group and summarize your indexed data with aggregation pipelines

> [card] [Recipes](https://upstash.com/docs/redis/search/recipes/overview)
>
> Complete, real-world examples you can adapt to your own use cases


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.