You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stanbol.apache.org by rw...@apache.org on 2011/09/30 12:31:10 UTC

svn commit: r1177581 - in /incubator/stanbol/trunk: commons/solr/src/main/java/org/apache/stanbol/commons/solr/utils/SolrUtil.java entityhub/yard/solr/src/main/java/org/apache/stanbol/entityhub/yard/solr/query/QueryUtils.java

Author: rwesten
Date: Fri Sep 30 10:31:10 2011
New Revision: 1177581

URL: http://svn.apache.org/viewvc?rev=1177581&view=rev
Log:
fixed a bug that cause Lucene special chars not to be correctly escaped in the case of Wildcard queries to the SolrYard. Now only '*' and '?' are NOT escaped in such cases

Modified:
    incubator/stanbol/trunk/commons/solr/src/main/java/org/apache/stanbol/commons/solr/utils/SolrUtil.java
    incubator/stanbol/trunk/entityhub/yard/solr/src/main/java/org/apache/stanbol/entityhub/yard/solr/query/QueryUtils.java

Modified: incubator/stanbol/trunk/commons/solr/src/main/java/org/apache/stanbol/commons/solr/utils/SolrUtil.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/commons/solr/src/main/java/org/apache/stanbol/commons/solr/utils/SolrUtil.java?rev=1177581&r1=1177580&r2=1177581&view=diff
==============================================================================
--- incubator/stanbol/trunk/commons/solr/src/main/java/org/apache/stanbol/commons/solr/utils/SolrUtil.java (original)
+++ incubator/stanbol/trunk/commons/solr/src/main/java/org/apache/stanbol/commons/solr/utils/SolrUtil.java Fri Sep 30 10:31:10 2011
@@ -21,8 +21,10 @@ import java.util.regex.Pattern;
 public final class SolrUtil {
     private SolrUtil() {}
 
-    private static final String LUCENE_ESCAPE_CHARS = "[\\\\+\\-\\!\\(\\)\\:\\^\\[\\]\\{\\}\\~\\*\\?]";
+    private static final String LUCENE_ESCAPE_CHARS = "[\\\\+\\-\\!\\(\\)\\:\\^\\[\\]\\{\\}\\~\\*\\?\\\"]";
     private static final Pattern LUCENE_PATTERN = Pattern.compile(LUCENE_ESCAPE_CHARS);
+    private static final String WILDCARD_ESCAPE_CHARS = "[\\\\+\\-\\!\\(\\)\\:\\^\\[\\]\\{\\}\\~\\\"]";
+    private static final Pattern WILDCARD_PATTERN = Pattern.compile(WILDCARD_ESCAPE_CHARS);
     private static final String REPLACEMENT_STRING = "\\\\$0";
 
     /**
@@ -33,6 +35,18 @@ public final class SolrUtil {
      * @return the escaped string
      */
     public static String escapeSolrSpecialChars(String string) {
-        return string != null ? LUCENE_PATTERN.matcher(string).replaceAll(REPLACEMENT_STRING) : null;
+        String escaped = string != null ? LUCENE_PATTERN.matcher(string).replaceAll(REPLACEMENT_STRING) : null;
+        return escaped;
+    }
+    /**
+     * Escapes all Solr special chars except the '*' and '?' as used for Wildcard
+     * searches
+     * @param string the string representing a wildcard search that needs to
+     * be escaped
+     * @return the escaped version of the wildcard search
+     */
+    public static String escapeWildCardString(String string){
+        String escaped = string != null ? WILDCARD_PATTERN.matcher(string).replaceAll(REPLACEMENT_STRING) : null;
+        return escaped;
     }
 }

Modified: incubator/stanbol/trunk/entityhub/yard/solr/src/main/java/org/apache/stanbol/entityhub/yard/solr/query/QueryUtils.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/entityhub/yard/solr/src/main/java/org/apache/stanbol/entityhub/yard/solr/query/QueryUtils.java?rev=1177581&r1=1177580&r2=1177581&view=diff
==============================================================================
--- incubator/stanbol/trunk/entityhub/yard/solr/src/main/java/org/apache/stanbol/entityhub/yard/solr/query/QueryUtils.java (original)
+++ incubator/stanbol/trunk/entityhub/yard/solr/src/main/java/org/apache/stanbol/entityhub/yard/solr/query/QueryUtils.java Fri Sep 30 10:31:10 2011
@@ -45,6 +45,9 @@ public final class QueryUtils {
      * 
      * @param value
      *            the index value
+     * @param escape if <code>true</code> all Solr special chars are escaped if
+     * <code>false</code> than '*' and '?' as used for wildcard searches are
+     * not escaped.
      * @return the (possible multiple) values that need to be connected with AND
      */
     public static String[] encodeQueryValue(IndexValue indexValue, boolean escape) {
@@ -55,6 +58,8 @@ public final class QueryUtils {
         String value = indexValue.getValue(); 
         if (escape) {
             value = SolrUtil.escapeSolrSpecialChars(value);
+        } else {
+            value = SolrUtil.escapeWildCardString(value);
         }
         if (IndexDataTypeEnum.TXT.getIndexType().equals(indexValue.getType())) {
         	value = value.toLowerCase();