文档索引服务
| Type | Name and description |
|---|---|
AttachmentIndexService |
attachmentIndexService |
EsCoreService |
esCoreService |
EsIndexService |
esIndexService |
EsSearchService |
esSearchService |
SearchableService |
searchableService |
| Type | Name and description |
|---|---|
void |
addCategoryAssembler(String name, Closure assembler)添加一个闭包,用于拼接文档的分类属性 |
void |
addDocumentAssembler(String name, Closure assembler)添加一个闭包,创建、更新索引时,拼接额外的文档属性 |
void |
addDocumentListener(Class clazz, Closure closure)添加一个闭包,用于实时监听文档相关的其他 Domain 类实例的变更 |
void |
addMappingAssembler(String name, Closure closure)添加一个闭包,用于创建索引时,生成额外的 type mapping。 |
void |
addPermissionAssembler(String name, Closure assembler)添加一个闭包,用于拼接文档的权限属性 |
void |
bootStrapInit() |
void |
deleteIndex(String index)删除索引 |
Map |
getIndexedDocument(String docClass, Long docId)获得已索引的文档对象 |
Map |
getIndexedDocument(org.grails.datastore.gorm.GormEntity doc)获得已索引的文档对象 |
void |
init(String docClass = null)初始化索引 |
void |
update(Map options = null)更新索引 |
void |
updateDocument(String docClass, Long docId)更新指定文档的索引 |
void |
updateDocuments(String docClass, List<Long> docIds)更新指定文档的索引 |
void |
updateEntity(Entity entity)实时更新文档 |
| Methods inherited from class | Name |
|---|---|
class Object |
Object#wait(long, int), Object#wait(long), Object#wait(), Object#equals(Object), Object#toString(), Object#hashCode(), Object#getClass(), Object#notify(), Object#notifyAll() |
添加一个闭包,用于拼接文档的分类属性
闭包可接收参数 (String index, Class docClazz, Map doc, Map domainProperties)。
其中 doc 为文档对象(不是文档索引对象),domainProperties 为 docClazz 类解析后的Map。
注闭包中仅需返回一条数据分类计算结果即可,如用于计算切面 “品牌” 的闭包,返回值 “大众”。
需要注意,闭包中需要对 docClazz 进行过滤,避免处理错误的文档。
name - 闭包名称(等于文档分类数据字典的代码),相同则覆盖assembler - 用于拼接文档分类的闭包添加一个闭包,创建、更新索引时,拼接额外的文档属性
闭包可接收参数 (String index, Class docClazz, List<Map> indexDocs, Map domainProperties, boolean initial)。
其中 indexDocs 为已拼接的索引文档对象列表,每个索引文档的 Constants.FIELD_DOCUMENT 键下包含有原始的文档 Map,如需增删额外的属性,可直接修改;
其中 domainProperties 为 docClazz 类解析后的 Map。
如果更新文档索引时,文档被逻辑删除(或被禁用、临时状态等),可以在索引文档中 put 一个 Constants.FIELD_DELETED 为 true,表示删除索引。
需要注意,闭包中需要对 docClazz 进行过滤,避免处理错误的文档。
name - 闭包名称,相同则覆盖assembler - 用于拼接额外的文档属性的闭包添加一个闭包,用于实时监听文档相关的其他 Domain 类实例的变更
例如,监听 ProcessInstance 的增删改操作:addDocumentListener ( ProcessInstance.class, { Integer action, ProcessInstance instance - >
// 例1:返回流程实例关联的文档类和文档 ID,这样会自动更新该文档的索引
return [class : Class.forName (instance.dataClass) , id: instance.dataId]
// 例2:如果是新增操作,则返回文档类和一系列文档 ID,自动更新这些文档的索引;比如修改文件夹的权限后、需要更新文件夹下面所有文档的权限
return action == Entity.ACTION_CREATE ? [class : Class.forName (instance.dataClass) , ids: [1,2,3,4,5]] : null
// 例3:如果是删除操作,则强制更新对应的文档索引,而不是执行索引删除
return action == Entity.ACTION_DELETE ? [class : bropen.cms.content.Article , ids: [1,2,3,4,5], action: Entity.ACTION_UPDATE] : null
})
clazz - 需要监听的类closure - 用于生成文档 class 和 id 的闭包,接收两个参数(操作类型, 对象实例),返回 [class: 文档类, id/ids: 文档ID[列表], action: 修订操作]添加一个闭包,用于创建索引时,生成额外的 type mapping。
name - 闭包名称,相同则覆盖closure - 生成闭包,接收参数 (String index, Class docClazz)。添加一个闭包,用于拼接文档的权限属性
闭包可接收参数 (String index, Class docClazz, List
需要注意,闭包中需要对 docClazz 进行过滤,避免处理错误的文档。
name - 闭包名称,相同则覆盖assembler - 用于拼接文档权限的闭包删除索引
获得已索引的文档对象
docClass - 文档 Domain 类名获得已索引的文档对象
如:
Map doc = ctx.searchableIndexService.getIndexedDocument(ProcessInstance.get(1721).document())
println StringUtils.toJson(doc, Map, [prettyPrint: true])
doc - 文档对象初始化索引
docClass - 要索引的文档 Domain 类名更新索引
options.docClasses - 要索引的文档 Domain 类名列表,空则自动计算options.excludeClasses - 从 docClasses 中排除不索引的文档 Domain 类名列表options.lastUpdated - 上次索引更新时间,空则根据 docClasses 的历史索引记录自动计算更新指定文档的索引
更新指定文档的索引
实时更新文档