The EntitySearchModel is the model component underlying the EntitySearchField UI component. It provides entity search functionality with support for multi-column text searching and entity selection.

1. Overview

EntitySearchModel provides:

  • Multi-column text searching with configurable wildcards

  • Single or multi-entity selection management

  • Result limiting to prevent excessive data retrieval

  • Case-sensitive or insensitive search options

  • The model component for EntitySearchField UI component

  • Automatic updates when entities are modified

Basic search model
    EntitySearchModel searchModel = EntitySearchModel.builder(Customer.TYPE, connectionProvider)
            .searchColumns(List.of(Customer.FIRSTNAME, Customer.LASTNAME, Customer.EMAIL))
            .limit(50)
            .build();

    // Perform search
    searchModel.condition().set(() -> Customer.FIRSTNAME.equalTo("john"));

    // Get search result
    List<Entity> result = searchModel.search().result();

2. Search Configuration

2.1. Search Settings

Configure search behavior per column:

Search settings configuration
    EntitySearchModel searchModel = EntitySearchModel.builder(Customer.TYPE, connectionProvider)
            .searchColumns(List.of(Customer.FIRSTNAME, Customer.LASTNAME))
            .build();

    // Get settings for a specific column
    EntitySearchModel.Settings settings = searchModel.settings().get(Customer.LASTNAME);

    // Add wildcards automatically
    settings.wildcardPrefix().set(true);   // Adds % before search text
    settings.wildcardPostfix().set(true);  // Adds % after search text

    // Replace spaces with wildcards
    settings.spaceAsWildcard().set(true);  // "john smith" → "john%smith"

    // Case sensitivity
    settings.caseSensitive().set(false);   // Case-insensitive search

2.2. Wildcard Strategies

The search model supports different wildcard configurations:

  • Prefix search (autocomplete style): wildcardPrefix(false), wildcardPostfix(true) - "joh" → "joh%"

  • Contains search: wildcardPrefix(true), wildcardPostfix(true) - "ohn" → "%ohn%"

  • Exact search: wildcardPrefix(false), wildcardPostfix(false) - "john" → "john"

  • Multi-word search: spaceAsWildcard(true) - "john reyk" → "%john%reyk%"

3. Selection Management

3.1. Single Selection Mode

For selecting one entity at a time:

Single selection search model
    EntitySearchModel searchModel = EntitySearchModel.builder(Album.TYPE, connectionProvider)
            .searchColumns(List.of(Album.TITLE))
            .build();

    // Set selection programmatically
    Entity album = getAlbum(connectionProvider);
    searchModel.selection().entity().set(album);

    // React to selection changes
    searchModel.selection().entity().addConsumer(selectedAlbum -> {
      if (selectedAlbum != null) {
        displayAlbumDetails(selectedAlbum);
      }
    });

    // Clear selection
    searchModel.selection().clear();

3.2. Multi-Selection Mode

For selecting multiple entities:

Multi-selection search model
    EntitySearchModel searchModel = EntitySearchModel.builder(Track.TYPE, connectionProvider)
            .searchColumns(List.of(Track.NAME))
            .build();

    // Get all selected entities
    Collection<Entity> selectedTracks = searchModel.selection().entities().get();

    // Add to selection
    Entity track = getTrack(connectionProvider);
    searchModel.selection().entities().add(track);

    // Remove from selection
    searchModel.selection().entities().remove(track);

    // Replace entire selection
    searchModel.selection().entities().set(List.of(track));

4. Configuration Properties

Table 1. EntitySearchModel Configuration
Property Default Description

is.codion.framework.model.EntitySearchModel.HANDLE_EDIT_EVENTS

true

Whether search models react to entity edit events

is.codion.framework.model.EntitySearchModel.DEFAULT_LIMIT

100

Default result limit for search models

is.codion.framework.model.EntitySearchModel.WILDCARD_PREFIX

false

Default wildcard prefix setting

is.codion.framework.model.EntitySearchModel.WILDCARD_POSTFIX

true

Default wildcard postfix setting

is.codion.framework.model.EntitySearchModel.SPACE_AS_WILDCARD

false

Default space replacement setting

is.codion.framework.model.EntitySearchModel.CASE_SENSITIVE

false

Default case sensitivity setting