ValuesSearch.groupInto( bounds as bucketDefinition ) as ValuesSearch
Groups the values into buckets between bound values, which must appear in increasing order.
Create buckets using the jsearch.makeBucket
or
jsearch.makeHeatMap
helper functions.
Each bucket includes the previous boundary and excludes the
following boundary. To assign names to the buckets, alternate
calls to jsearch.bucketName
with the bound values.
Empty buckets are thrown away by default, so it can be
efficient to estimate bounds instead of determining precisely
the smallest and largest bound. You can use
jsearch.makeHeatMap
to group geospatial values
into a heatmap.
You cannot use this method with ValuesSearch.match
or ValuesSearch.aggregate
.
const jsearch = require('/MarkLogic/jsearch.sjs'); jsearch.values('price') .where(cts.directoryQuery('/books/')) .groupInto([10,20]) .result(); /* Result: A set of 3 unnamed buckets, similar to the following: [{"minimum":8, "maximum":9, "upperBound":10}, {"minimum":10, "maximum":18, "lowerBound":10, "upperBound":20}, {"minimum":20, "maximum":30, "lowerBound":20}] */
const jsearch = require('/MarkLogic/jsearch.sjs'); jsearch.values('price') .where(cts.directoryQuery('/books/')) .groupInto([ jsearch.bucketName(), 10, jsearch.bucketName(), 20, jsearch.bucketName() ]) .reduce({frequency: 'item'}) .result(); /* Result: Three buckets with the default name. The bucket name is returned in a "name" property. If you request frequency data, an object is returned instead of an array, and the object has a property corresponding to each bucket name. See the next example for this style of output. [ { "minimum": 8, "maximum": 9, "upperBound": 10, "name": "under $10" }, { "minimum": 10, "maximum": 18, "lowerBound": 10, "upperBound": 20, "name": "$10 to $19.99" }, { "minimum": 20, "maximum": 30, "lowerBound": 20, "upperBound": 1000, "name": "over $20" } ] */
const jsearch = require('/MarkLogic/jsearch.sjs'); jsearch.values('price') .where(cts.directoryQuery('/books/')) .groupInto([ jsearch.bucketName('under $10'), 10, jsearch.bucketName('$10 to $19.99'), 20, jsearch.bucketName('over $20'), 1000 ]) .reduce({frequency: 'item'}) .result(); /* Result: A set of three buckets with custom names, similar to the following. The result is an object rather than an array because of the inclusion of frequency data. { "under $10": { "value": { "minimum": 8, "maximum": 9, "upperBound": 10 }, "frequency": 2 }, "$10 to $19.99": { "value": { "minimum": 10, "maximum": 18, "lowerBound": 10, "upperBound": 20 }, "frequency": 4 }, "over $20": { "value": { "minimum": 20, "maximum": 30, "lowerBound": 20, "upperBound": 1000 }, "frequency": 3 } } */
Stack Overflow: Get the most useful answers to questions from the MarkLogic community, or ask your own question.