5. Facets
Prev | Chapter 3. ZOOM | Next

## 5. Facets

Facets operations is not part of the official ZOOM specification, but is an Index Data extension for YAZ-based Z39.50 targets or Solr targets. In case the target can and is requested to return facets, using a result set the ZOOM client can request one or all facet fields. Using a facet field the client can request the term count and then interate over the terms.

        ZOOM_facet_field *ZOOM_resultset_facets(ZOOM_resultset r);

        const char ** ZOOM_resultset_facets_names(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_resultset_facets_names`. `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.

Prev | Up | Next
4. Records | Home | 6. Scan