Per-Property Search Configuration
Configure search behaviours, field types, analysers, vector search, storage settings, sub-fields, and per-profile overrides on each model property via the SearchProjectionConfig.
Each property in the central model has a projections.search object of type SearchProjectionConfig. This projection controls every aspect of how the property maps to the search index: whether it is included, what behaviours it has, which analyser processes it, and how it is stored. All fields are optional; the included flag gates visibility in search views and index generation.
Inclusion
The included: boolean field is the gateway to all search configuration. When set to false or omitted, the property does not appear in search views and is excluded from index generation. Set included: true to opt a property into the search index.
Core Search Behaviours
Five core behaviours control how a field participates in search operations. These are stored in the searchBehaviours array.
Extended Behaviours
Three additional behaviours are available as separate boolean flags outside the searchBehaviours array.
Text Analysis
Text analysis settings control how text fields are tokenised and normalised during indexing and querying.
Field Naming
By default, field names in the search index are derived from the canonical property name, transformed by the active profile's naming convention. The fieldName override takes priority over the naming convention, allowing explicit control over the indexed field name.
Key Field
The key: boolean flag marks a property as the document key field. Each entity should have exactly one key field. Key fields should also be filterable; omitting the filterable behaviour triggers a validation warning (search-key-not-filterable).
Search Field Type Override
The searchFieldType property overrides the default type mapping from the search profile. NeoArc Studio supports 17 search field types across 6 categories.
Vector Search
Vector search configuration applies to properties with searchFieldType: 'dense_vector'.
Storage and Performance
Storage settings control how field data is physically stored in the index.
Sub-Fields
Sub-fields enable multiple indexing strategies on the same source field. A common pattern is a text field with a .raw keyword sub-field for exact matching alongside full-text search.
interface SearchSubFieldConfig {
name: string; // Sub-field suffix (e.g., 'raw', 'keyword', 'english')
searchFieldType: SearchFieldType; // Sub-field search type
analyzer?: string; // Analyser for this sub-field
}
Per-Profile Overrides
When a single model targets multiple search engines, each property needs different analyser settings per engine. The profileOverrides object is keyed by search profile ID and provides engine-specific text analysis settings.
interface SearchProfileFieldOverrides {
analyzer?: string;
indexAnalyzer?: string;
searchAnalyzer?: string;
normalizer?: string;
synonymMap?: string;
language?: string;
}
Base text analysis fields (analyzer, indexAnalyzer, searchAnalyzer, normalizer, synonymMap, language) remain as fallbacks when no profile override exists for the active profile. The search view and graph property table search lens both prefer profile overrides over base values.
Boost and Scoring
The boost field sets a numeric weight for relevance scoring. Higher boost values increase the relative importance of matches on this field. Setting scoringEnabled: false excludes the field from scoring entirely. A validation rule (search-boost-without-scoring) flags properties that have a boost value but scoring disabled.
Nested Fields
The nested: boolean flag enables nested queries on structured fields. When using searchFieldType: 'nested', the nested flag should also be set to true; omitting it triggers a validation warning (search-nested-no-flag).
Validation Rules
NeoArc Studio enforces 8 search-specific validation rules on the model to catch configuration issues early.
Complete Configuration Example
A fully configured search projection demonstrating key settings:
projections: {
search: {
included: true,
key: false,
searchBehaviours: ['searchable', 'filterable', 'retrievable'],
searchFieldType: 'text',
analyzer: 'english',
boost: 2.0,
highlightable: true,
scoringEnabled: true,
stored: true,
docValues: false,
subFields: [
{
name: 'raw',
searchFieldType: 'keyword',
analyzer: undefined
}
],
profileOverrides: {
'azure-profile-id': {
analyzer: 'en.microsoft',
synonymMap: 'product-synonyms'
},
'elastic-profile-id': {
analyzer: 'english',
synonymMap: 'product-synonyms-es'
}
}
}
}