You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ds...@apache.org on 2017/04/26 12:48:52 UTC

lucene-solr:branch_6x: SOLR-10537: Added SolrParams.toLocalParamsString() and moved QP.encodeLocalParamVal to ClientUtils

Repository: lucene-solr
Updated Branches:
  refs/heads/branch_6x bb8dd7a9f -> 73d3a77ad


SOLR-10537: Added SolrParams.toLocalParamsString() and moved QP.encodeLocalParamVal to ClientUtils

(cherry picked from commit f45017b)


Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/73d3a77a
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/73d3a77a
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/73d3a77a

Branch: refs/heads/branch_6x
Commit: 73d3a77ad5b9a99944c1d7c1b64192e2c528dcb3
Parents: bb8dd7a
Author: David Smiley <ds...@apache.org>
Authored: Wed Apr 26 08:38:52 2017 -0400
Committer: David Smiley <ds...@apache.org>
Committed: Wed Apr 26 08:48:47 2017 -0400

----------------------------------------------------------------------
 solr/CHANGES.txt                                |  2 ++
 .../solr/handler/component/FacetComponent.java  |  3 +-
 .../handler/component/SpatialHeatmapFacets.java | 14 +++++-----
 .../org/apache/solr/search/QueryParsing.java    | 27 ------------------
 .../solr/client/solrj/util/ClientUtils.java     | 29 ++++++++++++++++++++
 .../apache/solr/common/params/SolrParams.java   | 23 +++++++++++++++-
 6 files changed, 62 insertions(+), 36 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/73d3a77a/solr/CHANGES.txt
----------------------------------------------------------------------
diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index e584036..c635830 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -82,6 +82,8 @@ New Features
 
 * SOLR-10505: Add multi-field support to TermsComponent when requesting terms' statistics. (Shai Erera)
 
+* SOLR-10537: SolrJ: Added SolrParams.toLocalParamsString() and ClientUtils.encodeLocalParamVal. (David Smiley)
+
 Optimizations
 ----------------------
 

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/73d3a77a/solr/core/src/java/org/apache/solr/handler/component/FacetComponent.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/handler/component/FacetComponent.java b/solr/core/src/java/org/apache/solr/handler/component/FacetComponent.java
index 66b9ab8..a66625c 100644
--- a/solr/core/src/java/org/apache/solr/handler/component/FacetComponent.java
+++ b/solr/core/src/java/org/apache/solr/handler/component/FacetComponent.java
@@ -35,6 +35,7 @@ import org.apache.commons.lang.ArrayUtils;
 import org.apache.commons.lang.StringUtils;
 import org.apache.lucene.util.BytesRef;
 import org.apache.lucene.util.FixedBitSet;
+import org.apache.solr.client.solrj.util.ClientUtils;
 import org.apache.solr.common.SolrException;
 import org.apache.solr.common.SolrException.ErrorCode;
 import org.apache.solr.common.params.CommonParams;
@@ -375,7 +376,7 @@ public class FacetComponent extends SearchComponent {
         // add terms into the original facet.field command
         // do it via parameter reference to avoid another layer of encoding.
 
-        String termsKeyEncoded = QueryParsing.encodeLocalParamVal(termsKey);
+        String termsKeyEncoded = ClientUtils.encodeLocalParamVal(termsKey);
         if (dff.localParams != null) {
           facetCommand = commandPrefix + termsKeyEncoded + " "
               + dff.facetStr.substring(2);

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/73d3a77a/solr/core/src/java/org/apache/solr/handler/component/SpatialHeatmapFacets.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/handler/component/SpatialHeatmapFacets.java b/solr/core/src/java/org/apache/solr/handler/component/SpatialHeatmapFacets.java
index 9bca5c7..bf1e2b0 100644
--- a/solr/core/src/java/org/apache/solr/handler/component/SpatialHeatmapFacets.java
+++ b/solr/core/src/java/org/apache/solr/handler/component/SpatialHeatmapFacets.java
@@ -32,16 +32,13 @@ import java.util.List;
 import java.util.Map;
 import java.util.concurrent.TimeUnit;
 
-import org.apache.lucene.util.FixedBitSet;
-import org.apache.solr.search.DocIterator;
-import org.apache.solr.search.SolrIndexSearcher;
-import org.locationtech.spatial4j.context.SpatialContext;
-import org.locationtech.spatial4j.shape.Shape;
 import org.apache.lucene.spatial.prefix.HeatmapFacetCounter;
 import org.apache.lucene.spatial.prefix.PrefixTreeStrategy;
 import org.apache.lucene.spatial.query.SpatialArgs;
 import org.apache.lucene.spatial.query.SpatialOperation;
 import org.apache.lucene.util.Bits;
+import org.apache.lucene.util.FixedBitSet;
+import org.apache.solr.client.solrj.util.ClientUtils;
 import org.apache.solr.common.SolrException;
 import org.apache.solr.common.params.CommonParams;
 import org.apache.solr.common.params.FacetParams;
@@ -54,10 +51,13 @@ import org.apache.solr.schema.RptWithGeometrySpatialField;
 import org.apache.solr.schema.SchemaField;
 import org.apache.solr.schema.SpatialRecursivePrefixTreeFieldType;
 import org.apache.solr.search.BitDocSet;
+import org.apache.solr.search.DocIterator;
 import org.apache.solr.search.DocSet;
-import org.apache.solr.search.QueryParsing;
+import org.apache.solr.search.SolrIndexSearcher;
 import org.apache.solr.util.DistanceUnits;
 import org.apache.solr.util.SpatialUtils;
+import org.locationtech.spatial4j.context.SpatialContext;
+import org.locationtech.spatial4j.shape.Shape;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -305,7 +305,7 @@ public class SpatialHeatmapFacets {
       //add heatmap field param
       if (!key.equals(facet.facetOn)) {
         sreq.params.add(FacetParams.FACET_HEATMAP,
-            "{!" + CommonParams.OUTPUT_KEY + "=" + QueryParsing.encodeLocalParamVal(key) + "}" + facet.facetOn);
+            "{!" + CommonParams.OUTPUT_KEY + "=" + ClientUtils.encodeLocalParamVal(key) + "}" + facet.facetOn);
       } else {
         sreq.params.add(FacetParams.FACET_HEATMAP, facet.facetOn);
       }

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/73d3a77a/solr/core/src/java/org/apache/solr/search/QueryParsing.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/search/QueryParsing.java b/solr/core/src/java/org/apache/solr/search/QueryParsing.java
index 281846b..077ae67 100644
--- a/solr/core/src/java/org/apache/solr/search/QueryParsing.java
+++ b/solr/core/src/java/org/apache/solr/search/QueryParsing.java
@@ -171,33 +171,6 @@ public class QueryParsing {
   }
 
 
-  public static String encodeLocalParamVal(String val) {
-    int len = val.length();
-    int i = 0;
-    if (len > 0 && val.charAt(0) != '$') {
-      for (;i<len; i++) {
-        char ch = val.charAt(i);
-        if (Character.isWhitespace(ch) || ch=='}') break;
-      }
-    }
-
-    if (i>=len) return val;
-
-    // We need to enclose in quotes... but now we need to escape
-    StringBuilder sb = new StringBuilder(val.length() + 4);
-    sb.append('\'');
-    for (i=0; i<len; i++) {
-      char ch = val.charAt(i);
-      if (ch=='\'') {
-        sb.append('\\');
-      }
-      sb.append(ch);
-    }
-    sb.append('\'');
-    return sb.toString();
-  }
-  
-
   /**
    * "foo" returns null
    * "{!prefix f=myfield}yes" returns type="prefix",f="myfield",v="yes"

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/73d3a77a/solr/solrj/src/java/org/apache/solr/client/solrj/util/ClientUtils.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/util/ClientUtils.java b/solr/solrj/src/java/org/apache/solr/client/solrj/util/ClientUtils.java
index beed40e..a9b41cd 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/util/ClientUtils.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/util/ClientUtils.java
@@ -171,6 +171,35 @@ public class ClientUtils
     return sb.toString();
   }
 
+  /**
+   * Returns the value encoded properly so it can be appended after a <pre>name=</pre> local-param.
+   */
+  public static String encodeLocalParamVal(String val) {
+    int len = val.length();
+    int i = 0;
+    if (len > 0 && val.charAt(0) != '$') {
+      for (;i<len; i++) {
+        char ch = val.charAt(i);
+        if (Character.isWhitespace(ch) || ch=='}') break;
+      }
+    }
+
+    if (i>=len) return val;
+
+    // We need to enclose in quotes... but now we need to escape
+    StringBuilder sb = new StringBuilder(val.length() + 4);
+    sb.append('\'');
+    for (i=0; i<len; i++) {
+      char ch = val.charAt(i);
+      if (ch=='\'') {
+        sb.append('\\');
+      }
+      sb.append(ch);
+    }
+    sb.append('\'');
+    return sb.toString();
+  }
+
   /** Constructs a slices map from a collection of slices and handles disambiguation if multiple collections are being queried simultaneously */
   public static void addSlices(Map<String,Slice> target, String collectionName, Collection<Slice> slices, boolean multiCollection) {
     for (Slice slice : slices) {

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/73d3a77a/solr/solrj/src/java/org/apache/solr/common/params/SolrParams.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/java/org/apache/solr/common/params/SolrParams.java b/solr/solrj/src/java/org/apache/solr/common/params/SolrParams.java
index e884a5b..dcf5e21 100644
--- a/solr/solrj/src/java/org/apache/solr/common/params/SolrParams.java
+++ b/solr/solrj/src/java/org/apache/solr/common/params/SolrParams.java
@@ -30,6 +30,7 @@ import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 
+import org.apache.solr.client.solrj.util.ClientUtils;
 import org.apache.solr.common.MapSerializable;
 import org.apache.solr.common.SolrException;
 import org.apache.solr.common.util.NamedList;
@@ -497,7 +498,27 @@ public abstract class SolrParams implements Serializable, MapSerializable {
       throw new AssertionError(e);
     }
   }
-  
+
+  /**
+   * Generates a local-params string of the form <pre>{! name=value name2=value2}</pre>.
+   */
+  public String toLocalParamsString() {
+    final StringBuilder sb = new StringBuilder(128);
+    sb.append("{!");
+    //TODO perhaps look for 'type' and add here?  but it doesn't matter.
+    for (final Iterator<String> it = getParameterNamesIterator(); it.hasNext();) {
+      final String name = it.next();
+      for (String val : getParams(name)) {
+        sb.append(' '); // do so even the first time; why not.
+        sb.append(name); // no escaping for name; it must follow "Java Identifier" rules.
+        sb.append('=');
+        sb.append(ClientUtils.encodeLocalParamVal(val));
+      }
+    }
+    sb.append('}');
+    return sb.toString();
+  }
+
   /** Like {@link #toQueryString()}, but only replacing enough chars so that
    * the URL may be unambiguously pasted back into a browser.
    * This method can be used to properly log query parameters without