5. Facets

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.