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

Lucene4.3进阶开发之花明柳暗( 六)

2014-01-08 
Lucene4.3进阶开发之柳暗花明( 六)转载请务必注明,原创地址,谢谢配合! http://qindongliang1922.iteye.com

Lucene4.3进阶开发之柳暗花明( 六)
转载请务必注明,原创地址,谢谢配合!
http://qindongliang1922.iteye.com/blog/1999154


上篇文章,散仙介绍了IndexWriter的作用,它的最大价值体现在对索引的创建,管理和维护上,通过与IndexWriterConfig这个配置管理类的组合,可以实现最佳的索引策略,当然前提是你得了解IndexWriterConfig里一些重要的参数的配置含义。


本篇文章散仙要介绍的是IndexSearcher这个类,这个类是Lucene在进行检索时必不可少的一个组件,可以称为是检索的入口,通过这个入口之后,我们就可以获取与我们检索的关键词相关的一系列Doc,然后我们就可以进行后续相关的业务处理。

所以我们经常会在代码里这样写:

  private static final class SearcherCallableNoSort implements Callable<TopDocs> {    private final Lock lock;    private final IndexSearcher searcher;    private final Weight weight;    private final ScoreDoc after;    private final int nDocs;    private final HitQueue hq;    private final LeafSlice slice;    public SearcherCallableNoSort(Lock lock, IndexSearcher searcher, LeafSlice slice,  Weight weight,        ScoreDoc after, int nDocs, HitQueue hq) {      this.lock = lock;      this.searcher = searcher;      this.weight = weight;      this.after = after;      this.nDocs = nDocs;      this.hq = hq;      this.slice = slice;    }    @Override    public TopDocs call() throws IOException {      final TopDocs docs = searcher.search(Arrays.asList(slice.leaves), weight, after, nDocs);      final ScoreDoc[] scoreDocs = docs.scoreDocs;      //it would be so nice if we had a thread-safe insert       lock.lock();      try {        for (int j = 0; j < scoreDocs.length; j++) { // merge scoreDocs into hq          final ScoreDoc scoreDoc = scoreDocs[j];          if (scoreDoc == hq.insertWithOverflow(scoreDoc)) {            break;          }        }      } finally {        lock.unlock();      }      return docs;    }  }

通过源码,我们大概可以看出,这个提升,其实是利用了多线程的方式来完成的,通过实现Callable接口,以及重写其的call方法,最后通过公用的全局锁,来控制把检索到的结果集添加到公用的命中队列里,这样一来,一个检索,就被并行的分散到多个线程里,然后最后通过一个全局的容器,来获取所有线程检索的结果,由此以来,在某些场合就能大大提升检索性能。

当然这种提升是否,还跟我们的硬件环境有关系,如果我们的机器CPU不够强劲,或者我们在单核或双核上的机器上跑,可能会出现预期之外的结果,不过,现在的服务器基本都是配置很好的,一般不会出现这种情况。


好了,今天散仙要写的,就到此为止了,感谢各位道友的光临,如有什么不足之处,欢迎指正交流。




转载请务必注明,原创地址,谢谢配合!
http://qindongliang1922.iteye.com/blog/1999154

热点排行