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/07 13:34:40 UTC

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

Author: koji
Date: Sat Aug  7 11:34:39 2010
New Revision: 983212

URL: http://svn.apache.org/viewvc?rev=983212&view=rev
Log:
FVH uses SolrEncoder

Removed:
    lucene/dev/trunk/solr/src/java/org/apache/solr/highlight/MultiColoredScoreOrderFragmentsBuilder.java
    lucene/dev/trunk/solr/src/java/org/apache/solr/highlight/MultiColoredSimpleFragmentsBuilder.java
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/ScoreOrderFragmentsBuilder.java
    lucene/dev/trunk/solr/src/java/org/apache/solr/highlight/SimpleFragmentsBuilder.java
    lucene/dev/trunk/solr/src/java/org/apache/solr/highlight/SolrFragmentsBuilder.java

Modified: lucene/dev/trunk/solr/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/CHANGES.txt?rev=983212&r1=983211&r2=983212&view=diff
==============================================================================
--- lucene/dev/trunk/solr/CHANGES.txt (original)
+++ lucene/dev/trunk/solr/CHANGES.txt Sat Aug  7 11:34:39 2010
@@ -222,6 +222,8 @@ New Features
 
 * SOLR-2021: Add SolrEncoder plugin to Highlighter. (koji)
 
+* SOLR-2030: Make FastVectorHighlighter use of SolrEncoder. (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=983212&r1=983211&r2=983212&view=diff
==============================================================================
--- lucene/dev/trunk/solr/example/solr/conf/solrconfig.xml (original)
+++ lucene/dev/trunk/solr/example/solr/conf/solrconfig.xml Sat Aug  7 11:34:39 2010
@@ -1018,8 +1018,21 @@
       <!-- Configure the single fragListBuilder -->
       <fragListBuilder name="single" class="org.apache.solr.highlight.SingleFragListBuilder"/>
 
+      <!-- default tag FragmentsBuilder -->
+      <fragmentsBuilder name="default" class="org.apache.solr.highlight.ScoreOrderFragmentsBuilder" default="true"/>
+
       <!-- multi-colored tag FragmentsBuilder -->
-      <fragmentsBuilder name="colored" class="org.apache.solr.highlight.MultiColoredScoreOrderFragmentsBuilder" default="true"/>
+      <fragmentsBuilder name="colored" class="org.apache.solr.highlight.ScoreOrderFragmentsBuilder">
+        <lst name="defaults">
+          <str name="hl.tag.pre"><![CDATA[
+               <b style="background:yellow">,<b style="background:lawgreen">,
+               <b style="background:aquamarine">,<b style="background:magenta">,
+               <b style="background:palegreen">,<b style="background:coral">,
+               <b style="background:wheat">,<b style="background:khaki">,
+               <b style="background:lime">,<b style="background:deepskyblue">]]></str>
+          <str name="hl.tag.post"><![CDATA[</b>]]></str>
+        </lst>
+      </fragmentsBuilder>
     </highlighting>
   </searchComponent>
 

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=983212&r1=983211&r2=983212&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 Sat Aug  7 11:34:39 2010
@@ -42,7 +42,9 @@ public interface HighlightParams {
 
   public static final String MERGE_CONTIGUOUS_FRAGMENTS = HIGHLIGHT + ".mergeContiguous";
 
-  public static final String USE_FVH = HIGHLIGHT + ".useFastVectorHighlighter";
+  public static final String USE_FVH  = HIGHLIGHT + ".useFastVectorHighlighter";
+  public static final String TAG_PRE  = HIGHLIGHT + ".tag.pre";
+  public static final String TAG_POST = HIGHLIGHT + ".tag.post";
   
   // Formatter
   public static final String SIMPLE = "simple";

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=983212&r1=983211&r2=983212&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 Sat Aug  7 11:34:39 2010
@@ -311,12 +311,16 @@ public class DefaultSolrHighlighter exte
   }
   
   protected FragmentsBuilder getFragmentsBuilder( SolrParams params ){
+    return getSolrFragmentsBuilder( params ).getFragmentsBuilder( params );
+  }
+  
+  private SolrFragmentsBuilder getSolrFragmentsBuilder( SolrParams params ){
     String fb = params.get( HighlightParams.FRAGMENTS_BUILDER );
     SolrFragmentsBuilder solrFb = fragmentsBuilders.get( fb );
     if( solrFb == null ){
       throw new SolrException( SolrException.ErrorCode.BAD_REQUEST, "Unknown fragmentsBuilder: " + fb );
     }
-    return solrFb.getFragmentsBuilder( params );
+    return solrFb;
   }
   
   /**
@@ -361,6 +365,7 @@ public class DefaultSolrHighlighter exte
         getFragListBuilder( params ),
         getFragmentsBuilder( params ) );
     FieldQuery fieldQuery = fvh.getFieldQuery( query );
+    SolrFragmentsBuilder solrFb = getSolrFragmentsBuilder( params );
 
     // Highlight each document
     DocIterator iterator = docs.iterator();
@@ -371,7 +376,7 @@ public class DefaultSolrHighlighter exte
       for (String fieldName : fieldNames) {
         fieldName = fieldName.trim();
         if( useFastVectorHighlighter( params, schema, fieldName ) )
-          doHighlightingByFastVectorHighlighter( fvh, fieldQuery, req, docSummaries, docId, doc, fieldName );
+          doHighlightingByFastVectorHighlighter( fvh, fieldQuery, solrFb, req, docSummaries, docId, doc, fieldName );
         else
           doHighlightingByHighlighter( query, req, docSummaries, docId, doc, fieldName );
       }
@@ -499,11 +504,15 @@ public class DefaultSolrHighlighter exte
   }
 
   private void doHighlightingByFastVectorHighlighter( FastVectorHighlighter highlighter, FieldQuery fieldQuery,
-      SolrQueryRequest req, NamedList docSummaries, int docId, Document doc, String fieldName ) throws IOException {
+      SolrFragmentsBuilder solrFb, SolrQueryRequest req, NamedList docSummaries, int docId, Document doc,
+      String fieldName ) throws IOException {
     SolrParams params = req.getParams(); 
     String[] snippets = highlighter.getBestFragments( fieldQuery, req.getSearcher().getReader(), docId, fieldName,
         params.getFieldInt( fieldName, HighlightParams.FRAGSIZE, 100 ),
-        params.getFieldInt( fieldName, HighlightParams.SNIPPETS, 1 ) );
+        params.getFieldInt( fieldName, HighlightParams.SNIPPETS, 1 ),
+        solrFb.getPreTags( params, fieldName ),
+        solrFb.getPostTags( params, fieldName ),
+        getEncoder( fieldName, params ) );
     if( snippets != null && snippets.length > 0 )
       docSummaries.add( fieldName, snippets );
     else

Modified: lucene/dev/trunk/solr/src/java/org/apache/solr/highlight/ScoreOrderFragmentsBuilder.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/src/java/org/apache/solr/highlight/ScoreOrderFragmentsBuilder.java?rev=983212&r1=983211&r2=983212&view=diff
==============================================================================
--- lucene/dev/trunk/solr/src/java/org/apache/solr/highlight/ScoreOrderFragmentsBuilder.java (original)
+++ lucene/dev/trunk/solr/src/java/org/apache/solr/highlight/ScoreOrderFragmentsBuilder.java Sat Aug  7 11:34:39 2010
@@ -18,19 +18,13 @@
 package org.apache.solr.highlight;
 
 import org.apache.lucene.search.vectorhighlight.FragmentsBuilder;
-import org.apache.solr.common.params.DefaultSolrParams;
-import org.apache.solr.common.params.SolrParams;
 
-public class ScoreOrderFragmentsBuilder extends HighlightingPluginBase
-    implements SolrFragmentsBuilder {
+public class ScoreOrderFragmentsBuilder extends SolrFragmentsBuilder {
 
-  public FragmentsBuilder getFragmentsBuilder(SolrParams params) {
-    numRequests++;
-    if( defaults != null ) {
-      params = new DefaultSolrParams( params, defaults );
-    }
-
-    return new org.apache.lucene.search.vectorhighlight.ScoreOrderFragmentsBuilder();
+  @Override
+  protected FragmentsBuilder getFragmentsBuilder(String[] preTags,
+      String[] postTags) {
+    return new org.apache.lucene.search.vectorhighlight.ScoreOrderFragmentsBuilder( preTags, postTags );
   }
 
   ///////////////////////////////////////////////////////////////////////

Modified: lucene/dev/trunk/solr/src/java/org/apache/solr/highlight/SimpleFragmentsBuilder.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/src/java/org/apache/solr/highlight/SimpleFragmentsBuilder.java?rev=983212&r1=983211&r2=983212&view=diff
==============================================================================
--- lucene/dev/trunk/solr/src/java/org/apache/solr/highlight/SimpleFragmentsBuilder.java (original)
+++ lucene/dev/trunk/solr/src/java/org/apache/solr/highlight/SimpleFragmentsBuilder.java Sat Aug  7 11:34:39 2010
@@ -18,21 +18,19 @@
 package org.apache.solr.highlight;
 
 import org.apache.lucene.search.vectorhighlight.FragmentsBuilder;
-import org.apache.solr.common.params.DefaultSolrParams;
-import org.apache.solr.common.params.SolrParams;
 
-public class SimpleFragmentsBuilder extends HighlightingPluginBase implements
-    SolrFragmentsBuilder {
+public class SimpleFragmentsBuilder extends SolrFragmentsBuilder {
 
-  public FragmentsBuilder getFragmentsBuilder(SolrParams params) {
-    numRequests++;
-    if( defaults != null ) {
-      params = new DefaultSolrParams( params, defaults );
-    }
-    
-    return new org.apache.lucene.search.vectorhighlight.SimpleFragmentsBuilder();
+  @Override
+  protected FragmentsBuilder getFragmentsBuilder(String[] preTags,
+      String[] postTags) {
+    return new org.apache.lucene.search.vectorhighlight.SimpleFragmentsBuilder( preTags, postTags );
   }
 
+  ///////////////////////////////////////////////////////////////////////
+  //////////////////////// SolrInfoMBeans methods ///////////////////////
+  ///////////////////////////////////////////////////////////////////////
+
   @Override
   public String getDescription() {
     return "SimpleFragmentsBuilder";

Modified: lucene/dev/trunk/solr/src/java/org/apache/solr/highlight/SolrFragmentsBuilder.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/src/java/org/apache/solr/highlight/SolrFragmentsBuilder.java?rev=983212&r1=983211&r2=983212&view=diff
==============================================================================
--- lucene/dev/trunk/solr/src/java/org/apache/solr/highlight/SolrFragmentsBuilder.java (original)
+++ lucene/dev/trunk/solr/src/java/org/apache/solr/highlight/SolrFragmentsBuilder.java Sat Aug  7 11:34:39 2010
@@ -18,26 +18,53 @@
 package org.apache.solr.highlight;
 
 import org.apache.lucene.search.vectorhighlight.FragmentsBuilder;
+import org.apache.solr.common.params.DefaultSolrParams;
+import org.apache.solr.common.params.HighlightParams;
 import org.apache.solr.common.params.SolrParams;
-import org.apache.solr.common.util.NamedList;
 import org.apache.solr.core.SolrInfoMBean;
 import org.apache.solr.util.plugin.NamedListInitializedPlugin;
 
-public interface SolrFragmentsBuilder extends SolrInfoMBean, NamedListInitializedPlugin {
-
-  /** <code>init</code> will be called just once, immediately after creation.
-   * <p>The args are user-level initialization parameters that
-   * may be specified when declaring a request handler in
-   * solrconfig.xml
-   */
-  public void init( NamedList args);
+public abstract class SolrFragmentsBuilder extends HighlightingPluginBase
+  implements SolrInfoMBean, NamedListInitializedPlugin {
+  
+  public static final String DEFAULT_PRE_TAGS = "<em>";
+  public static final String DEFAULT_POST_TAGS = "</em>";
 
   /**
-   * Return a FragmentsBuilder appropriate for this field.
+   * Return a {@link org.apache.lucene.search.vectorhighlight.FragmentsBuilder} appropriate for this field.
    * 
    * @param fieldName The name of the field
    * @param params The params controlling Highlighting
-   * @return An appropriate FragmentsBuilder.
+   * @return An appropriate {@link org.apache.lucene.search.vectorhighlight.FragmentsBuilder}.
    */
-  public FragmentsBuilder getFragmentsBuilder( SolrParams params );
+  public FragmentsBuilder getFragmentsBuilder(SolrParams params) {
+    numRequests++;
+    return getFragmentsBuilder( getPreTags( params, null ), getPostTags( params, null ) );
+  }
+  
+  public String[] getPreTags( SolrParams params, String fieldName ){
+    return getTags( params, HighlightParams.TAG_PRE, fieldName, DEFAULT_PRE_TAGS );
+  }
+  
+  public String[] getPostTags( SolrParams params, String fieldName ){
+    return getTags( params, HighlightParams.TAG_POST, fieldName, DEFAULT_POST_TAGS );
+  }
+  
+  private String[] getTags( SolrParams params, String paramName, String fieldName, String def ){
+    if( defaults != null ) {
+      params = new DefaultSolrParams( params, defaults );
+    }
+    String value = null;
+    if( fieldName == null )
+      value = params.get( paramName, def );
+    else
+      value = params.getFieldParam( fieldName, paramName, def );
+    String[] tags = value.split( "," );
+    for( int i = 0; i < tags.length; i++ ){
+      tags[i] = tags[i].trim();
+    }
+    return tags;
+  }
+  
+  protected abstract FragmentsBuilder getFragmentsBuilder( String[] preTags, String[] postTags );
 }