开始使用
创建数据模型和视图
创建下列类:
-
Status
枚举,枚举值为SILVER
和GOLD
值。 -
Customer(客户)
实体,具有下列属性:-
firstName
,类型为String
-
lastName
,类型为String
-
status
,类型为Status
-
card
,类型为FileRef
-
-
Order(订单)
实体,具有下列属性:-
date
,类型为Date
-
number
,类型为String
-
amount
,类型为Integer
-
product
,类型为String
-
customer
关联至Customer
实体,多对一关系
-
为 Order
实体配置 实例名称,用于在搜索结果中展示。
为 Customer
和 Order
实体创建列表和详情视图。
创建索引定义接口
然后,需要创建索引定义(Index Definition),这是一个接口,定义哪些实体和属性需要进行索引。假设我们需要通过订单的编号、产品名、客户状态或客户的姓搜索订单。在索引定义接口内,我们创建一个方法定义需要索引的属性。
@JmixEntitySearchIndex(entity = Order.class)
public interface OrderIndexDefinition {
@AutoMappedField(includeProperties =
{"number", "product", "customer.status", "customer.lastName"})
void orderMapping();
}
-
接口需要使用
@JmixEntitySearchIndex
注解和必要参数entity
。 -
接口可以任意命名。
-
@AutoMappedField
注解能自动映射需要的属性。这里,使用includeProperties
参数指定需要进行索引的属性名。 -
方法可以任意命名。
配置索引名称
默认情况下,索引的名称是 <prefix><entity_name>
格式。默认前缀为 search_index_
。
由于同一个 ES/OpenSearch 服务可以用在多个项目中,因此为了保证索引名的唯一性,我们建议修改项目中索引的默认前缀。在 application.properties
文件添加:
jmix.search.search-index-name-prefix = demo_prefix_
还可以在 @JmixEntitySearchIndex
注解的 indexName
属性中设置索引全名。
索引处理队列
Jmix 应用程序能监控数据的修改,但是不会自动将数据同步至搜索引擎。如需定期更新索引,在项目添加 Quartz 扩展组件。搜索组件会用 Quartz 定期处理默认配置的索引队列。
创建搜索视图
-
使用 Studio 的
Blank view
模板创建一个空界面,命名为 Search。 -
点击操作面板的 Add Component,找到
SearchField
并双击。 -
新增的
searchField
元素会同时在 Jmix UI 结构面板和 XML 中显示。与其他 UI 组件 一样,可以配置其id
、height
、width
等属性。<search:searchField id="searchField"/>
现在,视图中有了一个用于输入搜索关键字的文本框和一个执行搜索的按钮。
测试搜索
上面步骤完成后,可以运行应用程序并测试搜索功能了。
首先,添加一些 Customer
和 Order
实体。
打开 Search 并搜索 Silver
状态的客户。
搜索结果在 Search Result 视图展示。
点击一条结果,会打开实体详情视图。