Ejemplo n.º 1
0
            public TopFieldDocs Call()
            {
                Debug.Assert(Slice.Leaves.Length == 1);
                TopFieldDocs docs = Searcher.Search(Arrays.AsList(Slice.Leaves), Weight, After, NDocs, Sort, true, DoDocScores || Sort.NeedsScores(), DoMaxScore);

                @lock.Lock();
                try
                {
                    AtomicReaderContext ctx = Slice.Leaves[0];
                    int @base = ctx.DocBase;
                    Hq.NextReader = ctx;
                    Hq.Scorer     = FakeScorer;
                    foreach (ScoreDoc scoreDoc in docs.ScoreDocs)
                    {
                        FakeScorer.doc   = scoreDoc.Doc - @base;
                        FakeScorer.score = scoreDoc.Score;
                        Hq.Collect(scoreDoc.Doc - @base);
                    }

                    // Carry over maxScore from sub:
                    if (DoMaxScore && docs.MaxScore > Hq.MaxScore)
                    {
                        Hq.MaxScore = docs.MaxScore;
                    }
                }
                finally
                {
                    @lock.Unlock();
                }
                return(docs);
            }