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 sh...@apache.org on 2009/03/24 09:09:49 UTC
svn commit: r757682 - in /lucene/solr/trunk/contrib/dataimporthandler:
CHANGES.txt
src/main/java/org/apache/solr/handler/dataimport/EvaluatorBag.java
src/test/java/org/apache/solr/handler/dataimport/TestEvaluatorBag.java
Author: shalin
Date: Tue Mar 24 08:09:49 2009
New Revision: 757682
URL: http://svn.apache.org/viewvc?rev=757682&view=rev
Log:
SOLR-1083 -- An Evaluator for escaping query characters
Modified:
lucene/solr/trunk/contrib/dataimporthandler/CHANGES.txt
lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/EvaluatorBag.java
lucene/solr/trunk/contrib/dataimporthandler/src/test/java/org/apache/solr/handler/dataimport/TestEvaluatorBag.java
Modified: lucene/solr/trunk/contrib/dataimporthandler/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/contrib/dataimporthandler/CHANGES.txt?rev=757682&r1=757681&r2=757682&view=diff
==============================================================================
--- lucene/solr/trunk/contrib/dataimporthandler/CHANGES.txt (original)
+++ lucene/solr/trunk/contrib/dataimporthandler/CHANGES.txt Tue Mar 24 08:09:49 2009
@@ -117,6 +117,9 @@
location of the data source.
(Jason Shepherd, Noble Paul via shalin)
+28.SOLR-1083: An Evaluator for escaping query characters.
+ (Noble Paul, shalin)
+
Optimizations
----------------------
1. SOLR-846: Reduce memory consumption during delta import by removing keys when used
Modified: lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/EvaluatorBag.java
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/EvaluatorBag.java?rev=757682&r1=757681&r2=757682&view=diff
==============================================================================
--- lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/EvaluatorBag.java (original)
+++ lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/EvaluatorBag.java Tue Mar 24 08:09:49 2009
@@ -23,6 +23,7 @@
import static org.apache.solr.handler.dataimport.DataImportHandlerException.wrapAndThrow;
import static org.apache.solr.handler.dataimport.DocBuilder.loadClass;
import org.apache.solr.util.DateMathParser;
+import org.apache.solr.client.solrj.util.ClientUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -50,6 +51,8 @@
public static final String URL_ENCODE_EVALUATOR = "encodeUrl";
+ public static final String ESCAPE_SOLR_QUERY_CHARS = "escapeQueryChars";
+
public static final String SQL_ESCAPE_EVALUATOR = "escapeSql";
static final Pattern FORMAT_METHOD = Pattern
.compile("^(\\w*?)\\((.*?)\\)$");
@@ -75,6 +78,27 @@
}
/**
+ * <p/>Returns an <code>Evaluator</code> instance meant to be used for escaping reserved characters in Solr
+ * queries</p>
+ *
+ * @return an <code>Evaluator</code> instance capable of escaping reserved characters in solr queries.
+ *
+ * @see org.apache.solr.client.solrj.util.ClientUtils#escapeQueryChars(String)
+ */
+ public static Evaluator getSolrQueryEscapingEvaluator() {
+ return new Evaluator() {
+ public String evaluate(String expression, Context context) {
+ List l = parseParams(expression, context.getVariableResolver());
+ if (l.size() != 1) {
+ throw new DataImportHandlerException(SEVERE, "'escapeQueryChars' must have at least one parameter ");
+ }
+ String s = l.get(0).toString();
+ return ClientUtils.escapeQueryChars(s);
+ }
+ };
+ }
+
+ /**
* <p/> Returns an <code>Evaluator</code> instance capable of URL-encoding expressions. The expressions are evaluated
* using a <code>VariableResolver</code> </p>
*
@@ -165,6 +189,7 @@
evaluators.put(DATE_FORMAT_EVALUATOR, getDateFormatEvaluator());
evaluators.put(SQL_ESCAPE_EVALUATOR, getSqlEscapingEvaluator());
evaluators.put(URL_ENCODE_EVALUATOR, getUrlEvaluator());
+ evaluators.put(ESCAPE_SOLR_QUERY_CHARS, getSolrQueryEscapingEvaluator());
SolrCore core = docBuilder == null ? null : docBuilder.dataImporter.getCore();
for (Map<String, String> map : fn) {
try {
Modified: lucene/solr/trunk/contrib/dataimporthandler/src/test/java/org/apache/solr/handler/dataimport/TestEvaluatorBag.java
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/contrib/dataimporthandler/src/test/java/org/apache/solr/handler/dataimport/TestEvaluatorBag.java?rev=757682&r1=757681&r2=757682&view=diff
==============================================================================
--- lucene/solr/trunk/contrib/dataimporthandler/src/test/java/org/apache/solr/handler/dataimport/TestEvaluatorBag.java (original)
+++ lucene/solr/trunk/contrib/dataimporthandler/src/test/java/org/apache/solr/handler/dataimport/TestEvaluatorBag.java Tue Mar 24 08:09:49 2009
@@ -80,6 +80,7 @@
Evaluator urlEvaluator = EvaluatorBag.getUrlEvaluator();
runTests(urlTests, urlEvaluator);
}
+
@Test
public void parseParams() {
Map m = new HashMap();
@@ -91,19 +92,32 @@
Assert.assertEquals("B",((EvaluatorBag.VariableWrapper)l.get(1)).resolve());
Assert.assertEquals("hello!",l.get(2));
Assert.assertEquals("ds,o,u'za",l.get(3));
+ }
+ @Test
+ public void testEscapeSolrQueryFunction() {
+ final VariableResolverImpl resolver = new VariableResolverImpl();
+ ContextImpl context = new ContextImpl(null, resolver, null, 0, Collections.EMPTY_MAP, null, null);
+ resolver.context = context;
+ Map m= new HashMap();
+ m.put("query","c:t");
+ resolver.addNamespace("dataimporter.functions", EvaluatorBag
+ .getFunctionsNamespace(Collections.EMPTY_LIST, null));
+ resolver.addNamespace("e",m);
+ String s = resolver
+ .replaceTokens("${dataimporter.functions.escapeQueryChars(e.query)}");
+ org.junit.Assert.assertEquals("c\\:t", s);
}
/**
* Test method for {@link EvaluatorBag#getDateFormatEvaluator()}.
*/
@Test
- @Ignore
public void testGetDateFormatEvaluator() {
Evaluator dateFormatEval = EvaluatorBag.getDateFormatEvaluator();
resolver.context = new ContextImpl(null, resolver, null, 0, Collections.EMPTY_MAP, null, null);
- assertEquals(new SimpleDateFormat("yyyy-MM-dd").format(new Date()),
+ assertEquals(new SimpleDateFormat("yyyy-MM-dd HH:mm").format(new Date()),
dateFormatEval.evaluate("'NOW','yyyy-MM-dd HH:mm'", resolver.context));
Map<String, Object> map = new HashMap<String, Object>();