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

The comment on the change is:
Functions documentation

------------------------------------------------------------------------------
   * ''escapeSql'' : Use this to escape special sql characters . eg : 
`'${dataimporter.functions.escapeSql(item.ID)}'`. Takes only one argument and 
must be a valid value in the !VaraiableResolver.
   * ''encodeUrl'' : Us this to encode urls . eg : 
`'${dataimporter.functions.encodeUrl(item.ID)}'` . Takes only one argument and 
must be a valid value in the !VariableResolver
  
+ ==== Custom Functions ====
+ It is possible to plug in custom functions into DIH. Implement an 
[http://svn.apache.org/viewvc/lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/Evaluator.java?view=markup
 Evalutor] and specify it in the data-config.xml . Following is an example of 
an evaluator which does a 'toLowerCase' on a String.
+ {{{
+ <dataConfig>
+    <function name="toLowerCase" class="foo.LowerCaseFunctionEvaluator"/>
+    <document>
+    <entity query="select * from table where 
name='${dataimporter.functions.toLowerCase(dataimporter.request.user)'">
+     <!- ......field declarations......->
+    </entity> 
+ </dataConfig>
+ }}}
+ 
+ The implementation of !LowerCaseFunctionEvaluator
+ {{{
+   public class LowerCaseFunctionEvaluator implements Evaluator{
+     public String evaluate(String expression, Context context) {
+       List l = EvaluatorBag.parseParams(expression, 
context.getVariableResolver());
+ 
+       if (l.size() != 1) {
+           throw new RuntimeException("'toLowerCase' must have only one 
parameter ");
+       }
+       return l.get(0).toString().toLowerCase();
+       
+     }
+ 
+   }
+ }}}
+ 
  === Accessing request parameters ===
  The parameters passed over the http request can be accessed  using the 
'request' namespace eg: `'${dataimporter.request.command}'` will return the 
command that was run. Any extra parameter can be accessed using this
  [[Anchor(interactive)]]

Reply via email to