Dear Wiki user,

You have subscribed to a wiki page or wiki category on "Solr Wiki" for change 
notification.

The following page has been changed by NoblePaul:
http://wiki.apache.org/solr/DataImportHandler

------------------------------------------------------------------------------
  
  === A Simple TrimTransformer ===
  {{{
+ package foo;
  public class TrimTransformer  {
        public Object transformRow(Map<String, Object> row)     {
                String artist = row.get("artist");
@@ -523, +524 @@

  }}}
  No need to extend any interface. Just write any class which has a method 
named transformRow with the above signature and DataImportHandler will 
instantiate it and call the transformRow method using reflection. You will 
specify it in your data-config.xml as follows:
  {{{
- <entity name="artist" query="..." transformer="TrimTransformer">
+ <entity name="artist" query="..." transformer="foo.TrimTransformer">
        <field column="artistName" />
  </entity>
  }}}
@@ -531, +532 @@

  === A General TrimTransformer ===
  Suppose you want to write a general !TrimTransformer without hardcoding the 
column on which it needs to operate. Now we'd need to have a flag on the field 
in data-config.xml to indicate that the !TrimTransformer should apply itself on 
this field.
  {{{
- <entity name="artist" query="..." transformer="TrimTransformer">
+ <entity name="artist" query="..." transformer="foo.TrimTransformer">
        <field column="artistName" trim="true" />
  </entity>
  }}}
  Now you'll need to extend the [#transformer Transformer] interface and use 
the API methods in Context to get the list of fields in the entity and get 
attributes of the fields to detect if the flag is set.
  {{{
+ package foo;
- public class TrimTransformer extends Transformer      {
+ public class TrimTransformer implements Transformer   {
  
        public Map<String, Object> transformRow(Map<String, Object> row, 
Context context) {
                List<Map<String, String>> fields = context.getAllEntityFields();
@@ -545, +547 @@

                for (Map<String, String> field : fields) {
                        // Check if this field has trim="true" specified in the 
data-config.xml
                        String trim = field.get("trim");
-                       if (Boolean.parseBoolean(trim)) {
+                       if ("true".equals(trim))        {
                                // Apply trim on this field
                                String columnName = field.get("column");
                                // Get this field's value from the current row
@@ -561, +563 @@

  
  }
  }}}
- If the field is multi-valued, then it returns a List instead of a single 
object and would need to handled appropriately. You'll need to add the jar for 
DataImportHandler to your project as a dependency to use the Transformer and 
Context interfaces.
+ If the field is multi-valued, then the value returned is a List instead of a 
single object and would need to handl appropriately. You'll need to add the jar 
for !DataImportHandler to your project as a dependency to use the Transformer 
and Context interfaces.
  
  [[Anchor(entityprocessor)]]
  == EntityProcessor ==

Reply via email to