You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ge...@apache.org on 2018/12/04 19:29:36 UTC
lucene-solr:master: Add 'prelim_sort' helper to SolrJ's TermsFacetMap
Repository: lucene-solr
Updated Branches:
refs/heads/master 868e00576 -> a5fb6f8ad
Add 'prelim_sort' helper to SolrJ's TermsFacetMap
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/a5fb6f8a
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/a5fb6f8a
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/a5fb6f8a
Branch: refs/heads/master
Commit: a5fb6f8adc6a0d65b11c4738c5bbf751fc01cffe
Parents: 868e005
Author: Jason Gerlowski <ge...@apache.org>
Authored: Tue Dec 4 12:49:02 2018 -0500
Committer: Jason Gerlowski <ge...@apache.org>
Committed: Tue Dec 4 14:29:29 2018 -0500
----------------------------------------------------------------------
.../solrj/request/json/TermsFacetMap.java | 26 ++++++++++++++++++++
...JsonQueryRequestFacetingIntegrationTest.java | 23 +++++++++++++++++
2 files changed, 49 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/a5fb6f8a/solr/solrj/src/java/org/apache/solr/client/solrj/request/json/TermsFacetMap.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/request/json/TermsFacetMap.java b/solr/solrj/src/java/org/apache/solr/client/solrj/request/json/TermsFacetMap.java
index e28f8a8..ea7c2fd 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/request/json/TermsFacetMap.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/request/json/TermsFacetMap.java
@@ -67,6 +67,12 @@ public class TermsFacetMap extends JsonFacetMap<TermsFacetMap> {
*
* Values can be based on 'count' (the number of results in each bucket), 'index' (the natural order of bucket values),
* or on any stat facet that occurs in the bucket. Defaults to "count desc" if not specified.
+ *
+ * By default, {@code sort} is calculated for all buckets generated by all shards. If {@code sort} is expensive a
+ * cheaper approximation can be provided using {@link #setPreliminarySort(String)} that will be run instead during
+ * bucket collection.
+ *
+ * @see TermsFacetMap#setPreliminarySort(String)
*/
public TermsFacetMap setSort(String sortString) {
if (sortString == null) {
@@ -77,6 +83,26 @@ public class TermsFacetMap extends JsonFacetMap<TermsFacetMap> {
}
/**
+ * Indicates an approximate sort calculation to be performed during initial bucket generation and collection.
+ *
+ * Values can be based on 'count' (the number of results in each bucket), 'index' (the natural order of bucket values),
+ * or on any stat facet that occurs in the bucket. Defaults to "count desc" if not specified.
+ *
+ * When no {@code prelim_sort} is provided, {@code sort} is calculated on all buckets generated by all shards. If
+ * {@code sort} is expensive, {@code prelim_sort} can be used to provide a cheaper approximation calculation that is
+ * run instead on initial bucket collection. {@code sort} is still used when assembling the final list of buckets.
+ *
+ * @see TermsFacetMap#setSort(String)
+ */
+ public TermsFacetMap setPreliminarySort(String preliminarySort) {
+ if (preliminarySort == null) {
+ throw new IllegalArgumentException("Parameter 'preliminarySort' must be non-null");
+ }
+ put("prelim_sort", preliminarySort);
+ return this;
+ }
+
+ /**
* Indicates the number of additional buckets to request internally beyond those required by {@link #setLimit(int)}.
*
* Defaults to -1 if not specified, which triggers some heuristic guessing based on other settings.
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/a5fb6f8a/solr/solrj/src/test/org/apache/solr/client/solrj/request/json/JsonQueryRequestFacetingIntegrationTest.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/test/org/apache/solr/client/solrj/request/json/JsonQueryRequestFacetingIntegrationTest.java b/solr/solrj/src/test/org/apache/solr/client/solrj/request/json/JsonQueryRequestFacetingIntegrationTest.java
index 344fdd2..4852c76 100644
--- a/solr/solrj/src/test/org/apache/solr/client/solrj/request/json/JsonQueryRequestFacetingIntegrationTest.java
+++ b/solr/solrj/src/test/org/apache/solr/client/solrj/request/json/JsonQueryRequestFacetingIntegrationTest.java
@@ -93,6 +93,29 @@ public class JsonQueryRequestFacetingIntegrationTest extends SolrCloudTestCase {
}
@Test
+ public void testTermsFacetWithPrelimSort() throws Exception {
+ final TermsFacetMap categoriesFacetMap = new TermsFacetMap("cat")
+ .setPreliminarySort("count desc")
+ .setSort("index desc")
+ .setLimit(3);
+ final JsonQueryRequest request = new JsonQueryRequest()
+ .setQuery("*:*")
+ .withFacet("top_cats", categoriesFacetMap);
+
+ QueryResponse response = request.process(cluster.getSolrClient(), COLLECTION_NAME);
+
+ assertExpectedDocumentsFoundAndReturned(response, NUM_TECHPRODUCTS_DOCS, 10);
+ final NestableJsonFacet topLevelFacetData = response.getJsonFacetingResponse();
+ assertEquals(NUM_TECHPRODUCTS_DOCS, topLevelFacetData.getCount());
+ //The prelim_sort/sort combination should give us the 3 most popular categories in reverse-alpha order
+ assertHasFacetWithBucketValues(topLevelFacetData, "top_cats",
+ new FacetBucket("memory", NUM_MEMORY),
+ new FacetBucket("electronics", NUM_ELECTRONICS),
+ new FacetBucket("currency", NUM_CURRENCY));
+
+ }
+
+ @Test
public void testTermsFacetWithNumBucketsRequested() throws Exception {
final TermsFacetMap categoriesFacetMap = new TermsFacetMap("cat")
.includeTotalNumBuckets(true)