You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ko...@apache.org on 2010/08/03 17:45:07 UTC

svn commit: r981936 - in /lucene/dev/trunk/solr: ./ example/solr/conf/ src/common/org/apache/solr/common/params/ src/java/org/apache/solr/highlight/

Author: koji
Date: Tue Aug  3 15:45:07 2010
New Revision: 981936

URL: http://svn.apache.org/viewvc?rev=981936&view=rev
Log:
SOLR-2021: Add SolrEncoder plugin to Highlighter

Modified:
    lucene/dev/trunk/solr/CHANGES.txt
    lucene/dev/trunk/solr/example/solr/conf/solrconfig.xml
    lucene/dev/trunk/solr/src/common/org/apache/solr/common/params/HighlightParams.java
    lucene/dev/trunk/solr/src/java/org/apache/solr/highlight/DefaultSolrHighlighter.java
    lucene/dev/trunk/solr/src/java/org/apache/solr/highlight/SolrHighlighter.java

Modified: lucene/dev/trunk/solr/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/CHANGES.txt?rev=981936&r1=981935&r2=981936&view=diff
==============================================================================
--- lucene/dev/trunk/solr/CHANGES.txt (original)
+++ lucene/dev/trunk/solr/CHANGES.txt Tue Aug  3 15:45:07 2010
@@ -220,6 +220,8 @@ New Features
   to dates.  
   (Gijs Kunze, hossman)
 
+* SOLR-2021: Add SolrEncoder plugin to Highlighter. (koji)
+
 Optimizations
 ----------------------
 

Modified: lucene/dev/trunk/solr/example/solr/conf/solrconfig.xml
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/example/solr/conf/solrconfig.xml?rev=981936&r1=981935&r2=981936&view=diff
==============================================================================
--- lucene/dev/trunk/solr/example/solr/conf/solrconfig.xml (original)
+++ lucene/dev/trunk/solr/example/solr/conf/solrconfig.xml Tue Aug  3 15:45:07 2010
@@ -978,45 +978,49 @@
      <str name="echoHandler">true</str>
     </lst>
   </requestHandler>
+  
   <searchComponent class="solr.HighlightComponent" name="highlight">
-  <highlighting>
-   <!-- Configure the standard fragmenter -->
-   <!-- This could most likely be commented out in the "default" case -->
-   <fragmenter name="gap" class="org.apache.solr.highlight.GapFragmenter" default="true">
-    <lst name="defaults">
-     <int name="hl.fragsize">100</int>
-    </lst>
-   </fragmenter>
-
-   <!-- A regular-expression-based fragmenter (f.i., for sentence extraction) -->
-   <fragmenter name="regex" class="org.apache.solr.highlight.RegexFragmenter">
-    <lst name="defaults">
-      <!-- slightly smaller fragsizes work better because of slop -->
-      <int name="hl.fragsize">70</int>
-      <!-- allow 50% slop on fragment sizes -->
-      <float name="hl.regex.slop">0.5</float>
-      <!-- a basic sentence pattern -->
-      <str name="hl.regex.pattern">[-\w ,/\n\&quot;&apos;]{20,200}</str>
-    </lst>
-   </fragmenter>
-
-   <!-- Configure the standard formatter -->
-   <formatter name="html" class="org.apache.solr.highlight.HtmlFormatter" default="true">
-    <lst name="defaults">
-     <str name="hl.simple.pre"><![CDATA[<em>]]></str>
-     <str name="hl.simple.post"><![CDATA[</em>]]></str>
-    </lst>
-   </formatter>
-
-   <!-- Configure the standard fragListBuilder -->
-   <fragListBuilder name="simple" class="org.apache.solr.highlight.SimpleFragListBuilder" default="true"/>
-
-   <!-- Configure the single fragListBuilder -->
-   <fragListBuilder name="single" class="org.apache.solr.highlight.SingleFragListBuilder"/>
-
-   <!-- multi-colored tag FragmentsBuilder -->
-   <fragmentsBuilder name="colored" class="org.apache.solr.highlight.MultiColoredScoreOrderFragmentsBuilder" default="true"/>
-  </highlighting>
+    <highlighting>
+      <!-- Configure the standard fragmenter -->
+      <!-- This could most likely be commented out in the "default" case -->
+      <fragmenter name="gap" class="org.apache.solr.highlight.GapFragmenter" default="true">
+        <lst name="defaults">
+          <int name="hl.fragsize">100</int>
+        </lst>
+      </fragmenter>
+
+      <!-- A regular-expression-based fragmenter (f.i., for sentence extraction) -->
+      <fragmenter name="regex" class="org.apache.solr.highlight.RegexFragmenter">
+        <lst name="defaults">
+          <!-- slightly smaller fragsizes work better because of slop -->
+          <int name="hl.fragsize">70</int>
+          <!-- allow 50% slop on fragment sizes -->
+          <float name="hl.regex.slop">0.5</float>
+          <!-- a basic sentence pattern -->
+          <str name="hl.regex.pattern">[-\w ,/\n\&quot;&apos;]{20,200}</str>
+        </lst>
+      </fragmenter>
+
+      <!-- Configure the standard formatter -->
+      <formatter name="html" class="org.apache.solr.highlight.HtmlFormatter" default="true">
+        <lst name="defaults">
+          <str name="hl.simple.pre"><![CDATA[<em>]]></str>
+          <str name="hl.simple.post"><![CDATA[</em>]]></str>
+        </lst>
+      </formatter>
+
+      <!-- Configure the standard encoder -->
+      <encoder name="html" class="org.apache.solr.highlight.HtmlEncoder" default="true"/>
+
+      <!-- Configure the standard fragListBuilder -->
+      <fragListBuilder name="simple" class="org.apache.solr.highlight.SimpleFragListBuilder" default="true"/>
+
+      <!-- Configure the single fragListBuilder -->
+      <fragListBuilder name="single" class="org.apache.solr.highlight.SingleFragListBuilder"/>
+
+      <!-- multi-colored tag FragmentsBuilder -->
+      <fragmentsBuilder name="colored" class="org.apache.solr.highlight.MultiColoredScoreOrderFragmentsBuilder" default="true"/>
+    </highlighting>
   </searchComponent>
 
   <!-- An example dedup update processor that creates the "id" field on the fly

Modified: lucene/dev/trunk/solr/src/common/org/apache/solr/common/params/HighlightParams.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/src/common/org/apache/solr/common/params/HighlightParams.java?rev=981936&r1=981935&r2=981936&view=diff
==============================================================================
--- lucene/dev/trunk/solr/src/common/org/apache/solr/common/params/HighlightParams.java (original)
+++ lucene/dev/trunk/solr/src/common/org/apache/solr/common/params/HighlightParams.java Tue Aug  3 15:45:07 2010
@@ -29,6 +29,7 @@ public interface HighlightParams {
   public static final String INCREMENT   = HIGHLIGHT+".increment";
   public static final String MAX_CHARS   = HIGHLIGHT+".maxAnalyzedChars";
   public static final String FORMATTER   = HIGHLIGHT+".formatter";
+  public static final String ENCODER     = HIGHLIGHT+".encoder";
   public static final String FRAGMENTER  = HIGHLIGHT+".fragmenter";
   public static final String FRAG_LIST_BUILDER = HIGHLIGHT+".fragListBuilder";
   public static final String FRAGMENTS_BUILDER = HIGHLIGHT+".fragmentsBuilder";

Modified: lucene/dev/trunk/solr/src/java/org/apache/solr/highlight/DefaultSolrHighlighter.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/src/java/org/apache/solr/highlight/DefaultSolrHighlighter.java?rev=981936&r1=981935&r2=981936&view=diff
==============================================================================
--- lucene/dev/trunk/solr/src/java/org/apache/solr/highlight/DefaultSolrHighlighter.java (original)
+++ lucene/dev/trunk/solr/src/java/org/apache/solr/highlight/DefaultSolrHighlighter.java Tue Aug  3 15:45:07 2010
@@ -80,6 +80,7 @@ public class DefaultSolrHighlighter exte
 
   public void init(PluginInfo info) {
     formatters.clear();
+    encoders.clear();
     fragmenters.clear();
     fragListBuilders.clear();
     fragmentsBuilders.clear();
@@ -96,6 +97,12 @@ public class DefaultSolrHighlighter exte
     formatters.put("", fmt);
     formatters.put(null, fmt);
 
+    // Load the formatters
+    SolrEncoder enc = solrCore.initPlugins(info.getChildren("encoder"), encoders,SolrEncoder.class,null);
+    if (enc == null) enc = new DefaultEncoder();
+    encoders.put("", enc);
+    encoders.put(null, enc);
+
     // Load the FragListBuilders
     SolrFragListBuilder fragListBuilder = solrCore.initPlugins(info.getChildren("fragListBuilder"),
         fragListBuilders, SolrFragListBuilder.class, null );
@@ -126,6 +133,10 @@ public class DefaultSolrHighlighter exte
     formatters.put("", fmt);
     formatters.put(null, fmt);    
 
+    SolrEncoder enc = new DefaultEncoder();
+    encoders.put("", enc);
+    encoders.put(null, enc);    
+
     SolrFragListBuilder fragListBuilder = new SimpleFragListBuilder();
     fragListBuilders.put( "", fragListBuilder );
     fragListBuilders.put( null, fragListBuilder );
@@ -147,7 +158,10 @@ public class DefaultSolrHighlighter exte
     SolrParams params = request.getParams();
     Highlighter highlighter = null;
     
-    highlighter = new Highlighter(getFormatter(fieldName, params), getSpanQueryScorer(query, fieldName, tokenStream, request));
+    highlighter = new Highlighter(
+        getFormatter(fieldName, params),
+        getEncoder(fieldName, params),
+        getSpanQueryScorer(query, fieldName, tokenStream, request));
     
     highlighter.setTextFragmenter(getFragmenter(fieldName, params));
 
@@ -164,6 +178,7 @@ public class DefaultSolrHighlighter exte
     SolrParams params = request.getParams(); 
     Highlighter highlighter = new Highlighter(
            getFormatter(fieldName, params), 
+           getEncoder(fieldName, params),
            getQueryScorer(query, fieldName, request));
      highlighter.setTextFragmenter(getFragmenter(fieldName, params));
        return highlighter;
@@ -248,6 +263,24 @@ public class DefaultSolrHighlighter exte
     }
     return formatter.getFormatter( fieldName, params );
   }
+
+  /**
+   * Return an {@link org.apache.lucene.search.highlight.Encoder} appropriate for this field. If an encoder
+   * has not been configured for this field, fall back to the configured
+   * default or the solr default ({@link org.apache.lucene.search.highlight.DefaultEncoder}).
+   * 
+   * @param fieldName The name of the field
+   * @param params The params controlling Highlighting
+   * @return An appropriate {@link org.apache.lucene.search.highlight.Encoder}.
+   */
+  protected Encoder getEncoder(String fieldName, SolrParams params){
+    String str = params.getFieldParam( fieldName, HighlightParams.ENCODER );
+    SolrEncoder encoder = encoders.get( str );
+    if( encoder == null ) {
+      throw new SolrException( SolrException.ErrorCode.BAD_REQUEST, "Unknown encoder: "+str );
+    }
+    return encoder.getEncoder( fieldName, params );
+  }
   
   /**
    * Return a {@link org.apache.lucene.search.highlight.Fragmenter} appropriate for this field. If a fragmenter

Modified: lucene/dev/trunk/solr/src/java/org/apache/solr/highlight/SolrHighlighter.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/src/java/org/apache/solr/highlight/SolrHighlighter.java?rev=981936&r1=981935&r2=981936&view=diff
==============================================================================
--- lucene/dev/trunk/solr/src/java/org/apache/solr/highlight/SolrHighlighter.java (original)
+++ lucene/dev/trunk/solr/src/java/org/apache/solr/highlight/SolrHighlighter.java Tue Aug  3 15:45:07 2010
@@ -44,6 +44,10 @@ public abstract class SolrHighlighter
     new HashMap<String, SolrFormatter>();
 
   // Thread safe registry
+  protected final Map<String,SolrEncoder> encoders =
+    new HashMap<String, SolrEncoder>();
+
+  // Thread safe registry
   protected final Map<String,SolrFragmenter> fragmenters =
     new HashMap<String, SolrFragmenter>() ;