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 default | Dynamically inferred string field |
|---|---|
unset / standard / metric | text + a keyword multi-field (exact match, sort, aggregation) |
search_only | plain text, no multi-field |
store_only | plain text, no multi-field, not indexed |