diff options
Diffstat (limited to 'branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/HighlightingUtil.java')
-rw-r--r-- | branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/HighlightingUtil.java | 69 |
1 files changed, 51 insertions, 18 deletions
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<String, Result> 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, |