23
23
import java .util .Iterator ;
24
24
import java .util .List ;
25
25
import java .util .Objects ;
26
+ import java .util .stream .Collectors ;
26
27
import org .apache .lucene .index .LeafReaderContext ;
27
28
28
29
/**
@@ -44,6 +45,7 @@ public final class DisjunctionMaxQuery extends Query implements Iterable<Query>
44
45
45
46
/* The subqueries */
46
47
private final Multiset <Query > disjuncts = new Multiset <>();
48
+ private final List <Query > orderedQueries ; // used for toString()
47
49
48
50
/* Multiple of the non-max disjunct scores added into our final score. Non-zero values support tie-breaking. */
49
51
private final float tieBreakerMultiplier ;
@@ -65,6 +67,7 @@ public DisjunctionMaxQuery(Collection<Query> disjuncts, float tieBreakerMultipli
65
67
}
66
68
this .tieBreakerMultiplier = tieBreakerMultiplier ;
67
69
this .disjuncts .addAll (disjuncts );
70
+ this .orderedQueries = new ArrayList <>(disjuncts ); // order from the caller
68
71
}
69
72
70
73
/**
@@ -295,24 +298,19 @@ public void visit(QueryVisitor visitor) {
295
298
*/
296
299
@ Override
297
300
public String toString (String field ) {
298
- StringBuilder buffer = new StringBuilder ();
299
- buffer .append ("(" );
300
- Iterator <Query > it = disjuncts .iterator ();
301
- for (int i = 0 ; it .hasNext (); i ++) {
302
- Query subquery = it .next ();
303
- if (subquery instanceof BooleanQuery ) { // wrap sub-bools in parens
304
- buffer .append ("(" );
305
- buffer .append (subquery .toString (field ));
306
- buffer .append (")" );
307
- } else buffer .append (subquery .toString (field ));
308
- if (i != disjuncts .size () - 1 ) buffer .append (" | " );
309
- }
310
- buffer .append (")" );
311
- if (tieBreakerMultiplier != 0.0f ) {
312
- buffer .append ("~" );
313
- buffer .append (tieBreakerMultiplier );
314
- }
315
- return buffer .toString ();
301
+ return this .orderedQueries .stream ()
302
+ .map (
303
+ subquery -> {
304
+ if (subquery instanceof BooleanQuery ) { // wrap sub-bools in parens
305
+ return "(" + subquery .toString (field ) + ")" ;
306
+ }
307
+ return subquery .toString (field );
308
+ })
309
+ .collect (
310
+ Collectors .joining (
311
+ " | " ,
312
+ "(" ,
313
+ ")" + ((tieBreakerMultiplier != 0.0f ) ? "~" + tieBreakerMultiplier : "" )));
316
314
}
317
315
318
316
/**
0 commit comments