LP#1505286: limit number of facets retrieved
[Evergreen.git] / Open-ILS / src / sql / Pg / upgrade / XXXX.schema.limit_facets.sql
1 BEGIN;
2
3 --- SELECT evergreen.upgrade_deps_block_check('XXXX', :eg_version);
4
5 CREATE OR REPLACE FUNCTION search.facets_for_record_set(ignore_facet_classes TEXT[], hits BIGINT[]) RETURNS TABLE (id INT, value TEXT, count BIGINT) AS $$
6     SELECT id, value, count FROM (
7         SELECT mfae.field AS id,
8                mfae.value,
9                COUNT(DISTINCT mmrsm.source),
10                row_number() OVER (
11                 PARTITION BY mfae.field ORDER BY COUNT(distinct mmrsm.source) DESC
12                ) AS rownum
13         FROM metabib.facet_entry mfae
14         JOIN metabib.metarecord_source_map mmrsm ON (mfae.source = mmrsm.source)
15         JOIN config.metabib_field cmf ON (cmf.id = mfae.field)
16         WHERE mmrsm.source IN (SELECT * FROM unnest(hits))
17         AND cmf.facet_field
18         AND cmf.field_class NOT IN (SELECT * FROM unnest(ignore_facet_classes))
19         GROUP by 1, 2
20     ) all_facets
21     WHERE rownum <= (SELECT COALESCE((SELECT value::INT FROM config.global_flag WHERE name = 'search.max_facets_per_field' AND enabled), 1000));
22 $$ LANGUAGE SQL;
23
24 CREATE OR REPLACE FUNCTION search.facets_for_metarecord_set(ignore_facet_classes TEXT[], hits BIGINT[]) RETURNS TABLE (id INT, value TEXT, count BIGINT) AS $$
25     SELECT id, value, count FROM (
26         SELECT mfae.field AS id,
27                mfae.value,
28                COUNT(DISTINCT mmrsm.metarecord),
29                row_number() OVER (
30                 PARTITION BY mfae.field ORDER BY COUNT(distinct mmrsm.metarecord) DESC
31                ) AS rownum
32         FROM metabib.facet_entry mfae
33         JOIN metabib.metarecord_source_map mmrsm ON (mfae.source = mmrsm.source)
34         JOIN config.metabib_field cmf ON (cmf.id = mfae.field)
35         WHERE mmrsm.metarecord IN (SELECT * FROM unnest(hits))
36         AND cmf.facet_field
37         AND cmf.field_class NOT IN (SELECT * FROM unnest(ignore_facet_classes))
38         GROUP by 1, 2
39     ) all_facets
40     WHERE rownum <= (SELECT COALESCE((SELECT value::INT FROM config.global_flag WHERE name = 'search.max_facets_per_field' AND enabled), 1000));
41 $$ LANGUAGE SQL;
42
43 INSERT INTO config.global_flag (name, value, label, enabled)
44     VALUES (
45         'search.max_facets_per_field',
46         '1000',
47         oils_i18n_gettext(
48             'search.max_facets_per_field',
49             'Search: maximum number of facet values to retrieve for each facet field',
50             'cgf',
51             'label'
52         ),
53         TRUE
54     );
55
56 COMMIT;