Configure Sorting and Limiting of Facet Values
Introduction
Goal
Configure sorting and limiting of facet values in a faceted tree.
Background
In a faceted tree, facet values are by default sorted by their result counts. It is possible to configure a different sorting and sorting order, as well limit the number of facet values.
Example use cases are a date facet with resolution "year" sorted descending on facet value (year), and a tag cloud showing the 10 most used tags.
Configuration
Facet value ordering and limit are configured per facet in the hippofacnav:facetnodenames property of a faceted tree configuration. The following configuration parameters are available:
- sortby (type: String) with possible values:
- count (sorting on count, descending is the default, except for ranges)
- facetvalue
- config (in case of configured ranges: the default order for config is ascending, which is the order how it is configured)
- sortorder (type: String, options: descending/ascending)
- limit: (type: int) the number of unique facetvalues shown (useful for tag cloud's and performance when thousands of unique facets are present)
Ordering on facetvalue works for Long, Double, Date, and String values. A runtime logical check is performed to determine whether we are dealing with numerical values or Strings.
Examples
Sort by Facet Value
Suppose you have product documents with a String property myproject:brand. and you want to sort the brands by name. This can be configured as follows:
/content/documents/myproject: /faceted-products: jcr:primaryType: hippofacnav:facetnavigation hippo:docbase: d2b1775c-fb97-4080-bd66-ede4ac874b5a hippofacnav:facets: [ myproject:brand ] hippofacnav:facetnodenames: [ 'Brand${sortby:"facetvalue", sortorder:"ascending"}' ]
Limit the Number of Facet Values
Suppose you have thousands of brands and only want to show the top 25 brands. You can achieve this by configuring a limit as well:
/content/documents/myproject: /faceted-products: jcr:primaryType: hippofacnav:facetnavigation hippo:docbase: d2b1775c-fb97-4080-bd66-ede4ac874b5a hippofacnav:facets: [ myproject:brand ] hippofacnav:facetnodenames: [ 'Brand${sortby:"facetvalue", sortorder:"ascending", limit:25}' ]
Sort by Configured Ranges
Suppose you also configure a facet value ranges for myproject:brand. In that case, you can order the facet values on the configured range names as follows:
/content/documents/myproject: /faceted-products: jcr:primaryType: hippofacnav:facetnavigation hippo:docbase: d2b1775c-fb97-4080-bd66-ede4ac874b5a hippofacnav:facets: [ "myproject:brand$[{name:'all', resolution:'string'},\ \ {name:'a f', resolution:'string', lower:'a', upper:'g'},\ \ {name:'g m', resolution:'string', lower:'g', upper:'n'},\ \ {name:'n z', resolution:'string', lower:'n', upper:'{'}]" ] hippofacnav:facetnodenames: [ 'Brand${sortby:"config", sortorder:"descending"}' ]