功能描述:针对系统中的clue业务实体的内容,以及clue实体副附带的标签信息实现一个,点击标签时,标签关联的文段高亮的功能。类似于word中的批注,不同i的是,一个标签可以对应一个或者多个文段。
实现中的问题以及选择方案:
1.存文段还是存索引。
当一个标签关联文段后,为了在请求后能够重新加载出高亮文段的位置,实现方式有两种:一是存文段的内容,每次查询实体详情的时候根据文段内容去计算索引。二是直接存文段索引,查询详情时直接返回索引即可知道哪些文段应该高亮。
方案一的弊端就是每次查询详情的时候,都需要重新去计算索引;而好处则是,每次更新实体内容详情时,不用担心索引的更新问题。
方案二的弊端就是每次更新文段的内容后,索引需要重新计算与更新。好处则是在文段未被修改的情况下,索引只需要计算一次,省去详情查询的索引计算环节,接口也会更快。
最终还是选择了方案一的实现,因为是实体的内容肯定是会要修改的,这样则需要重新计算索引位置并更新;另外对于表结构来说,索引的数据结构必然更加复杂,因为一个文段可以重复在文中出现,这样对应的索引位置就会有多个,但是重复文段的话只需要存一个文段信息即可。
2.脏数据的处理
选择了存文段信息后,还有一个要考虑的点就是脏数据的处理,比如“我是一个大笨蛋”这里的“笨蛋”被高亮了,那么文段关联里的数据会存下“笨蛋”这个信息,但是如果此时句子被修改成了“我是一个大笨猪”,此时我们记录的信息就不会再有对应匹配的内容,也就是修改后的句子不会再出现高亮的提示。那么之前存的数据就成了一个脏数据,需要及时处理掉,这里我选择的去除时机是在查询的时候,如果文段中没有匹配的内容,那就将这条记录删除。(这里技术经理给出的建议是,历史数据也可以保留,可以用来提示用户此处的高亮记录有被修改过。但是我认为这是没有必要的,因为修改信息肯定是出于某种理由,旧的数据对用户来说价值并不大,而且就算保留也没有必要保留全部的历史信息,保留最后一次的编辑信息即可。)
部署时的一些问题:
1.定时任务扫描、
有一个定时任务会扫描库中状态为init的文件,扫描后将状态改为analyse状态,之后开始解析。如果在解析过程中,降程序重启或者重新部署后,原本处于analyse状态的数据会一直处于该状态,因为扫描的程序不会再读取到这些数据。这里一个可行的方案就是,在程序启动后,将这些处于分析中状态的数据重新更新为init状态。
2.跨域的问题
在将一个表单页面内嵌到功能的审批流框架页中后,有一个文件上传接口出现了跨域的问题,奇怪的是其它接口没有此现象。 后来发现异常原因是对接的管理中心服务获取不到token, 这里经过排查发现,是文件上传接口的微服务配置了放行处理,也就是说在请求经过管理中心时,程序不会再设置其token值,从而导致token未被正确设置,这里将将行的配置取消后,程序即正常运作。
3.oracle全文检索
基本原理:文本预处理--分词--生成对应的索引表--在索引表查询, 查询时也会将查询的内容经行分词处理,所以查询的精准度是不如like的,但性能会比like好太多。