SolSe 3.5.0中的IndexSearcher帮助

时间:2012-02-23 12:03:41

标签: java-ee solr lucene

我在我的电子商务应用程序中使用Solr 1.3.0,现在我计划实施Solr 3.5.0。在Indexsearcher.java中,我们传递了一些读取器的子读取器(带有doc base),这与solr 1.3不同,我们将通过整个读者。

任何人都可以帮助我生成子读取器的位置和基础吗?

感谢。 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);
  }
}

}

1 个答案:

答案 0 :(得分:1)

大多数时候,子读者是单个片段的读者。关键是要对读者进行更细粒度的控制,并在知道自己感兴趣的细分时获得更好的性能。

例如,在提交新段时,使用段读取器允许您仅为新提交的段加载字段高速缓存,而不是为整个索引重新加载字段高速缓存(这样可以更快并防止重复高速缓存条目)。

Uwe Schindler和Simon Willnauer撰写了关于这个主题的非常好的文章: