全文搜索
Jmix 3.1+
如果应用使用了 搜索 扩展组件,则可以为动态属性建立全文索引。在定义属性时,可以决定动态模型中哪些属性支持搜索。无需 Java 索引定义,也无需重新部署。
可搜索属性
若要为属性建立索引,在属性对话框中勾选 Searchable 复选框,或在 YAML 中设置 searchable: true:
- name: "Customer"
attributes:
- name: "taxId"
javaClass: "java.lang.String"
length: 20
searchable: true
messages:
en: "Tax ID"
以下类型的属性支持搜索:
-
java.lang.String属性; -
枚举属性;
-
单值引用。按关联实体的实例名称建立索引,与静态引用属性相同。
计算属性和集合属性不能设为可搜索。如果模型中此类属性被标记为可搜索,该模型会被拒绝。
仅当应用程序中包含搜索扩展组件时,才会显示 Searchable 复选框。如果应用程序的索引定义已经包含该属性(例如使用 * 通配符),则该复选框会被勾选且为只读。
实体索引
如果实体(静态或动态)至少有一个动态属性可搜索,或者应用程序为其提供了 Java 索引定义,则该实体会被索引。如果这两种配置同时存在,可搜索属性会添加到 Java 索引定义中,同时保留 Java 已经定义的索引字段。
发布模型时,索引定义会更新,索引 schema 会根据 jmix.search.index-schema-management-strategy 属性进行同步。已存在行不会自动重新索引。如需为已存在行添加新的可搜索属性的值,请对该实体运行 EntityIndexing MBean 的 enqueueIndexAll 操作。
之后,索引的工作方式与静态实体相同:
-
创建、更改和删除动态实体的实例,或更改静态实体的已索引动态属性,会将实例添加到 索引队列。
-
如果动态引用所引用的实体被更改或删除,则引用它的实体会重新索引。
搜索
动态实体的查找方式与静态实体相同,使用 searchField 组件和 搜索 API。还可以在动态实体的列表视图中使用 fullTextFilter 组件。如果搜索结果的实体没有详情视图,则用户打开时会显示警告。