Comment 5 for bug 1505286

Revision history for this message
Galen Charlton (gmc) wrote :

For feedback, the following stored function definition expresses a suitable facets query for record result sets (and a metabib search version is easily written):

CREATE OR REPLACE FUNCTION facets_for_record_set(max_facets INT, ignore_fields INT[], hits BIGINT[])
RETURNS SETOF RECORD AS $$
    SELECT id, value, count FROM (
        SELECT mfae.field AS id,
        mfae.value,
        COUNT(DISTINCT mmrsm.source),
        row_number() OVER (
            PARTITION BY mfae.field ORDER BY COUNT(distinct mmrsm.source) DESC
        ) AS rownum
    FROM metabib.facet_entry mfae
    JOIN metabib.metarecord_source_map mmrsm ON (mfae.source = mmrsm.source)
    WHERE mmrsm.source IN (SELECT * FROM unnest(hits))
    AND mfae.field NOT IN (SELECT * FROM unnest(ignore_fields))
    GROUP by 1, 2
) x WHERE rownum <= max_facets;
$$ LANGUAGE SQL;