You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by yo...@apache.org on 2015/04/18 16:27:27 UTC
svn commit: r1674519 - in /lucene/dev/trunk/solr: CHANGES.txt
core/src/java/org/apache/solr/search/facet/FacetRequest.java
core/src/test/org/apache/solr/search/facet/TestJsonFacets.java
Author: yonik
Date: Sat Apr 18 14:27:26 2015
New Revision: 1674519
URL: http://svn.apache.org/r1674519
Log:
SOLR-7422: "type" param for JSON Facet API for flatter structure
Modified:
lucene/dev/trunk/solr/CHANGES.txt
lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/facet/FacetRequest.java
lucene/dev/trunk/solr/core/src/test/org/apache/solr/search/facet/TestJsonFacets.java
Modified: lucene/dev/trunk/solr/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/CHANGES.txt?rev=1674519&r1=1674518&r2=1674519&view=diff
==============================================================================
--- lucene/dev/trunk/solr/CHANGES.txt (original)
+++ lucene/dev/trunk/solr/CHANGES.txt Sat Apr 18 14:27:26 2015
@@ -100,6 +100,11 @@ New Features
* SOLR-7376: Return raw XML or JSON (in the appropriate writer) using DocumentTransformers.
?fl=id,name,json_s:[json],xml_s:[xml] (ryan)
+* SOLR-7422: Optional flatter form for the JSON Facet API via a "type" parameter:
+ top_authors : { type:terms, field:author, limit:5 } is equivalent to
+ top_authors : { terms : { field:author, limit:5 } }
+ (yonik)
+
Bug Fixes
----------------------
Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/facet/FacetRequest.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/facet/FacetRequest.java?rev=1674519&r1=1674518&r2=1674519&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/facet/FacetRequest.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/facet/FacetRequest.java Sat Apr 18 14:27:26 2015
@@ -366,24 +366,38 @@ abstract class FacetParser<FacetRequestT
}
public Object parseFacetOrStat(String key, Object o) throws SyntaxError {
- if (o instanceof String) {
- return parseStringFacetOrStat(key, (String)o);
- }
-
- if (!(o instanceof Map)) {
- throw err("expected Map but got " + o);
- }
-
- // { "range" : { "field":...
- Map<String,Object> m = (Map<String,Object>)o;
- if (m.size() != 1) {
- throw err("expected facet/stat type name, like {range:{... but got " + m);
- }
- // Is this most efficient way?
- Map.Entry<String,Object> entry = m.entrySet().iterator().next();
- String type = entry.getKey();
- Object args = entry.getValue();
+ if (o instanceof String) {
+ return parseStringFacetOrStat(key, (String)o);
+ }
+
+ if (!(o instanceof Map)) {
+ throw err("expected Map but got " + o);
+ }
+
+ // The type can be in a one element map, or inside the args as the "type" field
+ // { "query" : "foo:bar" }
+ // { "range" : { "field":... } }
+ // { "type" : range, field : myfield, ... }
+ Map<String,Object> m = (Map<String,Object>)o;
+ String type;
+ Object args;
+
+ if (m.size() == 1) {
+ Map.Entry<String,Object> entry = m.entrySet().iterator().next();
+ type = entry.getKey();
+ args = entry.getValue();
+ // throw err("expected facet/stat type name, like {range:{... but got " + m);
+ } else {
+ // type should be inside the map as a parameter
+ Object typeObj = m.get("type");
+ if (!(typeObj instanceof String)) {
+ throw err("expected facet/stat type name, like {type:range, field:price, ...} but got " + typeObj);
+ }
+ type = (String)typeObj;
+ args = m;
+ }
+
return parseFacetOrStat(key, type, args);
}
Modified: lucene/dev/trunk/solr/core/src/test/org/apache/solr/search/facet/TestJsonFacets.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/test/org/apache/solr/search/facet/TestJsonFacets.java?rev=1674519&r1=1674518&r2=1674519&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/test/org/apache/solr/search/facet/TestJsonFacets.java (original)
+++ lucene/dev/trunk/solr/core/src/test/org/apache/solr/search/facet/TestJsonFacets.java Sat Apr 18 14:27:26 2015
@@ -309,7 +309,7 @@ public class TestJsonFacets extends Solr
// nested query facets
client.testJQ(params(p, "q", "*:*"
- , "json.facet", "{ catB:{query:{q:'${cat_s}:B', facet:{nj:{query:'${where_s}:NJ'}, ny:{query:'${where_s}:NY'}} }}}"
+ , "json.facet", "{ catB:{type:query, q:'${cat_s}:B', facet:{nj:{query:'${where_s}:NJ'}, ny:{query:'${where_s}:NY'}} }}"
)
, "facets=={ 'count':6, 'catB':{'count':3, 'nj':{'count':2}, 'ny':{'count':1}}}"
);
@@ -331,12 +331,12 @@ public class TestJsonFacets extends Solr
// field/terms facet
client.testJQ(params(p, "q", "*:*"
- , "json.facet", "{c1:{field:'${cat_s}'}, c2:{field:{field:'${cat_s}'}}, c3:{terms:{field:'${cat_s}'}} }"
+ , "json.facet", "{c1:{field:'${cat_s}'}, c2:{field:{field:'${cat_s}'}}, c3:{type:terms, field:'${cat_s}'} }"
)
, "facets=={ 'count':6, " +
"'c1':{ 'buckets':[{ 'val':'B', 'count':3}, { 'val':'A', 'count':2}]}, " +
- "'c2':{ 'buckets':[{ 'val':'B', 'count':3}, { 'val':'A', 'count':2}]}, " +
- "'c3':{ 'buckets':[{ 'val':'B', 'count':3}, { 'val':'A', 'count':2}]}} "
+ "'c2':{ 'buckets':[{ 'val':'B', 'count':3}, { 'val':'A', 'count':2}]}, " +
+ "'c3':{ 'buckets':[{ 'val':'B', 'count':3}, { 'val':'A', 'count':2}]}} "
);
// test mincount
@@ -552,7 +552,7 @@ public class TestJsonFacets extends Solr
// basic range facet
client.testJQ(params(p, "q", "*:*"
- , "json.facet", "{f:{range:{field:${num_d}, start:-5, end:10, gap:5}}}"
+ , "json.facet", "{f:{type:range, field:${num_d}, start:-5, end:10, gap:5}}"
)
, "facets=={count:6, f:{buckets:[ {val:-5.0,count:1}, {val:0.0,count:2}, {val:5.0,count:0} ] } }"
);