From 8e7db232ee169c8d8513c8e8a84921d905e4af2d Mon Sep 17 00:00:00 2001 From: adrianocrestani Date: Mon, 10 Aug 2009 01:40:02 +0000 Subject: applying tuscany_2552_domain_search_phillipe_ramalho_08_08_2009.patch and tuscany_2552_domain_manager_phillipe_ramalho_08_08_2009.patch submitted to TUSCANY-2552 git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@802637 13f79535-47bb-0310-9956-ffa450edef68 --- .../sca/domain/search/impl/HighlightingUtil.java | 69 ++++++++++++++++------ 1 file changed, 51 insertions(+), 18 deletions(-) (limited to 'branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/HighlightingUtil.java') diff --git a/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/HighlightingUtil.java b/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/HighlightingUtil.java index 0703438125..942679169f 100644 --- a/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/HighlightingUtil.java +++ b/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/HighlightingUtil.java @@ -1,43 +1,76 @@ package org.apache.tuscany.sca.domain.search.impl; import java.io.IOException; -import java.io.Reader; import java.io.StringReader; +import java.util.Map; import org.apache.lucene.analysis.CachingTokenFilter; import org.apache.lucene.search.Query; +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.NullFragmenter; import org.apache.lucene.search.highlight.SimpleFragmenter; import org.apache.lucene.search.highlight.SpanScorer; +import org.apache.tuscany.sca.domain.search.Result; final public class HighlightingUtil { - public static String bestFragmentHighlighted(Query query, Reader reader) throws IOException { - StringBuilder sb = new StringBuilder(); - int c; + public static void highlightResult(Result result, Query query) { + highlightResult(result, query, new SimpleFragmenter(70)); + } + + public static void highlightResult(Result result, Query query, Fragmenter fragmenter) { + Map contents = result.getContents(); + + if (contents != null) { + + for (Result content : contents.values()) { + highlightResult(content, query, fragmenter); + } + + } - // TODO: load the chars into a buffer instead of one at a time - while ((c = reader.read()) != -1) { - char character = (char) c; - - if (!Character.isIdentifierIgnorable(character)) { - sb.append(character); + try { + String highlightedText = HighlightingUtil.bestFragmentHighlighted( + result.getField(), query, result.getValue(), fragmenter); + + // checks if something was highlighted before resetting the value + if (highlightedText != null && highlightedText.length() > 0) { + result.setValue(highlightedText); } - + + } catch (IOException e) { + // ignore highlighting } + + } + + public static String highlight(String field, Query query, String text) throws IOException { + String highlightedText = bestFragmentHighlighted(field, query, text, new NullFragmenter()); - String text = sb.toString(); + if (highlightedText == null || text.length() >= highlightedText.length()) { + return text; + } - CachingTokenFilter tokenStream = new CachingTokenFilter(new NamingAnalyzer().tokenStream( - SearchFields.FILE_CONTENT_FIELD, new StringReader(text))); + return highlightedText; - Highlighter highlighter = new Highlighter(new DomainSearchFormatter(), new SpanScorer(query, SearchFields.FILE_CONTENT_FIELD, tokenStream, "")); - highlighter.setTextFragmenter(new SimpleFragmenter(100)); + } + + public static String bestFragmentHighlighted(String field, Query query, String text) throws IOException { + return bestFragmentHighlighted(field, query, text, new SimpleFragmenter(100)); + } + + public static String bestFragmentHighlighted(String field, Query query, String text, Fragmenter fragmenter) throws IOException { + CachingTokenFilter tokenStream = new CachingTokenFilter(new DomainSearchAnalyzer().tokenStream( + field, new StringReader(text))); + + Highlighter highlighter = new Highlighter(new DomainSearchFormatter(), new SpanScorer(query, field, tokenStream, "")); + highlighter.setTextFragmenter(fragmenter); tokenStream.reset(); try { - return highlighter.getBestFragments(tokenStream, text, 2, "..."); + return highlighter.getBestFragments(tokenStream, text, 2, " ... "); } catch (InvalidTokenOffsetsException e) { @@ -45,7 +78,7 @@ final public class HighlightingUtil { return ""; } - + } public static String replaceHighlightMarkupBy(CharSequence text, -- cgit v1.2.3