天天看点

全文检索 Lucene(3)

看完前两篇博客之后,想必大家对于Lucene的使用都有了一个比较清晰的认识了。如果对Lucene的知识点还是有点模糊的话,个人建议还是先看看这两篇文章。

<a href="http://blog.csdn.net/Marksinoberg/article/details/52083505" target="_blank">全文检索 Lucene(1)</a>

<a href="http://blog.csdn.net/Marksinoberg/article/details/52087108" target="_blank">全文检索 Lucene(2)</a>

下面来谈一谈使用Lucene查询的<code>分页机制</code>。

全文检索 Lucene(3)

分页就是为了给用户展现一个逻辑性更强,页面更加紧凑的视图效果。相比于数据库实现的分页,Lucene就显得有点逊色了。毕竟数据库是原生支持的,这点没法改变。

这里说的对Lucene实现的分页机制其实并不是真正的分页,不妨这样想,当我们的<code>TopDocs</code>的大小设置很大,我们的电脑势必会出现内存不足的情况,即使有虚拟内存技术,这也是没办法消除的。这样的话查询机制就会崩溃。这一点我们待会再讲。

我对分页的理解:

以Java面向对象的思维,<code>页面</code>本身就是一个对象。我们不妨现在就打开一个搜索引擎,搜索一下。看看页面结果。大概就能知道底层有什么东西了。

一般来说,做分页一定要知道总的记录数,然后是从哪一页开始分页。这是很有必要的。而且边界值我们也需要好好的进行维护。

<code>Lucene伪分页</code>:

下面接着上面没说完的关于Lucene的伪分页。我们也可以从代码中看出

我们可以看出<code>indexSearcher.search(query, 100);</code>。我们还是查询到了小于等于前100得分项的记录,想象一个这个100设置成10000000000000000呢?结果会怎么样? 估计电脑会受不了的吧。

所以从这里也可以看出,不是任何情况都是适合适用Lucene的,搜们要根据需求来决定。