From 87fe7aa9062c1e1be969175a02c75111ba5b7b24 Mon Sep 17 00:00:00 2001 From: luyuncheng Date: Sun, 24 Apr 2022 17:33:52 +0800 Subject: [PATCH 1/6] 1. Add LimitedOffsetsEnum to Limited offset token 2. Add highlight tests for maxAnalyzedOffset in different OffsetSource --- .../uhighlight/CustomFieldHighlighter.java | 12 ++- .../uhighlight/CustomUnifiedHighlighter.java | 3 +- .../search/uhighlight/LimitedOffsetsEnum.java | 57 ++++++++++ .../CustomUnifiedHighlighterTests.java | 100 ++++++++++++++++++ 4 files changed, 169 insertions(+), 3 deletions(-) create mode 100644 server/src/main/java/org/elasticsearch/lucene/search/uhighlight/LimitedOffsetsEnum.java diff --git a/server/src/main/java/org/elasticsearch/lucene/search/uhighlight/CustomFieldHighlighter.java b/server/src/main/java/org/elasticsearch/lucene/search/uhighlight/CustomFieldHighlighter.java index 640150323da51..89d65b9cc6838 100644 --- a/server/src/main/java/org/elasticsearch/lucene/search/uhighlight/CustomFieldHighlighter.java +++ b/server/src/main/java/org/elasticsearch/lucene/search/uhighlight/CustomFieldHighlighter.java @@ -36,6 +36,7 @@ class CustomFieldHighlighter extends FieldHighlighter { private final Locale breakIteratorLocale; private final int noMatchSize; private String fieldValue; + private final Integer queryMaxAnalyzedOffset; CustomFieldHighlighter( String field, @@ -46,11 +47,13 @@ class CustomFieldHighlighter extends FieldHighlighter { int maxPassages, int maxNoHighlightPassages, PassageFormatter passageFormatter, - int noMatchSize + int noMatchSize, + Integer queryMaxAnalyzedOffset ) { super(field, fieldOffsetStrategy, breakIterator, passageScorer, maxPassages, maxNoHighlightPassages, passageFormatter); this.breakIteratorLocale = breakIteratorLocale; this.noMatchSize = noMatchSize; + this.queryMaxAnalyzedOffset = queryMaxAnalyzedOffset; } FieldOffsetStrategy getFieldOffsetStrategy() { @@ -106,6 +109,11 @@ protected Passage[] getSummaryPassagesNoHighlight(int maxPassages) { @Override protected Passage[] highlightOffsetsEnums(OffsetsEnum off) throws IOException { + OffsetsEnum wrapOff = off; + if (queryMaxAnalyzedOffset != null) { + wrapOff = new LimitedOffsetsEnum(off, queryMaxAnalyzedOffset); + } + final int contentLength = this.breakIterator.getText().getEndIndex(); if (off.nextPosition() == false) { @@ -146,7 +154,7 @@ protected Passage[] highlightOffsetsEnums(OffsetsEnum off) throws IOException { BytesRef term = off.getTerm();// a reference; safe to refer to assert term != null; passage.addMatch(start, end, term, off.freq()); - } while (off.nextPosition()); + } while (wrapOff.nextPosition()); maybeAddPassage(passageQueue, passageScorer, passage, contentLength); Passage[] passages = passageQueue.toArray(new Passage[passageQueue.size()]); diff --git a/server/src/main/java/org/elasticsearch/lucene/search/uhighlight/CustomUnifiedHighlighter.java b/server/src/main/java/org/elasticsearch/lucene/search/uhighlight/CustomUnifiedHighlighter.java index a000244f00e4e..f233cb64a30e9 100644 --- a/server/src/main/java/org/elasticsearch/lucene/search/uhighlight/CustomUnifiedHighlighter.java +++ b/server/src/main/java/org/elasticsearch/lucene/search/uhighlight/CustomUnifiedHighlighter.java @@ -193,7 +193,8 @@ protected CustomFieldHighlighter getFieldHighlighter(String field, Query query, maxPassages, (noMatchSize > 0 ? 1 : 0), getFormatter(field), - noMatchSize + noMatchSize, + queryMaxAnalyzedOffset ); } diff --git a/server/src/main/java/org/elasticsearch/lucene/search/uhighlight/LimitedOffsetsEnum.java b/server/src/main/java/org/elasticsearch/lucene/search/uhighlight/LimitedOffsetsEnum.java new file mode 100644 index 0000000000000..616edde8dbabe --- /dev/null +++ b/server/src/main/java/org/elasticsearch/lucene/search/uhighlight/LimitedOffsetsEnum.java @@ -0,0 +1,57 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +package org.elasticsearch.lucene.search.uhighlight; + +import org.apache.lucene.search.uhighlight.OffsetsEnum; +import org.apache.lucene.util.BytesRef; +import org.elasticsearch.core.Nullable; + +import java.io.IOException; + +public class LimitedOffsetsEnum extends OffsetsEnum { + private final OffsetsEnum delegate; + private final Integer maxOffset; + + public LimitedOffsetsEnum(OffsetsEnum delegate, @Nullable Integer maxOffset) { + this.delegate = delegate; + this.maxOffset = maxOffset; + } + + @Override + public boolean nextPosition() throws IOException { + boolean next = delegate.nextPosition(); + if (!next) { + return next; + } + if (maxOffset != null && delegate.startOffset() > maxOffset) { + return false; + } + return next; + } + + @Override + public int freq() throws IOException { + return delegate.freq(); + } + + @Override + public BytesRef getTerm() throws IOException { + return delegate.getTerm(); + } + + @Override + public int startOffset() throws IOException { + return delegate.startOffset(); + } + + @Override + public int endOffset() throws IOException { + return delegate.endOffset(); + } +} diff --git a/server/src/test/java/org/elasticsearch/lucene/search/uhighlight/CustomUnifiedHighlighterTests.java b/server/src/test/java/org/elasticsearch/lucene/search/uhighlight/CustomUnifiedHighlighterTests.java index e81f5834f60ae..2b84dacb646c3 100644 --- a/server/src/test/java/org/elasticsearch/lucene/search/uhighlight/CustomUnifiedHighlighterTests.java +++ b/server/src/test/java/org/elasticsearch/lucene/search/uhighlight/CustomUnifiedHighlighterTests.java @@ -9,6 +9,7 @@ package org.elasticsearch.lucene.search.uhighlight; import org.apache.lucene.analysis.Analyzer; +import org.apache.lucene.analysis.core.WhitespaceAnalyzer; import org.apache.lucene.analysis.custom.CustomAnalyzer; import org.apache.lucene.analysis.ngram.EdgeNGramTokenizerFactory; import org.apache.lucene.analysis.standard.StandardAnalyzer; @@ -36,6 +37,7 @@ import org.apache.lucene.tests.index.RandomIndexWriter; import org.elasticsearch.common.Strings; import org.elasticsearch.common.lucene.search.MultiPhrasePrefixQuery; +import org.elasticsearch.search.fetch.subphase.highlight.LimitTokenOffsetAnalyzer; import org.elasticsearch.test.ESTestCase; import java.text.BreakIterator; @@ -394,4 +396,102 @@ public void testExceedMaxAnalyzedOffset() throws Exception { 10 ); } + + private void assertHighlightOneDoc( + String fieldName, + String[] inputs, + Analyzer analyzer, + Query query, + Locale locale, + BreakIterator breakIterator, + int noMatchSize, + String[] expectedPassages, + int maxAnalyzedOffset, + Integer queryMaxAnalyzedOffset, + UnifiedHighlighter.OffsetSource offsetSource + ) throws Exception { + try (Directory dir = newDirectory()) { + IndexWriterConfig iwc = newIndexWriterConfig(analyzer); + iwc.setMergePolicy(newTieredMergePolicy(random())); + RandomIndexWriter iw = new RandomIndexWriter(random(), dir, iwc); + FieldType ft = new FieldType(TextField.TYPE_STORED); + ft.setIndexOptions(IndexOptions.DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS); + ft.freeze(); + Document doc = new Document(); + for (String input : inputs) { + Field field = new Field(fieldName, "", ft); + field.setStringValue(input); + doc.add(field); + } + iw.addDocument(doc); + try (DirectoryReader reader = iw.getReader()) { + IndexSearcher searcher = newSearcher(reader); + iw.close(); + TopDocs topDocs = searcher.search(new MatchAllDocsQuery(), 1, Sort.INDEXORDER); + assertThat(topDocs.totalHits.value, equalTo(1L)); + String rawValue = Strings.arrayToDelimitedString(inputs, String.valueOf(MULTIVAL_SEP_CHAR)); + CustomUnifiedHighlighter highlighter = new CustomUnifiedHighlighter( + searcher, + wrapAnalyzer(analyzer,queryMaxAnalyzedOffset), + offsetSource, + new CustomPassageFormatter("", "", new DefaultEncoder()), + locale, + breakIterator, + "index", + "text", + query, + noMatchSize, + expectedPassages.length, + name -> "text".equals(name), + maxAnalyzedOffset, + queryMaxAnalyzedOffset + ); + final Snippet[] snippets = highlighter.highlightField(getOnlyLeafReader(reader), topDocs.scoreDocs[0].doc, () -> rawValue); + assertEquals(snippets.length, expectedPassages.length); + for (int i = 0; i < snippets.length; i++) { + assertEquals(snippets[i].getText(), expectedPassages[i]); + } + } + } + } + public void testExceedMaxAnalyzedOffsetWithRepeatedWords() throws Exception { + + TermQuery query = new TermQuery(new Term("text", "Fun")); + Analyzer analyzer = new WhitespaceAnalyzer(); + assertHighlightOneDoc( + "text", + new String[] { "Testing Fun Testing Fun" }, + analyzer, + query, + Locale.ROOT, + BreakIterator.getSentenceInstance(Locale.ROOT), + 0, + new String[] { "Testing Fun Testing Fun" }, + 29, + 10, + UnifiedHighlighter.OffsetSource.ANALYSIS + ); + assertHighlightOneDoc( + "text", + new String[] { "Testing Fun Testing Fun" }, + analyzer, + query, + Locale.ROOT, + BreakIterator.getSentenceInstance(Locale.ROOT), + 0, + // OLD Strategy would Response: "Testing Fun Testing Fun" + new String[] { "Testing Fun Testing Fun" }, + 29, + 10, + UnifiedHighlighter.OffsetSource.POSTINGS + ); + } + + + protected Analyzer wrapAnalyzer(Analyzer analyzer, Integer maxAnalyzedOffset) { + if (maxAnalyzedOffset != null) { + analyzer = new LimitTokenOffsetAnalyzer(analyzer, maxAnalyzedOffset); + } + return analyzer; + } } From 5d5e7018cb85dfee39f4a94844186f6319bf3e86 Mon Sep 17 00:00:00 2001 From: luyuncheng Date: Tue, 18 Oct 2022 12:29:57 +0800 Subject: [PATCH 2/6] 1. Add changelog AND Random tests for different offset source in CustomUnifiedHighlighterTests --- docs/changelog/86110.yaml | 6 + .../CustomUnifiedHighlighterTests.java | 130 +++++++++--------- 2 files changed, 71 insertions(+), 65 deletions(-) create mode 100644 docs/changelog/86110.yaml diff --git a/docs/changelog/86110.yaml b/docs/changelog/86110.yaml new file mode 100644 index 0000000000000..b0cd98efefc94 --- /dev/null +++ b/docs/changelog/86110.yaml @@ -0,0 +1,6 @@ +pr: 86110 +summary: Add LimitedOffsetsEnum to Limited offset token +area: Search/Highlighting +type: enhancement +issues: + - 86109 diff --git a/server/src/test/java/org/elasticsearch/lucene/search/uhighlight/CustomUnifiedHighlighterTests.java b/server/src/test/java/org/elasticsearch/lucene/search/uhighlight/CustomUnifiedHighlighterTests.java index 2b84dacb646c3..399ccf3e33644 100644 --- a/server/src/test/java/org/elasticsearch/lucene/search/uhighlight/CustomUnifiedHighlighterTests.java +++ b/server/src/test/java/org/elasticsearch/lucene/search/uhighlight/CustomUnifiedHighlighterTests.java @@ -37,11 +37,12 @@ import org.apache.lucene.tests.index.RandomIndexWriter; import org.elasticsearch.common.Strings; import org.elasticsearch.common.lucene.search.MultiPhrasePrefixQuery; -import org.elasticsearch.search.fetch.subphase.highlight.LimitTokenOffsetAnalyzer; import org.elasticsearch.test.ESTestCase; import java.text.BreakIterator; import java.util.Locale; +import java.util.Map; +import java.util.TreeMap; import static org.elasticsearch.lucene.search.uhighlight.CustomUnifiedHighlighter.MULTIVAL_SEP_CHAR; import static org.hamcrest.CoreMatchers.equalTo; @@ -84,6 +85,34 @@ private void assertHighlightOneDoc( String[] expectedPassages, int maxAnalyzedOffset, Integer queryMaxAnalyzedOffset + ) throws Exception { + assertHighlightOneDoc( + fieldName, + inputs, + analyzer, + query, + locale, + breakIterator, + noMatchSize, + expectedPassages, + maxAnalyzedOffset, + queryMaxAnalyzedOffset, + UnifiedHighlighter.OffsetSource.ANALYSIS + ); + } + + private void assertHighlightOneDoc( + String fieldName, + String[] inputs, + Analyzer analyzer, + Query query, + Locale locale, + BreakIterator breakIterator, + int noMatchSize, + String[] expectedPassages, + int maxAnalyzedOffset, + Integer queryMaxAnalyzedOffset, + UnifiedHighlighter.OffsetSource offsetSource ) throws Exception { try (Directory dir = newDirectory()) { IndexWriterConfig iwc = newIndexWriterConfig(analyzer); @@ -108,7 +137,7 @@ private void assertHighlightOneDoc( CustomUnifiedHighlighter highlighter = new CustomUnifiedHighlighter( searcher, analyzer, - UnifiedHighlighter.OffsetSource.ANALYSIS, + offsetSource, new CustomPassageFormatter("", "", new DefaultEncoder()), locale, breakIterator, @@ -397,63 +426,6 @@ public void testExceedMaxAnalyzedOffset() throws Exception { ); } - private void assertHighlightOneDoc( - String fieldName, - String[] inputs, - Analyzer analyzer, - Query query, - Locale locale, - BreakIterator breakIterator, - int noMatchSize, - String[] expectedPassages, - int maxAnalyzedOffset, - Integer queryMaxAnalyzedOffset, - UnifiedHighlighter.OffsetSource offsetSource - ) throws Exception { - try (Directory dir = newDirectory()) { - IndexWriterConfig iwc = newIndexWriterConfig(analyzer); - iwc.setMergePolicy(newTieredMergePolicy(random())); - RandomIndexWriter iw = new RandomIndexWriter(random(), dir, iwc); - FieldType ft = new FieldType(TextField.TYPE_STORED); - ft.setIndexOptions(IndexOptions.DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS); - ft.freeze(); - Document doc = new Document(); - for (String input : inputs) { - Field field = new Field(fieldName, "", ft); - field.setStringValue(input); - doc.add(field); - } - iw.addDocument(doc); - try (DirectoryReader reader = iw.getReader()) { - IndexSearcher searcher = newSearcher(reader); - iw.close(); - TopDocs topDocs = searcher.search(new MatchAllDocsQuery(), 1, Sort.INDEXORDER); - assertThat(topDocs.totalHits.value, equalTo(1L)); - String rawValue = Strings.arrayToDelimitedString(inputs, String.valueOf(MULTIVAL_SEP_CHAR)); - CustomUnifiedHighlighter highlighter = new CustomUnifiedHighlighter( - searcher, - wrapAnalyzer(analyzer,queryMaxAnalyzedOffset), - offsetSource, - new CustomPassageFormatter("", "", new DefaultEncoder()), - locale, - breakIterator, - "index", - "text", - query, - noMatchSize, - expectedPassages.length, - name -> "text".equals(name), - maxAnalyzedOffset, - queryMaxAnalyzedOffset - ); - final Snippet[] snippets = highlighter.highlightField(getOnlyLeafReader(reader), topDocs.scoreDocs[0].doc, () -> rawValue); - assertEquals(snippets.length, expectedPassages.length); - for (int i = 0; i < snippets.length; i++) { - assertEquals(snippets[i].getText(), expectedPassages[i]); - } - } - } - } public void testExceedMaxAnalyzedOffsetWithRepeatedWords() throws Exception { TermQuery query = new TermQuery(new Term("text", "Fun")); @@ -487,11 +459,39 @@ public void testExceedMaxAnalyzedOffsetWithRepeatedWords() throws Exception { ); } - - protected Analyzer wrapAnalyzer(Analyzer analyzer, Integer maxAnalyzedOffset) { - if (maxAnalyzedOffset != null) { - analyzer = new LimitTokenOffsetAnalyzer(analyzer, maxAnalyzedOffset); - } - return analyzer; + public void testExceedMaxAnalyzedOffsetRandomOffset() throws Exception { + TermQuery query = new TermQuery(new Term("text", "fun")); + Analyzer analyzer = new WhitespaceAnalyzer(); + UnifiedHighlighter.OffsetSource offsetSource = randomBoolean() + ? UnifiedHighlighter.OffsetSource.ANALYSIS + : UnifiedHighlighter.OffsetSource.POSTINGS; + final String[] inputs = { "Fun fun fun fun fun" }; + TreeMap outputs = new TreeMap<>( + Map.of( + 7, + "Fun fun fun fun fun", + 11, + "Fun fun fun fun fun", + 15, + "Fun fun fun fun fun", + 19, + "Fun fun fun fun fun" + ) + ); + Integer randomOffset = between(1, 19); + String output = outputs.ceilingEntry(randomOffset).getValue(); + assertHighlightOneDoc( + "text", + inputs, + analyzer, + query, + Locale.ROOT, + BreakIterator.getSentenceInstance(Locale.ROOT), + 0, + new String[] { output }, + 47, + randomOffset, + offsetSource + ); } } From e18513f96d5edf5887329cf3b73927dd0587820a Mon Sep 17 00:00:00 2001 From: luyuncheng Date: Tue, 18 Oct 2022 18:07:10 +0800 Subject: [PATCH 3/6] Fixed CustomFieldHighlighter for param AND remove some comment --- .../lucene/search/uhighlight/CustomFieldHighlighter.java | 5 ++--- .../lucene/search/uhighlight/LimitedOffsetsEnum.java | 6 +++--- .../search/uhighlight/CustomUnifiedHighlighterTests.java | 1 - 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/server/src/main/java/org/elasticsearch/lucene/search/uhighlight/CustomFieldHighlighter.java b/server/src/main/java/org/elasticsearch/lucene/search/uhighlight/CustomFieldHighlighter.java index 89d65b9cc6838..cd781829dd08c 100644 --- a/server/src/main/java/org/elasticsearch/lucene/search/uhighlight/CustomFieldHighlighter.java +++ b/server/src/main/java/org/elasticsearch/lucene/search/uhighlight/CustomFieldHighlighter.java @@ -109,9 +109,8 @@ protected Passage[] getSummaryPassagesNoHighlight(int maxPassages) { @Override protected Passage[] highlightOffsetsEnums(OffsetsEnum off) throws IOException { - OffsetsEnum wrapOff = off; if (queryMaxAnalyzedOffset != null) { - wrapOff = new LimitedOffsetsEnum(off, queryMaxAnalyzedOffset); + off = new LimitedOffsetsEnum(off, queryMaxAnalyzedOffset); } final int contentLength = this.breakIterator.getText().getEndIndex(); @@ -154,7 +153,7 @@ protected Passage[] highlightOffsetsEnums(OffsetsEnum off) throws IOException { BytesRef term = off.getTerm();// a reference; safe to refer to assert term != null; passage.addMatch(start, end, term, off.freq()); - } while (wrapOff.nextPosition()); + } while (off.nextPosition()); maybeAddPassage(passageQueue, passageScorer, passage, contentLength); Passage[] passages = passageQueue.toArray(new Passage[passageQueue.size()]); diff --git a/server/src/main/java/org/elasticsearch/lucene/search/uhighlight/LimitedOffsetsEnum.java b/server/src/main/java/org/elasticsearch/lucene/search/uhighlight/LimitedOffsetsEnum.java index 616edde8dbabe..55089e79beff3 100644 --- a/server/src/main/java/org/elasticsearch/lucene/search/uhighlight/LimitedOffsetsEnum.java +++ b/server/src/main/java/org/elasticsearch/lucene/search/uhighlight/LimitedOffsetsEnum.java @@ -16,9 +16,9 @@ public class LimitedOffsetsEnum extends OffsetsEnum { private final OffsetsEnum delegate; - private final Integer maxOffset; + private final int maxOffset; - public LimitedOffsetsEnum(OffsetsEnum delegate, @Nullable Integer maxOffset) { + public LimitedOffsetsEnum(OffsetsEnum delegate, int maxOffset) { this.delegate = delegate; this.maxOffset = maxOffset; } @@ -29,7 +29,7 @@ public boolean nextPosition() throws IOException { if (!next) { return next; } - if (maxOffset != null && delegate.startOffset() > maxOffset) { + if (delegate.startOffset() > maxOffset) { return false; } return next; diff --git a/server/src/test/java/org/elasticsearch/lucene/search/uhighlight/CustomUnifiedHighlighterTests.java b/server/src/test/java/org/elasticsearch/lucene/search/uhighlight/CustomUnifiedHighlighterTests.java index 399ccf3e33644..be17fb0871d73 100644 --- a/server/src/test/java/org/elasticsearch/lucene/search/uhighlight/CustomUnifiedHighlighterTests.java +++ b/server/src/test/java/org/elasticsearch/lucene/search/uhighlight/CustomUnifiedHighlighterTests.java @@ -451,7 +451,6 @@ public void testExceedMaxAnalyzedOffsetWithRepeatedWords() throws Exception { Locale.ROOT, BreakIterator.getSentenceInstance(Locale.ROOT), 0, - // OLD Strategy would Response: "Testing Fun Testing Fun" new String[] { "Testing Fun Testing Fun" }, 29, 10, From c4d8524298dc3b742b7b941740848398c11509ef Mon Sep 17 00:00:00 2001 From: luyuncheng Date: Tue, 18 Oct 2022 18:14:47 +0800 Subject: [PATCH 4/6] Remove unnecessary import --- .../lucene/search/uhighlight/LimitedOffsetsEnum.java | 1 - 1 file changed, 1 deletion(-) diff --git a/server/src/main/java/org/elasticsearch/lucene/search/uhighlight/LimitedOffsetsEnum.java b/server/src/main/java/org/elasticsearch/lucene/search/uhighlight/LimitedOffsetsEnum.java index 55089e79beff3..3336c3e575716 100644 --- a/server/src/main/java/org/elasticsearch/lucene/search/uhighlight/LimitedOffsetsEnum.java +++ b/server/src/main/java/org/elasticsearch/lucene/search/uhighlight/LimitedOffsetsEnum.java @@ -10,7 +10,6 @@ import org.apache.lucene.search.uhighlight.OffsetsEnum; import org.apache.lucene.util.BytesRef; -import org.elasticsearch.core.Nullable; import java.io.IOException; From 8e9b8c26d0cc324abeb842325b78aecea77b07e0 Mon Sep 17 00:00:00 2001 From: luyuncheng Date: Tue, 18 Oct 2022 18:50:40 +0800 Subject: [PATCH 5/6] Update 86110.yaml Fixed chagelog area --- docs/changelog/86110.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/changelog/86110.yaml b/docs/changelog/86110.yaml index b0cd98efefc94..376cadaa56602 100644 --- a/docs/changelog/86110.yaml +++ b/docs/changelog/86110.yaml @@ -1,6 +1,6 @@ pr: 86110 summary: Add LimitedOffsetsEnum to Limited offset token -area: Search/Highlighting +area: Search type: enhancement issues: - 86109 From 3eca380cd6d10d43006367587de3026d4fb8132a Mon Sep 17 00:00:00 2001 From: luyuncheng Date: Tue, 18 Oct 2022 21:38:38 +0800 Subject: [PATCH 6/6] precommit check --- .../lucene/search/uhighlight/LimitedOffsetsEnum.java | 2 +- .../lucene/search/uhighlight/CustomUnifiedHighlighterTests.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/server/src/main/java/org/elasticsearch/lucene/search/uhighlight/LimitedOffsetsEnum.java b/server/src/main/java/org/elasticsearch/lucene/search/uhighlight/LimitedOffsetsEnum.java index 3336c3e575716..aebe135d4db53 100644 --- a/server/src/main/java/org/elasticsearch/lucene/search/uhighlight/LimitedOffsetsEnum.java +++ b/server/src/main/java/org/elasticsearch/lucene/search/uhighlight/LimitedOffsetsEnum.java @@ -25,7 +25,7 @@ public LimitedOffsetsEnum(OffsetsEnum delegate, int maxOffset) { @Override public boolean nextPosition() throws IOException { boolean next = delegate.nextPosition(); - if (!next) { + if (next == false) { return next; } if (delegate.startOffset() > maxOffset) { diff --git a/server/src/test/java/org/elasticsearch/lucene/search/uhighlight/CustomUnifiedHighlighterTests.java b/server/src/test/java/org/elasticsearch/lucene/search/uhighlight/CustomUnifiedHighlighterTests.java index be17fb0871d73..74d70f179697b 100644 --- a/server/src/test/java/org/elasticsearch/lucene/search/uhighlight/CustomUnifiedHighlighterTests.java +++ b/server/src/test/java/org/elasticsearch/lucene/search/uhighlight/CustomUnifiedHighlighterTests.java @@ -477,7 +477,7 @@ public void testExceedMaxAnalyzedOffsetRandomOffset() throws Exception { "Fun fun fun fun fun" ) ); - Integer randomOffset = between(1, 19); + Integer randomOffset = between(7, 19); String output = outputs.ceilingEntry(randomOffset).getValue(); assertHighlightOneDoc( "text",