Due to the odd behaviour of a custom Scorer of mine I discovered 
ConjunctionScorer.doNext() could loop indefinitely.
It does not bail out as soon as any scorer.advance() call it makes reports back 
"NO_MORE_DOCS". Is there not a performance optimisation to be gained in exiting 
as soon as this happens?
At this stage I cannot see any point in continuing to advance other scorers - 
a quick look at TermScorer suggests that any questionable calls made by 
ConjunctionScorer to advance to NO_MORE_DOCS receives no special treatment and 
disk will be hit as a consequence.
I added an extra condition to the while loop on the 3.5 source:

    while ((doc != NO_MORE_DOCS)  && ((firstScorer = scorers[first]).docID() < 
doc)) {
    
and Junit tests passed.I haven't been able to benchmark performance 
improvements but it looks like it would be sensible to make the change anyway.

Cheers,
Mark

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to