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" );
+ }
}