lucene 多索引目录搜索实现方法

http://akululu.iteye.com/blog/314130
多索引目录就是要在多个索引目录的中进行比较搜索,类似概念在SQL中就是select * from TableA union select * from TableB。
IndexSearcher[] searchers = new IndexSearcher[2];
searchers[0] = new IndexSearcher(IndexPath0);
searchers[1] = new IndexSearcher(IndexPath1);

方法a
MultiSearcher multisearcher = new MultiSearcher(searchers);
TopDocs multitopdocs = multisearcher.Search(query, null, 1000);
这个搜索的结果可能有相同的信息,比如你有一条相同的信息在多个目录中索引,搜索的结果就会出现多次相同的信息。

方法b
还有一种搜索方式是用到ParallelMultiSearcher这个对象,它是从MulitSearcher继承而来。
ParallelMultiSearcher parallelmultisearcher = new ParallelMultiSearcher(searchers);
TopDocs paralleltopdocs = parallelmultisearcher.Search(query, null, 1000);
这个搜索是对搜索后的结果进行合并,剔除重复的信息。
 
方法c
初始化多个IndexRader,一个目录就是一个IndexReader,最后整合成一个IndexReader数组,实例化IndexSearcher时传入他
List<IndexReader> allIndexReaderList = new ArrayList<IndexReader>();
for (String filePath : indexFilePathList) {
     File indexDirFile = new File(filePath);
     if (indexDirFile.exists()) {
          Directory indexDir = FSDirectory.open(indexDirFile);
          IndexReader indexReader = IndexReader.open(indexDir, true);
          allIndexReaderList.add(indexReader);
     }
}

IndexReader[] fileIndexReaderArr = allIndexReaderList.toArray(new IndexReader[0]);

MultiReader multiReader = new MultiReader(fileIndexReaderArr, true);

IndexSearcher indexSearcher = new IndexSearcher(multiReader);
posted @ 2014-11-07 10:32  程序员斯文  阅读(602)  评论(0编辑  收藏  举报