You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by no...@apache.org on 2016/09/26 06:51:02 UTC

lucene-solr:master: SOLR-9558: DIH TemplateTransformerto to support multivalued fields

Repository: lucene-solr
Updated Branches:
  refs/heads/master 46301f2fa -> 65439e261


SOLR-9558: DIH TemplateTransformerto to support multivalued fields


Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/65439e26
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/65439e26
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/65439e26

Branch: refs/heads/master
Commit: 65439e261e49484edc474fd56bf4a67cf70ed038
Parents: 46301f2
Author: Noble Paul <no...@apache.org>
Authored: Mon Sep 26 12:20:44 2016 +0530
Committer: Noble Paul <no...@apache.org>
Committed: Mon Sep 26 12:20:44 2016 +0530

----------------------------------------------------------------------
 solr/CHANGES.txt                                |  2 ++
 .../handler/dataimport/TemplateTransformer.java | 25 ++++++++++---
 .../dataimport/TestTemplateTransformer.java     | 38 ++++++++++++++++++++
 3 files changed, 61 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/65439e26/solr/CHANGES.txt
----------------------------------------------------------------------
diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index 0e7911c..e426ee0 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -100,6 +100,8 @@ New Features
 
 * SOLR-9537: Support facet scoring with the scoreNodes expression (Joel Bernstein)
 
+* SOLR-9558: DIH TemplateTransformerto to support multivalued fields (Ted Sullivan via noble)
+
 Bug Fixes
 ----------------------
 

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/65439e26/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/TemplateTransformer.java
----------------------------------------------------------------------
diff --git a/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/TemplateTransformer.java b/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/TemplateTransformer.java
index 7cd43f2..6bd6050 100644
--- a/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/TemplateTransformer.java
+++ b/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/TemplateTransformer.java
@@ -19,6 +19,7 @@ package org.apache.solr.handler.dataimport;
 import java.lang.invoke.MethodHandles;
 import java.util.HashMap;
 import java.util.List;
+import java.util.ArrayList;
 import java.util.Map;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -54,6 +55,7 @@ public class TemplateTransformer extends Transformer {
   @SuppressWarnings("unchecked")
   public Object transformRow(Map<String, Object> row, Context context) {
 
+
     VariableResolver resolver = (VariableResolver) context
             .getVariableResolver();
     // Add current row to the copy of resolver map
@@ -84,15 +86,30 @@ public class TemplateTransformer extends Transformer {
       if (!resolvable)
         continue;
       if(variables.size() == 1 && expr.startsWith("${") && expr.endsWith("}")){
-        row.put(column, resolver.resolve(variables.get(0)));
+        addToRow(column, row, resolver.resolve(variables.get(0)));
       } else {
-        row.put(column, resolver.replaceTokens(expr));
+        addToRow(column, row, resolver.replaceTokens(expr));
       }
-
     }
 
-
     return row;
   }
+
+  private void addToRow(String key, Map<String, Object> row, Object value) {
+    Object prevVal = row.get(key);
+    if (prevVal != null) {
+      if (prevVal instanceof List) {
+        ((List) prevVal).add(value);
+      } else {
+        ArrayList<Object> valList = new ArrayList<Object>();
+        valList.add(prevVal);
+        valList.add(value);
+        row.put(key, valList);
+      }
+    } else {
+      row.put(key, value);
+    }
+  }
+    
   public static final String TEMPLATE = "template";
 }

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/65439e26/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestTemplateTransformer.java
----------------------------------------------------------------------
diff --git a/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestTemplateTransformer.java b/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestTemplateTransformer.java
index 2acdf61..b5c3811 100644
--- a/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestTemplateTransformer.java
+++ b/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestTemplateTransformer.java
@@ -69,5 +69,43 @@ public class TestTemplateTransformer extends AbstractDataImportHandlerTestCase {
     assertEquals("Mr Mangar, Shalin Shekhar", row.get("mrname"));
     assertEquals(mails,row.get("emails"));
   }
+    
+  @Test
+  @SuppressWarnings("unchecked")
+  public void testTransformRowMultiValue() {
+    List fields = new ArrayList();
+    fields.add(createMap("column", "year"));
+    fields.add(createMap("column", "month"));
+    fields.add(createMap("column", "day"));
+      
+    // create three variations of date format
+    fields.add(createMap( "column", "date",
+                          TemplateTransformer.TEMPLATE,
+                          "${e.day} ${e.month}, ${e.year}" ));
+    fields.add(createMap( "column", "date",
+                          TemplateTransformer.TEMPLATE,
+                          "${e.month} ${e.day}, ${e.year}" ));
+    fields.add(createMap("column", "date",
+                          TemplateTransformer.TEMPLATE,
+                          "${e.year}-${e.month}-${e.day}" ));
+      
+    Map row = createMap( "year", "2016",
+                         "month", "Apr",
+                         "day", "30" );
+    VariableResolver resolver = new VariableResolver();
+    resolver.addNamespace("e", row);
+    Map<String, String> entityAttrs = createMap("date", "e");
+      
+    Context context = getContext(null, resolver,
+                                 null, Context.FULL_DUMP, fields, entityAttrs);
+    new TemplateTransformer().transformRow(row, context);
+    assertTrue( row.get( "date" ) instanceof List );
+    
+    List<Object> dates = (List<Object>)row.get( "date" );
+    assertEquals( dates.size(), 3 );
+    assertEquals( dates.get(0).toString(), "30 Apr, 2016" );
+    assertEquals( dates.get(1).toString(), "Apr 30, 2016" );
+    assertEquals( dates.get(2).toString(), "2016-Apr-30" );
+  }
 
 }