Skip to content

Schema configuration

This guide covers how to configure field schemas in Nixiesearch, including the new numeric list field types.

Basic schema structure

A Nixiesearch schema defines the structure of your index through field definitions. Each field specifies its data type and capabilities:

schema:
  movies:
    fields:
      title:
        type: text
        search: true
        filter: true
        store: true
      year:
        type: int
        filter: true
        facet: true
        sort: true
      genres:
        type: text[]
        filter: true
        store: true

Numeric field types

Single-value numeric fields

schema:
  products:
    fields:
      price:
        type: float
        filter: true
        sort: true
        facet: true
      quantity:
        type: int
        filter: true
        sort: true
      weight:
        type: double
        filter: true
        sort: true
      product_id:
        type: long
        filter: true
        required: true

Numeric list fields

List/array variants allow storing multiple values per field:

schema:
  ecommerce:
    fields:
      name:
        type: text
        search: true

      # Multiple ratings from different users
      ratings:
        type: int[]
        filter: true     # Enable range filtering
        store: true      # Store original values
        required: false  # Optional field

      # Historical price points  
      price_variants:
        type: float[]
        filter: true
        store: true

      # Product dimensions [length, width, height]
      dimensions:
        type: double[]
        store: true
        filter: false

      # Category relevance scores
      category_scores:
        type: long[]
        filter: true
        store: true

Field configuration options

Option Description Default Available for
type Field data type required All fields
store Store original value true All fields
filter Enable filtering false All fields
sort Enable sorting false Single-value fields
facet Enable faceting false Single-value fields
search Enable text search false Text fields only
required Field is mandatory false All fields

Complete example

schema:
  product_catalog:
    fields:
      # Text fields
      title:
        type: text
        search: true
        filter: true
        store: true
        required: true

      description:
        type: text
        search: true
        store: true

      # Single numeric fields  
      price:
        type: float
        filter: true
        sort: true
        facet: true
        required: true

      stock:
        type: int
        filter: true
        sort: true

      # Numeric array fields
      user_ratings:
        type: int[]
        filter: true    # Can filter by rating ranges
        store: true

      size_options:
        type: float[]   # Available sizes: [6.5, 7.0, 7.5, 8.0]
        filter: true
        store: true

      # Other field types
      active:
        type: bool
        filter: true
        required: true

      created_date:
        type: datetime
        filter: true
        sort: true

This schema supports documents like:

{
  "title": "Running Shoes",
  "description": "Comfortable athletic footwear",
  "price": 89.99,
  "stock": 25,
  "user_ratings": [5, 4, 5, 3, 4, 5, 2],
  "size_options": [6.0, 6.5, 7.0, 7.5, 8.0, 8.5, 9.0],
  "active": true,
  "created_date": "2024-01-15T10:30:00Z"
}