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;
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[])
COUNT( DISTINCT mmrsm.source),
row_number( ) OVER (
PARTITION BY mfae.field ORDER BY COUNT(distinct mmrsm.source) DESC metarecord_ source_ map mmrsm ON (mfae.source = mmrsm.source) ignore_ fields) )
RETURNS SETOF RECORD AS $$
SELECT id, value, count FROM (
SELECT mfae.field AS id,
mfae.value,
) AS rownum
FROM metabib.facet_entry mfae
JOIN metabib.
WHERE mmrsm.source IN (SELECT * FROM unnest(hits))
AND mfae.field NOT IN (SELECT * FROM unnest(
GROUP by 1, 2
) x WHERE rownum <= max_facets;
$$ LANGUAGE SQL;