首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 开源软件 >

关于lucene实时更新的扭结

2012-06-28 
关于lucene实时更新的纠结仿百度文库这个小项目中,文档信息分别存入数据库和luceneJavaBean:docInfoOracel

关于lucene实时更新的纠结
仿百度文库这个小项目中,文档信息分别存入数据库和lucene
JavaBean:docInfoOracelTable:DOC_INFOcommentluceneIndexdocIdDOC_ID主键IDdocIduserIdUSER_ID用户IDuserIdlogIdLOG_ID用户名logIdtitleTITLE文档名titlesummarySUMMARY文档简介,查询列表下的几行小字summarymimeMIME文档后缀名mimecreateTimeCREATE_TIME文档创建时间createTimehitsHITS点击次数hits无无文档内容context
其中hits更新很频繁,数据库可以承受,但是lucene的更新时删除原索引然后重新创建,这个频繁的更新并不是很好。
全文检索查询的只是lucene,并不去查数据库,lucene不更新,就无法做到实时。

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

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

建立缓存:加一层缓存,数据结构根据业务定,hashmap也好,treemap也好,新增的数据放入缓存,等到缓存满一定容量的时候去触发线程更新索引文件。
查询的时候顺序是索引,缓存。先全文检索索引,再查缓存看有没有改变,然后将改变封装进来。
这样就不会因为索引的更新而影响效率了。
是不是很痛苦!

热点排行