Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Lucene';s多搜索器与带多读卡器的索引搜索器_Java_Search_Lucene - Fatal编程技术网

Java Lucene';s多搜索器与带多读卡器的索引搜索器

Java Lucene';s多搜索器与带多读卡器的索引搜索器,java,search,lucene,Java,Search,Lucene,我将要编写一个具有分布式索引的近实时搜索应用程序。现在我想知道在多个索引上实现搜索的正确方法是什么: 我读过关于MultiSearcher的文章,因此一种方法是: IndexSearcher[] indexSearchers = new IndexSearcher[indexCount]; for (int i = 0; i < indexCount; i++) { File directory = new File(indexdir, String.valueOf(i));

我将要编写一个具有分布式索引的近实时搜索应用程序。现在我想知道在多个索引上实现搜索的正确方法是什么:

我读过关于MultiSearcher的文章,因此一种方法是:

IndexSearcher[] indexSearchers = new IndexSearcher[indexCount];

for (int i = 0; i < indexCount; i++) {
    File directory = new File(indexdir, String.valueOf(i));
    IndexWriter indexWriter = new IndexWriter(FSDirectory.open(directory), analyzer, IndexWriter.MaxFieldLength.LIMITED);

    IndexReader indexReader = indexWriter.getReader();
    indexSearchers[i] = new IndexSearcher(indexReader);
}

MultiSearcher searcher = new MultiSearcher(indexSearchers);
IndexSearcher[]indexSearchers=newindexsearcher[indexCount];
对于(int i=0;i
但在我看来,这也是可能的:

IndexReader[] indexReader = new IndexReader[indexCount];

for (int i = 0; i < indexCount; i++) {
    File directory = new File(indexdir, String.valueOf(i));
    IndexWriter indexWriter = new IndexWriter(FSDirectory.open(directory), analyzer, IndexWriter.MaxFieldLength.LIMITED);

    indexReader[i] = indexWriter.getReader();        
}

IndexSearcher searcher = new IndexSearcher(new MultiReader(indexReader));
IndexReader[]IndexReader=新的IndexReader[indexCount];
对于(int i=0;i

这两种方法之间是否存在显著差异?如果读卡器没有数据,第二个选项将更容易处理,因为我可以调用MultiReader.reopen(),而不是迭代所有的IndexReader,重新打开它们,然后创建新的IndexSearcher…

您应该使用第二个选项:

谢谢!由于公司政策,我正在使用lucene 2.9,所以我还没有意识到MultiSearcher是“无润滑的”。