diff --git a/solr/core/src/java/org/apache/solr/highlight/UnifiedSolrHighlighter.java b/solr/core/src/java/org/apache/solr/highlight/UnifiedSolrHighlighter.java index 5b59b856167..263352234ad 100644 --- a/solr/core/src/java/org/apache/solr/highlight/UnifiedSolrHighlighter.java +++ b/solr/core/src/java/org/apache/solr/highlight/UnifiedSolrHighlighter.java @@ -295,6 +295,13 @@ public class UnifiedSolrHighlighter extends SolrHighlighter implements PluginInf @Override protected BreakIterator getBreakIterator(String field) { + // Use a default fragsize the same as the regex Fragmenter (original Highlighter) since we're + // both likely shooting for sentence-like patterns. + int fragsize = params.getFieldInt(field, HighlightParams.FRAGSIZE, LuceneRegexFragmenter.DEFAULT_FRAGMENT_SIZE); + if (fragsize == 0) { // special value; no fragmenting + return new WholeBreakIterator(); + } + String language = params.getFieldParam(field, HighlightParams.BS_LANGUAGE); String country = params.getFieldParam(field, HighlightParams.BS_COUNTRY); String variant = params.getFieldParam(field, HighlightParams.BS_VARIANT); @@ -302,9 +309,6 @@ public class UnifiedSolrHighlighter extends SolrHighlighter implements PluginInf String type = params.getFieldParam(field, HighlightParams.BS_TYPE); BreakIterator baseBI = parseBreakIterator(type, locale); - // Use a default fragsize the same as the regex Fragmenter (original Highlighter) since we're - // both likely shooting for sentence-like patterns. - int fragsize = params.getFieldInt(field, HighlightParams.FRAGSIZE, LuceneRegexFragmenter.DEFAULT_FRAGMENT_SIZE); if (fragsize <= 1 || baseBI instanceof WholeBreakIterator) { // no real minimum size return baseBI; } diff --git a/solr/core/src/test/org/apache/solr/highlight/TestUnifiedSolrHighlighter.java b/solr/core/src/test/org/apache/solr/highlight/TestUnifiedSolrHighlighter.java index 2eb4ba3f8c5..d4528292f8f 100644 --- a/solr/core/src/test/org/apache/solr/highlight/TestUnifiedSolrHighlighter.java +++ b/solr/core/src/test/org/apache/solr/highlight/TestUnifiedSolrHighlighter.java @@ -79,7 +79,7 @@ public class TestUnifiedSolrHighlighter extends SolrTestCaseJ4 { assertU(commit()); assertQ("multiple snippets test", req("q", "text:document", "sort", "id asc", "hl", "true", "hl.snippets", "2", "hl.bs.type", "SENTENCE", - "hl.fragsize", "0"), + "hl.fragsize", "-1"), "count(//lst[@name='highlighting']/lst[@name='101']/arr[@name='text']/*)=2", "//lst[@name='highlighting']/lst[@name='101']/arr/str[1]='Document snippet one. '", "//lst[@name='highlighting']/lst[@name='101']/arr/str[2]='Document snippet two.'"); @@ -214,9 +214,12 @@ public class TestUnifiedSolrHighlighter extends SolrTestCaseJ4 { public void testBreakIteratorWhole() { assertU(adoc("text", "Document one has a first sentence. Document two has a second sentence.", "id", "103")); assertU(commit()); - assertQ("different breakiterator", + assertQ("WHOLE breakiterator", req("q", "text:document", "sort", "id asc", "hl", "true", "hl.bs.type", "WHOLE", "hl.fragsize", "-1"), "//lst[@name='highlighting']/lst[@name='103']/arr[@name='text']/str='Document one has a first sentence. Document two has a second sentence.'"); + assertQ("hl.fragsize 0 is equivalent to WHOLE", + req("q", "text:document", "sort", "id asc", "hl", "true", "hl.fragsize", "0"), + "//lst[@name='highlighting']/lst[@name='103']/arr[@name='text']/str='Document one has a first sentence. Document two has a second sentence.'"); } public void testFragsize() {