lucene 多索引目录搜索实现方法
多索引目录就是要在多个索引目录的中进行比较搜索,类似概念在SQL中就是select * from TableA union select * from TableB。
IndexSearcher[] searchers = new IndexSearcher[2];
searchers[0] = new IndexSearcher(IndexPath0);
searchers[1] = new IndexSearcher(IndexPath1);
MultiSearcher multisearcher = new MultiSearcher(searchers);
TopDocs multitopdocs = multisearcher.Search(query, null, 1000);
这个搜索的结果可能有相同的信息,比如你有一条相同的信息在多个目录中索引,搜索的结果就会出现多次相同的信息。
还有一种搜索方式是用到ParallelMultiSearcher这个对象,它是从MulitSearcher继承而来。
ParallelMultiSearcher parallelmultisearcher = new ParallelMultiSearcher(searchers);
TopDocs paralleltopdocs = parallelmultisearcher.Search(query, null, 1000);
这个搜索是对搜索后的结果进行合并,剔除重复的信息。
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);