【问题标题】:Lucene's MultiSearcher vs IndexSearcher with MultiReaderLucene 的 MultiSearcher 与带有 MultiReader 的 IndexSearcher
【发布时间】:2012-03-22 10:26:14
【问题描述】:

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

我已阅读有关 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);

但我认为这也是可能的:

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));

这两种方法有什么显着差异吗?如果阅读器没有数据,第二个会更容易处理,因为我可以只调用 MultiReader.reopen() 而不是遍历所有 IndexReader,重新打开它们,而不是创建新的 IndexSearchers...

【问题讨论】:

    标签: java search lucene


    【解决方案1】:

    【讨论】:

    • 谢谢!由于公司政策,我使用的是 lucene 2.9,所以我没有意识到 MultiSearcher 是@Depriated。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-22
    • 1970-01-01
    相关资源
    最近更新 更多