From: Mike Rylander Date: Fri, 23 Sep 2011 19:57:58 +0000 (-0400) Subject: Provide a full suite of search/browse top/center alpha/rank functions based on author... X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=07d985330bfb5c6d9e71ea43a6f37caa5e1223d2;p=evergreen%2Fequinox.git Provide a full suite of search/browse top/center alpha/rank functions based on authority tag, bib tag or browse axis Signed-off-by: Mike Rylander --- diff --git a/Open-ILS/src/sql/Pg/011.schema.authority.sql b/Open-ILS/src/sql/Pg/011.schema.authority.sql index 838de08103..15c1a9b93b 100644 --- a/Open-ILS/src/sql/Pg/011.schema.authority.sql +++ b/Open-ILS/src/sql/Pg/011.schema.authority.sql @@ -328,54 +328,6 @@ index to defend against duplicated authority records from the same thesaurus. $$; -CREATE OR REPLACE FUNCTION authority.find_start_pivot( a TEXT, q TEXT, lim INT DEFAULT 10, offs INT DEFAULT 0 ) RETURNS TABLE (rank NUMERIC, id BIGINT, record BIGINT, atag INT, value TEXT, sort_value TEXT) AS $$ -BEGIN - RETURN QUERY - SELECT ts_rank_cd(ash.index_vector,ptsq.term,14)::numeric - + CASE WHEN ash.sort_value LIKE t.term || '%' THEN 2 ELSE 0 END - + CASE WHEN ash.value LIKE t.term || '%' THEN 1 ELSE 0 END, - ash.id, - ash.record, - ash.atag, - ash.value, - ash.sort_value - FROM authority.simple_heading ash - JOIN authority.control_set_authority_field acsaf ON (acsaf.id = ash.atag) - JOIN authority.browse_axis_authority_field_map abaafm ON (abaafm.field = acsaf.id), - public.naco_normalize(q) t(term), - plainto_tsquery(q) ptsq(term) - WHERE abaafm.axis = a - AND ash.sort_value >= t.term OR ash.value >= t.term - ORDER BY ash.sort_value, 1 DESC - LIMIT lim - OFFSET offs; -END; -$$ LANGUAGE PLPGSQL ROWS 10; - -CREATE OR REPLACE FUNCTION authority.find_search_pivot( a TEXT, q TEXT, lim INT DEFAULT 10, offs INT DEFAULT 0 ) RETURNS TABLE (rank NUMERIC, id BIGINT, record BIGINT, atag INT, value TEXT, sort_value TEXT) AS $$ -BEGIN - RETURN QUERY - SELECT ts_rank_cd(ash.index_vector,ptsq.term,14)::numeric - + CASE WHEN ash.sort_value LIKE t.term || '%' THEN 2 ELSE 0 END - + CASE WHEN ash.value LIKE t.term || '%' THEN 1 ELSE 0 END, - ash.id, - ash.record, - ash.atag, - ash.value, - ash.sort_value - FROM authority.simple_heading ash - JOIN authority.control_set_authority_field acsaf ON (acsaf.id = ash.atag) - JOIN authority.browse_axis_authority_field_map abaafm ON (abaafm.field = acsaf.id), - public.naco_normalize(q) t(term), - plainto_tsquery(q) ptsq(term) - WHERE abaafm.axis = a - AND ash.index_vector @@ ptsq.term - ORDER BY 1 DESC, ash.sort_value - LIMIT lim - OFFSET offs; -END; -$$ LANGUAGE PLPGSQL ROWS 10; - -- Adding indexes using oils_xpath_string() for the main entry tags described in -- authority.control_set_authority_field would speed this up, if we ever want to use it, though -- the existing index on authority.normalize_heading() helps already with a record in hand