You are viewing a plain text version of this content. The canonical link for it is here.
Posted to solr-commits@lucene.apache.org by yo...@apache.org on 2009/12/07 20:24:23 UTC

svn commit: r888096 - in /lucene/solr/trunk: CHANGES.txt src/java/org/apache/solr/highlight/DefaultSolrHighlighter.java src/test/org/apache/solr/highlight/HighlighterTest.java

Author: yonik
Date: Mon Dec  7 19:24:15 2009
New Revision: 888096

URL: http://svn.apache.org/viewvc?rev=888096&view=rev
Log:
SOLR-1624: Highlighter bug w/ term positons stored and multi valued field

Modified:
    lucene/solr/trunk/CHANGES.txt
    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=888096&r1=888095&r2=888096&view=diff
==============================================================================
--- lucene/solr/trunk/CHANGES.txt (original)
+++ lucene/solr/trunk/CHANGES.txt Mon Dec  7 19:24:15 2009
@@ -110,6 +110,10 @@
 * SOLR-1628: log contains incorrect number of adds and deletes. 
   (Thijs Vonk via yonik)
 
+* SOLR-1624: Highlighter only highlights values from the first field  value
+  in a multivalued field when term positions (term vectors) are stored.
+  (Chris Harris via yonik)
+
 
 Other Changes
 ----------------------

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=888096&r1=888095&r2=888096&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 Mon Dec  7 19:24:15 2009
@@ -284,23 +284,24 @@
 
           String[] summaries = null;
           List<TextFragment> frags = new ArrayList<TextFragment>();
-          TermOffsetsTokenStream tots = null;
-          for (int j = 0; j < docTexts.length; j++) {
-            // create TokenStream
-            try {
-              // attempt term vectors
-              if( tots == null ) {
-                TokenStream tvStream = TokenSources.getTokenStream(searcher.getReader(), docId, fieldName);
-                if (tvStream != null) {
-                  tots = new TermOffsetsTokenStream(tvStream);
-                  tstream = tots.getMultiValuedTokenStream( docTexts[j].length() );
-                } else {
-                  // fall back to analyzer
-                  tstream = createAnalyzerTStream(schema, fieldName, docTexts[j]);
-                }
+
+          TermOffsetsTokenStream tots = null; // to be non-null iff we're using TermOffsets optimization
+          try {
+              TokenStream tvStream = TokenSources.getTokenStream(searcher.getReader(), docId, fieldName);
+              if (tvStream != null) {
+                tots = new TermOffsetsTokenStream(tvStream);
               }
-            }
-            catch (IllegalArgumentException e) {
+          }
+          catch (IllegalArgumentException e) {
+            // No problem. But we can't use TermOffsets optimization.
+          }
+
+          for (int j = 0; j < docTexts.length; j++) {
+            if( tots != null ) {
+              // if we're using TermOffsets optimization, then get the next
+              // field value's TokenStream (i.e. get field j's TokenStream) from tots:
+              tstream = tots.getMultiValuedTokenStream( docTexts[j].length() );
+            } else {
               // fall back to analyzer
               tstream = createAnalyzerTStream(schema, fieldName, docTexts[j]);
             }

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=888096&r1=888095&r2=888096&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 Mon Dec  7 19:24:15 2009
@@ -190,6 +190,33 @@
             );
   }
 
+  // Variant of testTermVecMultiValuedHighlight to make sure that
+  // more than just the first value of a multi-valued field is
+  // considered for highlighting.
+  public void testTermVecMultiValuedHighlight2() throws Exception {
+
+    // do summarization using term vectors on multivalued field
+    HashMap<String,String> args = new HashMap<String,String>();
+    args.put("hl", "true");
+    args.put("hl.fl", "tv_mv_text");
+    args.put("hl.snippets", "2");
+    TestHarness.LocalRequestFactory sumLRF = h.getRequestFactory(
+      "standard",0,200,args);
+
+    String shortText = "short";
+    assertU(adoc("tv_mv_text", shortText,
+                 "tv_mv_text", LONG_TEXT,
+                 "id", "1"));
+    assertU(commit());
+    assertU(optimize());
+    assertQ("Basic summarization",
+            sumLRF.makeRequest("tv_mv_text:long"),
+            "//lst[@name='highlighting']/lst[@name='1']",
+            "//lst[@name='1']/arr[@name='tv_mv_text']/str[.='a <em>long</em> days night this should be a piece of text which']",
+            "//arr[@name='tv_mv_text']/str[.=' <em>long</em> fragments.']"
+            );
+  }
+
   public void testDisMaxHighlight() {
 
     // same test run through dismax handler