一、生成索引类型
1、根据MySQL中file类,构造索引类型。
在这个项目中,需要被分词的字段不多,一个是文件内容,一个是文件标题,可以将他们共同封装到content字段那种,也可以分开设计字段,分别索引,所需要进行的操作很简单,但是有坑。
我需要将后缀名为doc和docx的文件打开,获取其中所有信息。
进行这个操作时,报错挺多的,百度后有的说是WPS文档不行,有的说新旧版本不兼容,有的说是缺少依赖,依赖需要成套使用,说的很玄乎。
可惜时间太久了,忘记报错信息了,都是常见的报错,但是网上众说纷坛,有真有假,挨个尝试最终才解决,当时没有记录下来真是错过了一个亿。
有关word,pdf,下载,预览,及相互转换及使用poi,itextpdf,jacob,freemarker模板引擎生成word,pdf,还有对文件的压缩,封档等等。这一系列涉及office的内容属于一个版块,这里就不多说了。
2、使用ES的api操作ES库,导入ES库。
自定义一个接口继承ElasticsearchRepository,这个接口继承了ElasticsearchCrudRepository,继续继承了PagingAndSortingRepository,继续继承了CrudRepository,继续继承了Repository…如下:
注意:while循环插入即可,一次插入一千条,两千条也可以。插入速度挺慢的,不进行任何优化,后期测试的时候,我插入近一百万数据,用了半个多小时,如果数据库数据非常多,可以使用多线程提高效率。
二、索引库更新问题
更新索引库有两种方法,定时导入和消息中间件。项目一期使用了定时导入,因为开始要求不高,但是后来客户反映,希望更新及时一点,就换用了消息中间件。
可以看出来,仅仅写一个ES,但是真正写的时候,并不是写ES就OK的,不是说仅仅会一个ES,就能做出来全文检索,还有很多其他的技术也得会。
一、定时导入。
定时导入,只有两个操作。
1、定时任务类上方增加@Component注解。
2、定时任务类中,定时方法上方增加@Scheduled(cron = “0 0 2 * * ?”)注解。我设置的是每天两点更新。cron表达式,自己想什么时候更新自己写。
二、消息中间件。
消息中间件,其实也就是监听器,消息队列里,不停的监听自己想要的信息。
逻辑为:文件上传后,发送消息,监听器监听到后,导入ES库。
这就很及时了,这边刚上传,那边在知识库里就可以搜索到,很nice。
消息中间件后边再详细讲,又一个大东西。
我的博客里,基本上没有代码,也没有图片,ES这个东西挺想上图上代码的,比如效果图,但是怕啊,怕侵权,什么保密协议啥的,作为一个刚写博客的人,还是小心一点吧,希望有朝一日,我也能成为一个博客大V ^_ ^。