2012-02-23 6 views
1

私は電子商取引アプリケーション用にSolr 1.3.0を使用していましたが、今ではSolr 3.5.0を実装する予定です。 Indexsearcher.javaでは、リーダー全体を渡すsolr 1.3とは異なり、readerのいくつかのサブリーダー(docベース)を渡しています。IndexSearcher help in Solr 3.5.0

サブリーダーがどこでどのように生成されるのか誰でも助けてくれますか?

ありがとうございました。 Jeyaprakash

public void search(Weight weight, Filter filter, Collector collector) 
    throws IOException { 

// TODO: should we make this 
// threaded...? the Collector could be sync'd? 


    System.out.println("Total number of sub readers is "+subReaders.length); 

    // always use single thread: 
for (int i = 0; i < subReaders.length; i++) { 
    System.out.println("The value of Doc base passed is "+docBase + docStarts[i]); 
    System.out.println("The Number in sub reader is "+subReaders[i].numDocs()); 
    // search each subreader 
    collector.setNextReader(subReaders[i], docBase + docStarts[i]); 
    final Scorer scorer = (filter == null) ? 
    weight.scorer(subReaders[i], !collector.acceptsDocsOutOfOrder(), true) : 
    FilteredQuery.getFilteredScorer(subReaders[i], getSimilarity(), weight, weight, filter); 
    if (scorer != null) { 
    scorer.score(collector); 
    } 
} 

}

+0

ウーヴェ・シンドラーとサイモンWillnauerは、このトピックの非常に素晴らしい記事を書かれていますか? – jpountz

+0

IndexSearxher.javaからコードを追加しました。 – jeyaprakash

答えて

1

時間のほとんどを、サブリーダーは、単一セグメントの読者です。重要なのは、読者に対してより細かい制御を行い、関心のあるセグメントが分かっているときのパフォーマンスが向上することです。

たとえば、新しいセグメントをコミットする場合、セグメントリーダーを使用すると、索引全体のフィールド・キャッシュを再ロードするのではなく、新しくコミットされたセグメントのキャッシュを使用します(キャッシュ・エントリーの重複を防ぎます)。あなたは、コードの関連部分を貼り付けることができ