diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt index 18219d41643..2e1c70dda1f 100644 --- a/solr/CHANGES.txt +++ b/solr/CHANGES.txt @@ -148,6 +148,9 @@ Bug Fixes * SOLR-11297: Message "Lock held by this virtual machine" during startup. Solr is trying to start some cores twice. (Luiz Armesto, Shawn Heisey, Erick Erickson) +* SOLR-11399: The UnifiedHighlighter was ignoring the hl.fragsize parameter when hl.bs.type=SEPARATOR + (Marc Morissette via David Smiley) + Optimizations ---------------------- 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 48cb874f499..a4beaba5a33 100644 --- a/solr/core/src/java/org/apache/solr/highlight/UnifiedSolrHighlighter.java +++ b/solr/core/src/java/org/apache/solr/highlight/UnifiedSolrHighlighter.java @@ -310,15 +310,19 @@ public class UnifiedSolrHighlighter extends SolrHighlighter implements PluginInf String type = params.getFieldParam(field, HighlightParams.BS_TYPE); if (fragsize == 0 || "WHOLE".equals(type)) { // 0 is special value; no fragmenting return new WholeBreakIterator(); - } else if ("SEPARATOR".equals(type)) { - char customSep = parseBiSepChar(params.getFieldParam(field, HighlightParams.BS_SEP)); - return new CustomSeparatorBreakIterator(customSep); } - String language = params.getFieldParam(field, HighlightParams.BS_LANGUAGE); - String country = params.getFieldParam(field, HighlightParams.BS_COUNTRY); - String variant = params.getFieldParam(field, HighlightParams.BS_VARIANT); - Locale locale = parseLocale(language, country, variant); - BreakIterator baseBI = parseBreakIterator(type, locale); + + BreakIterator baseBI; + if ("SEPARATOR".equals(type)) { + char customSep = parseBiSepChar(params.getFieldParam(field, HighlightParams.BS_SEP)); + baseBI = new CustomSeparatorBreakIterator(customSep); + } else { + String language = params.getFieldParam(field, HighlightParams.BS_LANGUAGE); + String country = params.getFieldParam(field, HighlightParams.BS_COUNTRY); + String variant = params.getFieldParam(field, HighlightParams.BS_VARIANT); + Locale locale = parseLocale(language, country, variant); + baseBI = parseBreakIterator(type, locale); + } if (fragsize <= 1) { // 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 ad1ca0336ef..aeffed1f69d 100644 --- a/solr/core/src/test/org/apache/solr/highlight/TestUnifiedSolrHighlighter.java +++ b/solr/core/src/test/org/apache/solr/highlight/TestUnifiedSolrHighlighter.java @@ -256,6 +256,9 @@ public class TestUnifiedSolrHighlighter extends SolrTestCaseJ4 { req("q", "text:document", "sort", "id asc", "hl", "true", "hl.bs.type", "SEPARATOR","hl.bs.separator","#","hl.fragsize", "-1"), "//lst[@name='highlighting']/lst[@name='104']/arr[@name='text']/str='While the other document contains the same #'"); + assertQ("CUSTOM breakiterator with fragsize 70", + req("q", "text:document", "sort", "id asc", "hl", "true", "hl.bs.type", "SEPARATOR","hl.bs.separator","#","hl.fragsize", "70"), + "//lst[@name='highlighting']/lst[@name='103']/arr[@name='text']/str='This document contains # special characters, while the other document contains the same #'"); } public void testFragsize() {