Schema definition

How to define the schema of an index.

An index structure is defined by the schema. The schema specifies the fields, their types, whether they should be indexed or stored, and any additional configuration options. By properly configuring the schema, you can optimize search performance and control the storage requirements of your index.

FT.CREATE idx 
    ON HASH 
    PREFIX 1 blog:post: 
SCHEMA 
    title TEXT WEIGHT 5.0
    content TEXT
    author TAG
    created_date NUMERIC SORTABLE
    views NUMERIC

In this example, we define the schema for an index named idx that will index all hash documents whose keyname starts with blog:post:. The schema includes the fields title, content, author, created_date, and views. The TEXT type indicates that title and content fields are text-based, TAG type is used for the author field, and NUMERIC type is used for created_date and views fields. Additionally, we assign a weight of 5.0 to the title field to give it more relevance in search results, and we mark created_date as SORTABLE to enable sorting based on this field.

You can learn more about the available field types and options on the FT.CREATE page.

More schema definition examples

Index tags with a separator

Index books that have a "categories" attribute where each category is separated by a ; character.

FT.CREATE books-idx 
    ON HASH 
    PREFIX 1 book:details 
SCHEMA 
    title TEXT 
    categories TAG SEPARATOR ";"
Index a single field in multiple ways

Index the sku attribute from a hash as both a TAG and as TEXT:

FT.CREATE idx 
    ON HASH 
    PREFIX 1 blog:post: 
SCHEMA 
    sku AS sku_text TEXT 
    sku AS sku_tag TAG SORTABLE
Index documents with multiple prefixes

Index two different hashes, one containing author data and one containing books, in the same index:

FT.CREATE author-books-idx 
    ON HASH 
    PREFIX 2 author:details: book:details: 
SCHEMA
    author_id TAG SORTABLE 
    author_ids TAG 
    title TEXT name TEXT

In this example, keys for author data use the key pattern author:details:<id> while keys for book data use the pattern book:details:<id>.

Only index documents if a field specifies a certain value (FILTER)

Index authors whose names start with G.

FT.CREATE g-authors-idx 
    ON HASH 
    PREFIX 1 author:details 
    FILTER 'startswith(@name, "G")' 
SCHEMA 
    name TEXT

Index only books that have a subtitle.

FT.CREATE subtitled-books-idx
    ON HASH 
    PREFIX 1 book:details 
    FILTER '@subtitle != ""' 
SCHEMA 
    title TEXT
Index a JSON document using a JSON Path expression

Index a JSON document that has a title field and a categories field. The title field is indexed as TEXT and the categories field is indexed as TAG.

FT.CREATE idx 
    ON JSON 
SCHEMA 
    $.title AS title TEXT 
    $.categories AS categories TAG

You can learn more about the available field types and options on the FT.CREATE page.

Rate this page