Details
-
New Feature
-
Status: Resolved
-
Major
-
Resolution: Fixed
-
None
-
None
-
None
Description
ORMatcher and and its scoring companion ORScorer are based on Lucene's
DisjunctionSumScorer. They use a priority queue to channel sub-matchers and
proceed doc-at-a-time.
This priority queue is a serious search-time bottlneck and a lot of work has
gone into optimizing the algorithm. As in Lucene, we have inlined the
priority queue and removed as much indirection and function-call overhead as
possible. However, in Lucene, ScorerDocQueue is a separate class, while here
everything is achieved with static functions so that the C compiler may make
maximum optimizations.
ORMatcher is separated from ORScorer as an optimization; during Next(),
ORScorer accumulates scores from subscorers which match, while ORMatcher's
Next() method skips this work and avoids the overhead.