Storage layout parameters

Storage layout parameters #

source, column, store #

Per-field storage placement booleans. Every field is included in the _source blob by default; set source: false to drop it from stored docs. column keeps the value as a compressed doc-values column (fast retrieval and aggregation) — it defaults to the field’s profile layout, which turns it on for column-friendly types (numbers, dates, keywords) and off for analyzed text. store keeps a separate document-store copy for fast field retrieval (default false).

Carried by: every non-relation type — see each field type.

profile #

How the field is laid out at index time — standard (index only), metric (column + index — numbers, dates, keywords), search_only (indexed, not stored — IDs, internal fields), store_only (stored, not indexed — large text, blobs). An explicit per-field profile always wins. Unset falls back to the schema-level default profile when one is set (see below), otherwise the per-type default applies: text/object/vector → standard, keyword and numeric/date/boolean → metric.

Carried by: every type except relation — see each field type.

Schema-level default profile #

Instead of repeating profile on every field, set it once on the schema. At create time:

PUT /my-collection
{
  "schema": {
    "profile": "metric",
    "properties": { "title": { "type": "text" } }
  }
}

…or later through Update collection schema:

PUT /my-collection/_schema
{ "profile": "metric" }

The default is resolved at admission time: every field that enters the schema — the fields of the initial schema, fields added through schema updates, and dynamically inferred fields — is stamped with the schema-level default unless it declares an explicit profile, which always wins. Fields are self-describing afterwards: switching the schema-level profile only affects fields admitted later, never fields already in the schema (existing segments are not rewritten either). Omitting profile in a schema update leaves it unchanged; once set it cannot be cleared, only switched to another value.

The default also shapes dynamic type inference for strings:

Schema-level defaultDynamically inferred string field
unset / standard / metrictext + a keyword multi-field (exact match, sort, aggregation)
search_onlyplain text, no multi-field
store_onlyplain text, no multi-field, not indexed
Calendar September 30, 2026
Edit Edit this page