diff --git a/search-services/alfresco-search/src/main/java/org/apache/solr/handler/component/AlfrescoSolrHighlighter.java b/search-services/alfresco-search/src/main/java/org/apache/solr/handler/component/AlfrescoSolrHighlighter.java index 03e10a785..e55b69c8a 100644 --- a/search-services/alfresco-search/src/main/java/org/apache/solr/handler/component/AlfrescoSolrHighlighter.java +++ b/search-services/alfresco-search/src/main/java/org/apache/solr/handler/component/AlfrescoSolrHighlighter.java @@ -48,7 +48,6 @@ import org.apache.lucene.index.LeafReader; import org.apache.lucene.index.Terms; import org.apache.lucene.search.Query; import org.apache.lucene.search.highlight.Encoder; -import org.apache.lucene.search.highlight.Fragmenter; import org.apache.lucene.search.highlight.Highlighter; import org.apache.lucene.search.highlight.InvalidTokenOffsetsException; import org.apache.lucene.search.highlight.OffsetLimitTokenFilter; @@ -69,7 +68,6 @@ import org.apache.solr.common.util.SimpleOrderedMap; import org.apache.solr.core.CoreContainer; import org.apache.solr.core.SolrCore; import org.apache.solr.highlight.DefaultSolrHighlighter; -import org.apache.solr.highlight.SolrFragmenter; import org.apache.solr.highlight.SolrHighlighter; import org.apache.solr.request.SolrQueryRequest; import org.apache.solr.schema.IndexSchema; @@ -215,6 +213,14 @@ public class AlfrescoSolrHighlighter extends DefaultSolrHighlighter implements // key field return null; + boolean rewrite = query != null && !(Boolean.valueOf(params.get(HighlightParams.USE_PHRASE_HIGHLIGHTER, "true")) && + Boolean.valueOf(params.get(HighlightParams.HIGHLIGHT_MULTI_TERM, "true"))); + + if (rewrite) { + query = query.rewrite(req.getSearcher().getIndexReader()); + } + + SolrIndexSearcher searcher = req.getSearcher(); IndexSchema schema = searcher.getSchema(); @@ -356,7 +362,7 @@ public class AlfrescoSolrHighlighter extends DefaultSolrHighlighter implements int maxCharsToAnalyze = params.getFieldInt(fieldName, HighlightParams.MAX_CHARS, - Highlighter.DEFAULT_MAX_CHARS_TO_ANALYZE); + DEFAULT_MAX_CHARS); if (maxCharsToAnalyze < 0) {//e.g. -1 maxCharsToAnalyze = Integer.MAX_VALUE; } @@ -582,8 +588,7 @@ public class AlfrescoSolrHighlighter extends DefaultSolrHighlighter implements // note: seemingly redundant new String(...) releases memory to // the larger text. But is copying better? altList.add(len + altText.length() > alternateFieldLen ? encoder - .encodeText(new String(altText.substring(0, - alternateFieldLen - len))) : encoder + .encodeText(altText.substring(0, alternateFieldLen - len)) : encoder .encodeText(altText)); len += altText.length(); if (len >= alternateFieldLen) diff --git a/search-services/alfresco-search/src/test/java/org/alfresco/solr/highlight/AlfrescoHighlighterTest.java b/search-services/alfresco-search/src/test/java/org/alfresco/solr/highlight/AlfrescoHighlighterTest.java index 6cb85a868..e28ab9645 100644 --- a/search-services/alfresco-search/src/test/java/org/alfresco/solr/highlight/AlfrescoHighlighterTest.java +++ b/search-services/alfresco-search/src/test/java/org/alfresco/solr/highlight/AlfrescoHighlighterTest.java @@ -307,7 +307,7 @@ public class AlfrescoHighlighterTest extends AbstractAlfrescoSolrTests "*[count(//lst[@name='highlighting']/lst/arr[@name='name'])=0]", "//lst[@name='highlighting']/lst[1]/arr[@name='title']/str[.='title1 is very {long}']"); -/** + logger.info("######### MultiTerm ###########"); req = areq(params( "q", "name:long", "qt", "/afts", "start", "0", "rows", "5", @@ -326,7 +326,7 @@ public class AlfrescoHighlighterTest extends AbstractAlfrescoSolrTests "*[count(//lst[@name='highlighting']/lst/arr[@name='title'])=0]", "*[count(//lst[@name='highlighting']/lst/arr[@name='name'])=0]"); - **/ + logger.info("######### CamelCase ###########"); req = areq(params( "q", "name:cabbage", "qt", "/afts", "start", "0", "rows", "5",