搜索引擎2.0(based elasticsearch6.8)文档搜索权限设计与实现

1 背景

企业搜索,文档搜索权限是不可或缺,原因有二, 首先,企业文档,包括公文,流程,技术文档等,带有敏感信息,需要权限控制,搜索返回带片段,可能带出敏感信息;其次,若没有权限,用户搜索出来的文档可能不能阅读原文,体验非常差

本文介绍文档搜索权限的设计和实现解释,M3还包括扩展字段和suggester将在后续增加

2 参考资料

《搜索引擎onesearch 1.0-设计与实现.docx》

《搜索引擎onesearch 2.0-设计与实现.docx》

《分布式dataX详细(落地)设计》

3 术语

Ø 文档 Document

elasticsearch 一行数据称为文档,需要注意与文件/文档区分,有冲突的地方用“ES文档”区分

Ø 索引schema

相当于关系数据库的schema,xml格式,定义索引的字段,类型,还有搜索策略,分词等搜索相关属性

Ø 搜索/过滤

elasticsearch查询分两部分,搜索和过滤,搜索计算文档与搜索词相似(匹配)度,得出分数排序,分数越高相似度越高,排序也靠前;过滤相当于sql的where,结果是true或者false

Ø 分词

索引可以设定是否分词,分词,分词器分割文本或字符串成term,适用模糊搜索;反之,使用term查询

Ø 查询对象装配映射

elasticsearch es dsl 查询功能非常丰富,可调参数多, 提供精准细致的搜索调整,但也很难用,更难复用,onesearch设计装配映射组件支持通用表达式转换esdsl,用户只需编写通用表达式,如,((f1=‘a’or f2=’b’) and f3=‘c’)) 即可实现搜索过滤,类似elasticsearch自身也提供了sql查询功能,大大降低开发难度,同时具备高复用性

4 规划特性与发布计划

4.1 M1 大规模/分布式文件索引

Ø 文档抓取

1) 文档内容抓取组件,metadata+content

2) 抓取组件隔离机制

Ø 索引引擎,基于分布式setl(批量/增量),reader/writer

4.2 M2 精确搜索/多元搜索

Ø 装配/映射 增加支持query,目前已支持映射为filter

1) full Text查询映射策略

match

match_phrase

query_string

。。。

2) 高亮 (已有,未测试)

3) 返回字段,目前全返回

4) 批量操作,引擎层已实现

5) nested查询, nested索引已支持

Ø springboot starter

4.3 M3 智能搜索

Ø 搜索权限,搜出就能看

Ø 扩展字段,用户自定义扩展索引字段

Ø suggester, 建议补全/建议纠错

5 onesearch总体架构

Ø schema模块,定义索引字段,索引策略,搜索策略等,管理索引及其搜索特性 

Ø 聚合搜索(agg)模块,基于schema模块,支持xml定义agg,零编码增加agg主题

Ø 查询模块,负责构建通用表达式(如,((f1=‘a’or f2=’b’) and f3=‘c’)),作为搜索输入条件

Ø 映射引擎,映射通用表达式为最优的es dsl,支持=,!=,like,in,range,prefix,not/and/or,大小括号,点(.)等操作符映射,解决es dsl难使用,难复用的痛点

Ø 抽象搜索引擎接口,无缝接入不同的搜索引擎,如,elasticsearch,opensearch,solrcloud等,更可同时使用多种引擎

Ø 索引同步组件,全量同步/增量同步

Ø 文档抓取组件

Ø 文档权限,能搜就能看

Ø 扩展属性,用户自定义索引扩展字段

Ø suggester api,建议补全/建议纠错

6 文档权限

6.1 组件架构

permission-client 定义接入系统实现的接口PermissionClient,获取接入系统的文档权限,用户权限

permission-core-client PermissionClient rpc实现,feign/dubbo/…

permission-core 权限增强搜索核心包,包括权限增强搜索服务,PermissionClient工厂

permission-sync 权限同步,datax组件,elasticsearch部分更新机制

autoconfig 适配spring boot的配置,接入到onesearch spring boot starter

6.2 抽象文档权限模型

 接入系统文档权限设计可以千差万别,但本质离不开两个关联,文档权限的关联,用户权限的关联,两者有共同的关联对象,用户有对应文档权限 

6.3 文档权限client

文档权限client是接入系统实现,返回文档权限,用户权限,通过rpc调用

RPC支持扩展机制实现,feign,dubbo,grpc

6.4 索引permission字段

 permission字段是type_id连接起来的字符串类型的数组;搜索权限鉴别使用term查询实现

 6.5 文档权限同步

文档权限同步使用elasticsearch部分更新,即只更新permission字段

统一使用增量,监控文档-权限变更,更新permission字段

CDC/轮询(marker), 其中marker捕捉不到删除,需要全量更新,根据时效要求,采取滚动的全量更新

转换的设计参考 《SETL基于规则的转换组件设计说明书.docx》
 

UpdateSyncStreamRecord,字段更新record,增加更新字段名称,该record不支持内容(content)更新,content更新走addDocument;更新record派生字Sync record,带有marker,记录处理位点

6.6 搜索服务增强

权限增强搜索服务

 PermissionedSearchService 服务接收参数PermissionSearchRequest,继承SearchRequest,增加用户Id属性,用户上下文context,该两属性是permission client的参数

PermissionClient rpc接口,接入系统实现,获取文档owner,拼接到SearchRequest的filter表达式

权限增强搜索服务包装(wrapper)搜索服务

 9 自动配置(文档搜索权限) 

spring boot自动配置

权限增强搜索服务也是SearchService接口实现,增加@Primary,当设置
onesearch.permissioned.enable=true时实例,并优先
 

同时,增加rpc设置,上图是feign rpc 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

中间件XL

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值