Logo
NeoArc Studio

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'
      }
    }
  }
}