关于lucene实时更新的纠结

[size=large]仿百度文库这个小项目中,文档信息分别存入数据库和lucene
[table]
|JavaBean:docInfo|OracelTable:DOC_INFO|comment|luceneIndex|
|docId|DOC_ID|主键ID|docId|
|userId|USER_ID|用户ID|userId|
|logId|LOG_ID|用户名|logId|
|title|TITLE|文档名|title|
|summary|SUMMARY|文档简介,查询列表下的几行小字|summary|
|mime|MIME|文档后缀名|mime|
|createTime|CREATE_TIME|文档创建时间|createTime|
|hits|HITS|点击次数|hits|
|无|无|文档内容|context|
[/table]
其中hits更新很频繁,数据库可以承受,但是lucene的更新时删除原索引然后重新创建,这个频繁的更新并不是很好。
全文检索查询的只是lucene,并不去查数据库,lucene不更新,就无法做到实时。

最普通的做法:先更新索引,再更新数据库,这样能实时,但是显然还是很慢。特别是索引文件很大的时候。

用Job任务定时执行:索引文件的更新只能用线程定时根据条件触发更新。这样带来的问题是做不到实时。新增的数据用不到索引会很慢。

建立缓存:加一层缓存,数据结构根据业务定,hashmap也好,treemap也好,新增的数据放入缓存,等到缓存满一定容量的时候去触发线程更新索引文件。
查询的时候顺序是索引,缓存。先全文检索索引,再查缓存看有没有改变,然后将改变封装进来。
这样就不会因为索引的更新而影响效率了。
是不是很痛苦!
[/size]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值