From: Mike Rylander Date: Thu, 22 Sep 2011 20:19:10 +0000 (-0400) Subject: Add a sort_value field to contain the NFI-adjusted headings, and functions to search... X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=f1d1159d4fe9d65f7620ecea307849508fa70f54;p=evergreen%2Fequinox.git Add a sort_value field to contain the NFI-adjusted headings, and functions to search/sort said headings 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 a9244fba7f..838de08103 100644 --- a/Open-ILS/src/sql/Pg/011.schema.authority.sql +++ b/Open-ILS/src/sql/Pg/011.schema.authority.sql @@ -328,6 +328,53 @@ 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