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
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:
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:
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:
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
Property | Default | Description |
---|---|---|
|
true |
Whether search models react to entity edit events |
|
100 |
Default result limit for search models |
|
false |
Default wildcard prefix setting |
|
true |
Default wildcard postfix setting |
|
false |
Default space replacement setting |
|
false |
Default case sensitivity setting |