Facet operations is not part of the official ZOOM specification, but is an Index Data extension for YAZ-based Z39.50 targets, Solr and SRU 2.0 targets. Facets may be requestd by the facets option before a search is sent. For inspection of the returned facets, the following functions are available:
ZOOM_facet_field *ZOOM_resultset_facets(ZOOM_resultset r); ZOOM_facet_field ZOOM_resultset_get_facet_field(ZOOM_resultset r, const char *facet_name); ZOOM_facet_field ZOOM_resultset_get_facet_field_by_index(ZOOM_resultset r, int pos); size_t ZOOM_resultset_facets_size(ZOOM_resultset r); const char *ZOOM_facet_field_name(ZOOM_facet_field facet_field); size_t ZOOM_facet_field_term_count(ZOOM_facet_field facet_field); const char *ZOOM_facet_field_get_term(ZOOM_facet_field facet_field, size_t idx, int *freq);
References to temporary structures are returned by all functions.
They are only valid as long the Result set is valid.
ZOOM_resultset_get_facet_field
or
ZOOM_resultset_get_facet_field_by_index
.
ZOOM_resultset_facets
.
ZOOM_facet_field_name
.
ZOOM_facet_field_get_term
.
A single Facet field is returned by function
ZOOM_resultset_get_facet_field
or
ZOOM_resultset_get_facet_field_by_index
that takes
a result set and facet name or positive index respectively. First
facet has position zero. If no facet could be obtained (invalid name
or index out of bounds) NULL
is returned.
An array of facets field can be returned by
ZOOM_resultset_facets
. The length of the array is
given by ZOOM_resultset_facets_size
. The array is
zero-based and last entry will be at
ZOOM_resultset_facets_size(result_set)
-1.
It is possible to interate over facets by name, by calling
ZOOM_resultset_facets_names
.
This will return an const array of char * where each string can be used
as parameter for ZOOM_resultset_get_facet_field
.
Function ZOOM_facet_field_name
gets the request
facet name from a returned facet field.
Function ZOOM_facet_field_get_term
returns the
idx'th term and term count for a facet field.
Idx must between 0 and
ZOOM_facet_field_term_count
-1, otherwise the
returned reference will be NULL
. On a valid idx, the
value of the freq reference will be the term count.
The freq
parameter must be valid pointer to integer.