11/*
2- * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
3- * or more contributor license agreements. Licensed under the Elastic License
4- * 2.0 and the Server Side Public License, v 1; you may not use this file except
5- * in compliance with, at your election, the Elastic License 2.0 or the Server
6- * Side Public License, v 1.
2+ * @notice
3+ * Licensed to the Apache Software Foundation (ASF) under one or more
4+ * contributor license agreements. See the NOTICE file distributed with
5+ * this work for additional information regarding copyright ownership.
6+ * The ASF licenses this file to You under the Apache License, Version 2.0
7+ * (the "License"); you may not use this file except in compliance with
8+ * the License. You may obtain a copy of the License at
9+ *
10+ * http://www.apache.org/licenses/LICENSE-2.0
11+ *
12+ * Unless required by applicable law or agreed to in writing, software
13+ * distributed under the License is distributed on an "AS IS" BASIS,
14+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15+ * See the License for the specific language governing permissions and
16+ * limitations under the License.
717 */
8-
918package org .elasticsearch .search .fetch .subphase .highlight ;
1019
1120import org .apache .lucene .search .matchhighlight .OffsetRange ;
2332import java .util .RandomAccess ;
2433
2534public class XPassageSelector {
26- public static final Comparator <Passage > DEFAULT_SCORER =
27- (a , b ) -> {
28- // Compare the number of highlights first.
29- int v ;
30- v = Integer .compare (a .markers .size (), b .markers .size ());
31- if (v != 0 ) {
32- return v ;
33- }
35+ public static final Comparator <Passage > DEFAULT_SCORER = (a , b ) -> {
36+ // Compare the number of highlights first.
37+ int v ;
38+ v = Integer .compare (a .markers .size (), b .markers .size ());
39+ if (v != 0 ) {
40+ return v ;
41+ }
3442
35- // Total number of characters covered by the highlights.
36- int len1 = 0 , len2 = 0 ;
37- for (OffsetRange o : a .markers ) {
38- len1 += o .length ();
39- }
40- for (OffsetRange o : b .markers ) {
41- len2 += o .length ();
42- }
43- if (len1 != len2 ) {
44- return Integer .compare (len1 , len2 );
45- }
43+ // Total number of characters covered by the highlights.
44+ int len1 = 0 , len2 = 0 ;
45+ for (OffsetRange o : a .markers ) {
46+ len1 += o .length ();
47+ }
48+ for (OffsetRange o : b .markers ) {
49+ len2 += o .length ();
50+ }
51+ if (len1 != len2 ) {
52+ return Integer .compare (len1 , len2 );
53+ }
4654
47- return Integer .compare (b .from , a .from );
48- };
55+ return Integer .compare (b .from , a .from );
56+ };
4957
5058 private final Comparator <Passage > passageScorer ;
5159 private final PassageAdjuster passageAdjuster ;
@@ -59,21 +67,17 @@ public XPassageSelector(Comparator<Passage> passageScorer, PassageAdjuster passa
5967 this .passageAdjuster = passageAdjuster ;
6068 }
6169
62- public List <Passage > pickBest (
63- CharSequence value ,
64- List <? extends OffsetRange > markers ,
65- int maxPassageWindow ,
66- int maxPassages ) {
67- return pickBest (
68- value , markers , maxPassageWindow , maxPassages , List .of (new OffsetRange (0 , value .length ())));
70+ public List <Passage > pickBest (CharSequence value , List <? extends OffsetRange > markers , int maxPassageWindow , int maxPassages ) {
71+ return pickBest (value , markers , maxPassageWindow , maxPassages , List .of (new OffsetRange (0 , value .length ())));
6972 }
7073
7174 public List <Passage > pickBest (
7275 CharSequence value ,
7376 List <? extends OffsetRange > markers ,
7477 int maxPassageWindow ,
7578 int maxPassages ,
76- List <OffsetRange > permittedPassageRanges ) {
79+ List <OffsetRange > permittedPassageRanges
80+ ) {
7781 assert markers instanceof RandomAccess ;
7882 assert permittedPassageRanges instanceof RandomAccess ;
7983 assert sortedAndNonOverlapping (permittedPassageRanges );
@@ -84,13 +88,12 @@ public List<Passage> pickBest(
8488 }
8589
8690 // Best passages so far.
87- PriorityQueue <Passage > pq =
88- new PriorityQueue <>(markers .size ()) {
89- @ Override
90- protected boolean lessThan (Passage a , Passage b ) {
91- return passageScorer .compare (a , b ) < 0 ;
92- }
93- };
91+ PriorityQueue <Passage > pq = new PriorityQueue <>(markers .size ()) {
92+ @ Override
93+ protected boolean lessThan (Passage a , Passage b ) {
94+ return passageScorer .compare (a , b ) < 0 ;
95+ }
96+ };
9497
9598 markers = splitOrTruncateToWindows (markers , maxPassageWindow , permittedPassageRanges );
9699
@@ -99,8 +102,7 @@ protected boolean lessThan(Passage a, Passage b) {
99102
100103 final int max = markers .size ();
101104 int markerIndex = 0 ;
102- nextRange :
103- for (OffsetRange range : permittedPassageRanges ) {
105+ nextRange : for (OffsetRange range : permittedPassageRanges ) {
104106 final int rangeTo = Math .min (range .to , value .length ());
105107
106108 // Skip ranges outside of the value window anyway.
@@ -151,7 +153,7 @@ protected boolean lessThan(Passage a, Passage b) {
151153 }
152154 }
153155
154- if (! inside .isEmpty ()) {
156+ if (inside .isEmpty () == false ) {
155157 pq .insertWithOverflow (new Passage (from , to , inside ));
156158 }
157159 }
@@ -166,7 +168,7 @@ protected boolean lessThan(Passage a, Passage b) {
166168 Passage [] passages ;
167169 if (pq .size () > 0 ) {
168170 passages = new Passage [pq .size ()];
169- for (int i = pq .size (); --i >= 0 ; ) {
171+ for (int i = pq .size (); --i >= 0 ;) {
170172 passages [i ] = pq .pop ();
171173 }
172174 } else {
@@ -183,10 +185,7 @@ protected boolean lessThan(Passage a, Passage b) {
183185 OffsetRange newRange = passageAdjuster .adjust (p );
184186 if (newRange .from != p .from || newRange .to != p .to ) {
185187 assert newRange .from >= p .from && newRange .to <= p .to
186- : "Adjusters must not expand the passage's range: was "
187- + p
188- + " => changed to "
189- + newRange ;
188+ : "Adjusters must not expand the passage's range: was " + p + " => changed to " + newRange ;
190189 passages [x ] = new Passage (newRange .from , newRange .to , p .markers );
191190 }
192191 }
@@ -225,7 +224,8 @@ protected boolean lessThan(Passage a, Passage b) {
225224 private List <? extends OffsetRange > splitOrTruncateToWindows (
226225 List <? extends OffsetRange > markers ,
227226 int maxPassageWindow ,
228- List <OffsetRange > permittedPassageRanges ) {
227+ List <OffsetRange > permittedPassageRanges
228+ ) {
229229 // Process markers overlapping with each permitted window.
230230 ArrayList <OffsetRange > processedMarkers = new ArrayList <>(markers .size ());
231231 for (OffsetRange marker : markers ) {
@@ -266,8 +266,7 @@ static boolean sortedAndNonOverlapping(List<? extends OffsetRange> permittedPass
266266 for (OffsetRange next , previous = i .next (); i .hasNext (); previous = next ) {
267267 next = i .next ();
268268 if (previous .to > next .from ) {
269- throw new AssertionError (
270- "Ranges must be sorted and non-overlapping: " + permittedPassageRanges );
269+ throw new AssertionError ("Ranges must be sorted and non-overlapping: " + permittedPassageRanges );
271270 }
272271 }
273272 }
@@ -282,7 +281,8 @@ protected Passage[] pickDefaultPassage(
282281 CharSequence value ,
283282 int maxCharacterWindow ,
284283 int maxPassages ,
285- List <OffsetRange > permittedPassageRanges ) {
284+ List <OffsetRange > permittedPassageRanges
285+ ) {
286286 // Search for the first range that is not empty.
287287 ArrayList <Passage > defaultPassages = new ArrayList <>();
288288 for (OffsetRange o : permittedPassageRanges ) {
@@ -292,11 +292,7 @@ protected Passage[] pickDefaultPassage(
292292
293293 int to = Math .min (value .length (), o .to );
294294 if (o .from < to ) {
295- defaultPassages .add (
296- new Passage (
297- o .from ,
298- o .from + Math .min (maxCharacterWindow , o .length ()),
299- Collections .emptyList ()));
295+ defaultPassages .add (new Passage (o .from , o .from + Math .min (maxCharacterWindow , o .length ()), Collections .emptyList ()));
300296 }
301297 }
302298
0 commit comments