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\"']{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\"']{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>() ;