Exemplo n.º 1
0
            public override Scorer Scorer(IndexReader reader, bool scoreDocsInOrder, bool topScorer, IState state)
            {
                Similarity similarity = _parent.GetSimilarity(_searcher);

                if (_parent.Matches.Count > 128)
                {
                    return(new LazyInitTermMatchScorer(_parent, reader, state, similarity));
                }

                var scorers = ArrayPool <Scorer> .Shared.Rent(_parent.Matches.Count);

                int index = 0;

                byte[] norms = reader.Norms(_parent.Field, state);
                foreach (var match in _parent.Matches)
                {
                    var termDocs = reader.TermDocs(new Term(_parent.Field, match), state);
                    var scorer   = new TermScorer(this, termDocs, similarity, norms);
                    if (scorer.NextDoc(state) != DocIdSetIterator.NO_MORE_DOCS)
                    {
                        scorers[index++] = scorer;
                    }
                }
                return(new SharedArrayDisjunctionMaxScorer(1.0f, similarity, scorers, index));
            }