Lucene总结


因为有项目中需要用到全文检索,而此次选择的是lucene,技术的东西,隔一段时间不用的的话基本就忘了,


这里记录下来,相当于技术思维导航!下次用到就方便多了!文章重点讲解思路以及项目过程中遇到的问题,不会直接上项目实现代码!


应用场景:

很多公司为了技术积累,或是各类项目文档,都会用wiki统一管理起来,无论是对新人,还是业务域内各系统人员,提供自助式资料查找,

从而节省大量的人力资源!这种的话基本都是文章或是附件(比如系分、测分文档),那么传统的数据库存储查询就难以满足需求了,故引入Lucene!


一、索引重构

引入Lucene之前,很有可能是已经有了历史数据了,那么想让Lucene能查到历史数据,那么肯定需要把历史数据也生成索引!

1.1 先删除所有索引(不管有没有)

1.2 把需要查询的数据从数据库捞出来

1.3 循环创建每条数据的索引

1.4 索引提交


比如文章实体article:包含标题,内容,附件。

从数据库里面查询出来先转换成IndexField(包含需要查询的字段---->>> title,content),

然后把IndexField转换成document,生成索引!数据库一条数据对应一个document,转换方式:

// 标题
doc.add(new Field("title",field.getTitle(),Field.Store.YES,Field.Index.ANALYZED));
// 内容(包含文档内容和附件内容)
doc.add(new Field("content",content,Field.Store.YES,Field.Index.ANALYZED));
各常量值请自行查阅API.....


注意:此处有个问题,怎么取到附件里面的内容!

// 附件内容获取
String  attachmentContent = new Tika().parseToString(new File(path))


此处用到了Tika,  对应jar包为:tika-app-1.xx.jar,请自行下载!


二、添加文章数据,即也需要同步添加索引(更新数据略)

注意:此处需要思考一个问题,如果是添加一条数据就提交一次索引的话,效率是很低的,那么该怎么处理这个问题呢?

Lucene提供了一套解决方案,叫做近实时搜索!

近实时搜索的概念是:添加一条索引,但是先不提交,等到一定的所有条数或是隔一段固定的时间,统一提交!

没提交的话就没有真正的所有document,而是先存着内存中,搜索的时候也会从内存中搜索!以下三个类结合使用达到效果!

NRTManager   SearcherManager  NRTManagerReopenThread

三、持久化

既然是隔一段时间统一提交(自定义线程控制),那么万一没提交的时候机器挂了,那么索引就丢失了!

这里采取的方式是数据库创建临时表,不管是新增、修改、删除都存放一条索引操作数据,

宕机重启后可以通过数据库恢复!!(提交完后临时表数据要相应的删除)


四、高亮

略.....


五、查询

通过遍历索引doc查询相应的数据!


....................................................................

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值