您的位置:首页 > 其它

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

2014-11-07 10:32 211 查看
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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: