LUCENE-4571 adds a dedicated document-at-time scorer for minNrShouldMatch which can use advance() behind the scenes.
In cases where you have some really common terms and some rare ones this can be a huge performance improvement.
On the other hand BooleanScorer might still be faster in some cases.
We should think about what the logic should be here: one simple thing to do is to always use the new scorer when minShouldMatch is set: thats where i'm leaning.
But maybe we could have a smarter heuristic too, perhaps based on cost()