2012-02-23 3 views
1

전자 상거래 응용 프로그램에 Solr 1.3.0을 사용하고 있었고 이제 Solr 3.5.0을 구현할 계획입니다. Indexsearcher.java에서 우리는 전체 reader를 전달할 solr 1.3과는 달리 reader의 일부 subreaders (doc base 포함)를 전달합니다.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

당신이 코드의 관련 부분을 붙여 넣을 수 있습니까? – jpountz

+0

IndexSearxher.java에서 코드를 추가했습니다. – jeyaprakash

답변

1

대부분의 경우, 하위 독자는 하나의 세그먼트에 대한 독자 있습니다. 중요한 점은 독자에게 더 세분화 된 제어권을 부여하고 관심있는 세그먼트를 알면 더 나은 성능을 얻는 것입니다.

예를 들어, 새로운 세그먼트를 커밋 할 때 세그먼트 판독기를 사용하면 필드 만로드 할 수 있습니다 전체 인덱스에 대한 필드 캐시를 다시로드하는 대신 새로 커밋 된 세그먼트에 대해 캐시하십시오 (캐시 엔트리의 중복을 방지 할 수 있습니다).

우베 쉰들러와 사이먼 Willnauer이 주제에 대한 아주 좋은 기사를 작성했습니다 :