Параметры конфигурации поиска
Создание индексов
Дополнение Search проверяет текущую конфигурацию индексов Elasticsearch и сравнивает ее с ожидаемой. Дальнейшие действия зависят от выбранной стратегии управления схемой индекса:
-
create-only- каждый отсутствующий индекс будет создан, существующие индексы с нерелевантной конфигурацией останутся как есть. -
create-or-recreate- каждый отсутствующий индекс будет создан, существующие индексы с нерелевантной конфигурацией будут пересозданы (все данные будут потеряны). Это стратегия по умолчанию. -
none- отсутствующие индексы игнорируются, существующие индексы с нерелевантной конфигурацией останутся как есть. Эта опция может быть использована, если вы хотите управлять индексами вручную.
Стратегия может быть настроена путем добавления следующего свойства в ваш файл application.properties:
jmix.search.index-schema-management-strategy = create-only
Синхронизация схемы индекса автоматически выполняется при запуске приложения. Кроме того, она может быть выполнена вручную с использованием операций synchronizeXXX EntityIndexing MBean.
EntityIndexing MBean также содержит операцию recreateIndex. Она удаляет и создает индекс без учета текущей стратегии управления схемой индекса, даже если целевой индекс имеет актуальную конфигурацию. Все данные индекса будут потеряны.
Именование индексов
Индексы поиска имеют следующий шаблон именования: <prefix><entity_name>.
Префикс по умолчанию - search_index_.
Если несколько проектов используют один и тот же сервис Elasticsearch, вы должны обеспечить уникальность имен индексов: все проекты должны иметь уникальные имена сущностей или проекты должны иметь разные префиксы.
Префиксы могут быть настроены путем добавления следующего свойства в ваш файл application.properties:
jmix.search.search-index-name-prefix = demo_prefix_
Также вы можете указать полное имя индекса в атрибуте indexName аннотации @JmixEntitySearchIndex.
Индексация существующих данных
Существует два подхода к индексации существующих данных:
-
Автоматический - является частью синхронизации схемы индекса и включен по умолчанию. Он ставит в очередь все экземпляры каждой сущности, индекс для которой был создан (в фоновом процессе). Автоматическая индексация может быть включена только для определенных сущностей.
-
Ручной - с использованием операции
enqueueIndexAllEntityIndexing MBean.
Чтобы включить автоматическую индексацию для определенных сущностей, добавьте следующее свойство приложения:
jmix.search.enqueue-index-all-on-startup-index-recreation-entities = Order_,Customer
Также вы можете полностью отключить автоматическую индексацию, добавив следующее свойство приложения:
jmix.search.enqueue-index-all-on-startup-index-recreation-enabled = false
Отслеживание сущностей
По умолчанию система отслеживает изменения индексированных сущностей. Она сохраняет информацию обо всех экземплярах сущностей, затронутых изменениями, в очередь индексации.
Это поведение может быть отключено путем добавления следующего свойства приложения:
jmix.search.changed-entities-indexing-enabled = false
Роли безопасности
Для использования функциональности дополнения Search пользователи с ограниченным доступом к системе должны иметь одну из следующих ролей:
-
Search: edit filter предоставляет разрешения на добавление условий полнотекстового поиска в фильтр.
-
Search: view search results предоставляет разрешения на доступ к экрану результатов поиска.
Настройки индекса и анализ
Дополнение позволяет вам настраивать параметры индекса, включая анализ.
| Эта конфигурация зависит от используемой поисковой платформы (OpenSearch или Elasticsearch) и должна быть соответствующим образом воссоздана при переключении между ними. |
-
Создайте Spring-бин, который реализует
OpenSearchIndexSettingsConfigurer(илиElasticsearchIndexSettingsConfigurerв случае использования Elasticsearch). -
Реализуйте метод
configure(OpenSearchIndexSettingsConfigurationContext).
Реализация
Настройки могут быть сконфигурированы через builder настроек (принадлежит OpenSearch/Elasticsearch Java API client).
Контекст конфигурации предоставляет два типа настроек builder:
-
Общий - позволяет настраивать настройки, которые будут применены ко всем индексам. Может быть получен через
context.getCommonSettingsBuilder(). -
Специфичный для сущности - позволяет настраивать настройки, которые будут применены только к индексу для конкретной сущности. Специфичные для сущности настройки имеют более высокий приоритет и переопределяют общие настройки. Может быть получен через
context.getEntitySettingsBuilder(Class).
Используйте методы builder для установки соответствующих настроек индекса.
Используйте .analysis() для начала построения цепочки, которая позволяет создавать пользовательские анализаторы, токенизаторы и т.д.
@Component
public class CustomOpenSearchIndexSettingsConfigurer implements OpenSearchIndexSettingsConfigurer {
@Override
public void configure(OpenSearchIndexSettingsConfigurationContext context) {
IndexSettings.Builder commonSettingsBuilder = context.getCommonSettingsBuilder();
commonSettingsBuilder
.maxResultWindow(15000)
.analysis(analysisBuilder ->
analysisBuilder.analyzer("customized_standard", analyzerBuilder ->
analyzerBuilder.standard(stdAnalyzerBuilder ->
stdAnalyzerBuilder.maxTokenLength(100)
)
)
);
IndexSettings.Builder orderSettingsBuilder = context.getEntitySettingsBuilder(Order.class);
orderSettingsBuilder
.maxResultWindow(15000)
.maxRegexLength(2000)
.analysis(analysisBuilder ->
analysisBuilder.analyzer("customized_standard", analyzerBuilder ->
analyzerBuilder.standard(stdAnalyzerBuilder ->
stdAnalyzerBuilder.maxTokenLength(150)
)
)
);
}
}