@@ -147,8 +147,6 @@ private void scoreInnerWindow(
147147 LeafCollector collector , Bits acceptDocs , int max , DisiWrapper filter ) throws IOException {
148148 if (filter != null ) {
149149 scoreInnerWindowWithFilter (collector , acceptDocs , max , filter );
150- } else if (allScorers .length - firstRequiredScorer >= 2 ) {
151- scoreInnerWindowAsConjunction (collector , acceptDocs , max );
152150 } else {
153151 DisiWrapper top = essentialQueue .top ();
154152 DisiWrapper top2 = essentialQueue .top2 ();
@@ -238,42 +236,6 @@ private void scoreInnerWindowSingleEssentialClause(
238236 essentialQueue .updateTop ();
239237 }
240238
241- private void scoreInnerWindowAsConjunction (LeafCollector collector , Bits acceptDocs , int max )
242- throws IOException {
243- assert firstEssentialScorer == allScorers .length - 1 ;
244- assert firstRequiredScorer <= allScorers .length - 2 ;
245- DisiWrapper lead1 = allScorers [allScorers .length - 1 ];
246- assert essentialQueue .size () == 1 ;
247- assert lead1 == essentialQueue .top ();
248-
249- for (lead1 .scorer .nextDocsAndScores (max , acceptDocs , docAndScoreBuffer );
250- docAndScoreBuffer .size > 0 ;
251- lead1 .scorer .nextDocsAndScores (max , acceptDocs , docAndScoreBuffer )) {
252-
253- docAndScoreAccBuffer .copyFrom (docAndScoreBuffer );
254-
255- for (int i = allScorers .length - 2 ; i >= firstRequiredScorer ; --i ) {
256-
257- if (scorable .minCompetitiveScore > 0 ) {
258- ScorerUtil .filterCompetitiveHits (
259- docAndScoreAccBuffer ,
260- maxScoreSums [i ],
261- scorable .minCompetitiveScore ,
262- allScorers .length );
263- }
264-
265- DisiWrapper scorer = allScorers [i ];
266- ScorerUtil .applyRequiredClause (docAndScoreAccBuffer , scorer .iterator , scorer .scorable );
267- }
268-
269- scoreNonEssentialClauses (collector , docAndScoreAccBuffer , firstRequiredScorer );
270- }
271-
272- for (int i = allScorers .length - 1 ; i >= firstRequiredScorer ; --i ) {
273- allScorers [i ].doc = allScorers [i ].iterator .docID ();
274- }
275- }
276-
277239 private void scoreInnerWindowMultipleEssentialClauses (
278240 LeafCollector collector , Bits acceptDocs , int max ) throws IOException {
279241 DisiWrapper top = essentialQueue .top ();
@@ -375,9 +337,15 @@ private void scoreNonEssentialClauses(
375337 DisiWrapper scorer = allScorers [i ];
376338 assert scorable .minCompetitiveScore > 0
377339 : "All clauses are essential if minCompetitiveScore is equal to zero" ;
340+
378341 ScorerUtil .filterCompetitiveHits (
379342 buffer , maxScoreSums [i ], scorable .minCompetitiveScore , allScorers .length );
380- ScorerUtil .applyOptionalClause (buffer , scorer .iterator , scorer .scorable );
343+
344+ if (i >= firstRequiredScorer ) {
345+ ScorerUtil .applyRequiredClause (buffer , scorer .iterator , scorer .scorable );
346+ } else {
347+ ScorerUtil .applyOptionalClause (buffer , scorer .iterator , scorer .scorable );
348+ }
381349 scorer .doc = scorer .iterator .docID ();
382350 }
383351
0 commit comments