Indices
Index Configuration (Global Defaults)
Indices control how the local database indexes transcribed data for efficient querying. Global indices defined here apply to all transcribes as defaults. Transcribe-level indices (at transcribes.<type>.indices.*) take precedence when both are defined.
All three index types can be defined at the root level:
value-match: For equality (eq,ne,in) and starts-with (sw) queriespartial-match: For contains, ends-with, and fuzzy queries (expensive)sortable: Forsortand range (lt,gt,le,ge) queries
Starts-with queries do not need partial-match — value-match covers them. Reach for partial-match only when callers actually search by contains, ends-with, or fuzzy match.
Attributes listed in any indices.* block of a transcribe are automatically fetched and stored — they do not also need to be listed in ldap.attributes. For relationship fields, choose the stored side before adding coverage. See Attribute Modeling.
Example:
indices { partial-match = "cn, sn, description" value-match = "uid, mail, employeeNumber" sortable = "cn, displayName"}indices.partial-match
Section titled “indices.partial-match”Attributes for contains, ends-with, and fuzzy queries. Creates trigram indexes for substring matching. Trigram indexes are typically 5–15× larger than equality indexes and slow writes proportionally — enable only for attributes that need this coverage. Starts-with (sw) queries do NOT require partial-match; configure those attributes under value-match instead. No baseline defaults — substring/typeahead is always explicit. Common "typeahead pack" for person directories:
indices.partial-match = "cn, sn, givenName, displayName"Priority: SCRIBE_INDICES_PARTIAL_MATCH > config
| Property | Value |
|---|---|
| Default | null |
| Override | SCRIBE_INDICES_PARTIAL_MATCH (optional) |
indices.partial-match = nullindices.partial-match = ${?SCRIBE_INDICES_PARTIAL_MATCH}indices.sortable
Section titled “indices.sortable”Attributes for sort and range (≥, ≤) queries. Baseline defaults are automatically included for observed attributes: cn, sn, displayName, mail, uid. Covers paged-list sort keys and identity lookups. Group-membership attributes (memberOf, nrfMemberOf) are equality-only via value-match; add them here only if you actually sort by memberOf or range-scan group DNs. For relationship direction guidance, see Attribute Modeling.
Example: "cn, displayName, memberOf"
Priority: SCRIBE_INDICES_SORTABLE > config
| Property | Value |
|---|---|
| Default | null |
| Override | SCRIBE_INDICES_SORTABLE (optional) |
indices.sortable = nullindices.sortable = ${?SCRIBE_INDICES_SORTABLE}indices.value-match
Section titled “indices.value-match”Attributes for equality (eq, ne, in) and starts-with (sw) queries. Baseline defaults are automatically included for observed attributes: objectClass, structuralObjectClass, cn, sn, ou, uid, mail, displayName, member, memberOf, nrfMemberOf, nrfAssignedRoles, manager. Add custom equality filters here. Choose the stored relationship side before adding coverage: Attribute Modeling.
Example: "cn, uid, mail, nrfMemberOf"
Priority: SCRIBE_INDICES_VALUE_MATCH > config
| Property | Value |
|---|---|
| Default | null |
| Override | SCRIBE_INDICES_VALUE_MATCH (optional) |
indices.value-match = nullindices.value-match = ${?SCRIBE_INDICES_VALUE_MATCH}