Author: klaas
Date: Thu Apr 10 12:07:23 2008
New Revision: 646926

URL: http://svn.apache.org/viewvc?rev=646926&view=rev
Log:
SOLR-516: add hl.maxAlternateFieldLength

Modified:
    lucene/solr/trunk/CHANGES.txt
    
lucene/solr/trunk/src/java/org/apache/solr/common/params/HighlightParams.java
    
lucene/solr/trunk/src/java/org/apache/solr/highlight/DefaultSolrHighlighter.java
    lucene/solr/trunk/src/test/org/apache/solr/highlight/HighlighterTest.java

Modified: lucene/solr/trunk/CHANGES.txt
URL: 
http://svn.apache.org/viewvc/lucene/solr/trunk/CHANGES.txt?rev=646926&r1=646925&r2=646926&view=diff
==============================================================================
--- lucene/solr/trunk/CHANGES.txt (original)
+++ lucene/solr/trunk/CHANGES.txt Thu Apr 10 12:07:23 2008
@@ -111,11 +111,11 @@
 13. SOLR-225: Enable pluggable highlighting classes.  Allow configurable
     highlighting formatters and Fragmenters.  (ryan)
 
-14. SOLR-273/376/452: Added hl.maxAnalyzedChars highlighting parameter, 
defaulting 
+14. SOLR-273/376/452/516: Added hl.maxAnalyzedChars highlighting parameter, 
defaulting 
     to 50k, hl.alternateField, which allows the specification of a backup
     field to use as summary if no keywords are matched, and hl.mergeContiguous,
     which combines fragments if they are adjacent in the source document.
-    (klaas, Grant Ingersoll via klaas)
+    (klaas, Grant Ingersoll, Koji Sekiguchi via klaas)
 
 15. SOLR-291: Control maximum number of documents to cache for any entry
     in the queryResultCache via queryResultMaxDocsCached solrconfig.xml 

Modified: 
lucene/solr/trunk/src/java/org/apache/solr/common/params/HighlightParams.java
URL: 
http://svn.apache.org/viewvc/lucene/solr/trunk/src/java/org/apache/solr/common/params/HighlightParams.java?rev=646926&r1=646925&r2=646926&view=diff
==============================================================================
--- 
lucene/solr/trunk/src/java/org/apache/solr/common/params/HighlightParams.java 
(original)
+++ 
lucene/solr/trunk/src/java/org/apache/solr/common/params/HighlightParams.java 
Thu Apr 10 12:07:23 2008
@@ -32,6 +32,7 @@
   public static final String FRAGMENTER  = HIGHLIGHT+".fragmenter";
   public static final String FIELD_MATCH = HIGHLIGHT+".requireFieldMatch";
   public static final String ALTERNATE_FIELD = HIGHLIGHT+".alternateField";
+  public static final String ALTERNATE_FIELD_LENGTH = 
HIGHLIGHT+".maxAlternateFieldLength";
 
   public static final String MERGE_CONTIGUOUS_FRAGMENTS = HIGHLIGHT + 
".mergeContiguous";
   // Formatter

Modified: 
lucene/solr/trunk/src/java/org/apache/solr/highlight/DefaultSolrHighlighter.java
URL: 
http://svn.apache.org/viewvc/lucene/solr/trunk/src/java/org/apache/solr/highlight/DefaultSolrHighlighter.java?rev=646926&r1=646925&r2=646926&view=diff
==============================================================================
--- 
lucene/solr/trunk/src/java/org/apache/solr/highlight/DefaultSolrHighlighter.java
 (original)
+++ 
lucene/solr/trunk/src/java/org/apache/solr/highlight/DefaultSolrHighlighter.java
 Thu Apr 10 12:07:23 2008
@@ -23,6 +23,7 @@
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.LinkedList;
+import java.util.List;
 import java.util.ListIterator;
 import java.util.Map;
 import java.util.Set;
@@ -273,9 +274,24 @@
            if (summaries == null || summaries.length == 0) {
               String alternateField = req.getParams().getFieldParam(fieldName, 
HighlightParams.ALTERNATE_FIELD);
               if (alternateField != null && alternateField.length() > 0) {
-                 String[] altTexts = doc.getValues(alternateField);
-                    if (altTexts != null && altTexts.length > 0)
-                       docSummaries.add(fieldName, altTexts);
+                String[] altTexts = doc.getValues(alternateField);
+                if (altTexts != null && altTexts.length > 0){
+                  int alternateFieldLen = 
req.getParams().getFieldInt(fieldName, 
HighlightParams.ALTERNATE_FIELD_LENGTH,0);
+                  if( alternateFieldLen <= 0 ){
+                    docSummaries.add(fieldName, altTexts);
+                  }
+                  else{
+                    List<String> altList = new ArrayList<String>();
+                    int len = 0;
+                    for( String altText: altTexts ){
+                      altList.add( len + altText.length() > alternateFieldLen ?
+                                   altText.substring( 0, alternateFieldLen - 
len ) : altText );
+                      len += altText.length();
+                      if( len >= alternateFieldLen ) break;
+                    }
+                    docSummaries.add(fieldName, altList);
+                  }
+                }
               }
            }
  

Modified: 
lucene/solr/trunk/src/test/org/apache/solr/highlight/HighlighterTest.java
URL: 
http://svn.apache.org/viewvc/lucene/solr/trunk/src/test/org/apache/solr/highlight/HighlighterTest.java?rev=646926&r1=646925&r2=646926&view=diff
==============================================================================
--- lucene/solr/trunk/src/test/org/apache/solr/highlight/HighlighterTest.java 
(original)
+++ lucene/solr/trunk/src/test/org/apache/solr/highlight/HighlighterTest.java 
Thu Apr 10 12:07:23 2008
@@ -470,5 +470,15 @@
             "//[EMAIL PROTECTED]'highlighting']/[EMAIL PROTECTED]'1' and 
count(*)=1]",
             "//[EMAIL PROTECTED]'highlighting']/[EMAIL PROTECTED]'1']/[EMAIL 
PROTECTED]'t_text']/str[.='1']"
             );
+
+    // with an alternate + max length
+    args.put("hl.alternateField", "t_text");
+    args.put("hl.maxAlternateFieldLength", "15");
+    sumLRF = h.getRequestFactory("standard", 0, 200, args);
+    assertQ("Alternate summarization",
+            sumLRF.makeRequest("tv_text:keyword"),
+            "//[EMAIL PROTECTED]'highlighting']/[EMAIL PROTECTED]'1' and 
count(*)=1]",
+            "//[EMAIL PROTECTED]'highlighting']/[EMAIL PROTECTED]'1']/[EMAIL 
PROTECTED]'t_text']/str[.='a piece of text']"
+            );
   }
 }


Reply via email to