论坛首页 Java企业应用论坛

Lucene 数据检索缓存的实现

浏览 6313 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-06-21  
 

如果是一个10,000条的数据库检索结果集,数据库是一定要把所有记录内容都取得以后再开始返回给应用结果集的。所以即使检索匹配总数很多,Lucene的结果集占用的内存空间也不会很多。对于一般的模糊检索应用是用不到这么多的结果的,头100条已经可以满足90%以上的检索需求。<o:p></o:p>

如果首批缓存结果数用完后还要读取更后面的结果时Searcher会再次检索并生成一个上次的搜索缓存数大1倍的缓存,并再重新向后抓取。所以如果构造一个Searcher去查1120条结果,Searcher其实是进行了2次搜索过程:头100条取完后,缓存结果用完,Searcher重新检索再构造一个200条的结果缓存,依此类推,400条缓存,800条缓存。由于每次Searcher对象消失后,这些缓存也访问那不到了,你有可能想将结果记录缓存下来,缓存数尽量保证在100以下以充分利用首次的结果缓存,不让Lucene浪费多次检索,而且可以分级进行结果缓存。

我的问题是:lucene的前一百跳再第一检索之后就缓存再内存了吗?还是DISK中呢?他会随着Searcher对象消失后而消失吗?

还是根据最近访问算法缓存再内存中呢??

不知道大家对缓存是怎么做的呢??

   发表时间:2007-06-21  
没看过它的源码...

我感觉算不上缓存,只是个结果集而已,随着Searcher对象消失后就消失了.

0 请登录后投票
   发表时间:2007-06-21  
存在内存里的。

也可以利用一些开源产品比如oscache、ehcache配合使用。

如果数据量大尅考虑使用缓存+多次查询+DB的方式,索引里只存放id号,然后通过id号去数据库里取数据,这样减小了每个检索结果在缓存中的数据量,意味着检索速度的加快。
0 请登录后投票
   发表时间:2007-06-21  
marine_chen 写道
存在内存里的。

也可以利用一些开源产品比如oscache、ehcache配合使用。

如果数据量大尅考虑使用缓存+多次查询+DB的方式,索引里只存放id号,然后通过id号去数据库里取数据,这样减小了每个检索结果在缓存中的数据量,意味着检索速度的加快。

这里的多次查询是什么意思呢??
0 请登录后投票
   发表时间:2007-06-21  
这个问题怎么不在圈子里发呢?害得我还在想这么多人来了居然都不出声,都来干嘛拉。。

你的问题其实很简单。
自己构建cache,或者利用lucene为你提供的一些cache。

它会随着search释放而释放。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics