summaryrefslogtreecommitdiffstats
path: root/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/HighlightingUtil.java
diff options
context:
space:
mode:
authoradrianocrestani <adrianocrestani@13f79535-47bb-0310-9956-ffa450edef68>2009-08-10 01:40:02 +0000
committeradrianocrestani <adrianocrestani@13f79535-47bb-0310-9956-ffa450edef68>2009-08-10 01:40:02 +0000
commit8e7db232ee169c8d8513c8e8a84921d905e4af2d (patch)
tree0cc43203723c019a13f23a1b46b466639ed37da0 /branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/HighlightingUtil.java
parent1dff5319f17ee5bec9588675d43a84e836627a5d (diff)
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
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.java69
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,