From 5bdbc2ce4abeb506cb2daa65ce7b4b0c6ced109c Mon Sep 17 00:00:00 2001 From: Dan Scott Date: Wed, 21 Mar 2012 22:39:40 -0400 Subject: [PATCH] LP932540: Fix ISSN indexing The default config.metabib_field_index_norm_map contains a 'replace' entry for the ISSN identifier field that replaces spaces with "". That was meant to handle ISSNs that incorrectly contain a space instead of a hyphen; it normalizes them from: "1234 1234" to "12341234". However, that breaks indexing ISSNs if there are multiple ISSNs in the record, or even if there is an extra character in the same subfield as the primary ISSN, as all spaces are removed. This commit removes the 'replace' entry for the ISSN identifier field and reindexes potentially damaged ISSN index entries. Signed-off-by: Dan Scott Signed-off-by: Mike Rylander --- Open-ILS/src/sql/Pg/950.data.seed-values.sql | 9 -------- .../XXXX.schema.do_not_despace_issns.sql | 21 +++++++++++++++++++ 2 files changed, 21 insertions(+), 9 deletions(-) create mode 100644 Open-ILS/src/sql/Pg/upgrade/XXXX.schema.do_not_despace_issns.sql diff --git a/Open-ILS/src/sql/Pg/950.data.seed-values.sql b/Open-ILS/src/sql/Pg/950.data.seed-values.sql index aa98c2e6d5..e17f0eec25 100644 --- a/Open-ILS/src/sql/Pg/950.data.seed-values.sql +++ b/Open-ILS/src/sql/Pg/950.data.seed-values.sql @@ -7393,15 +7393,6 @@ INSERT INTO config.metabib_field_index_norm_map (field,norm,params) WHERE i.func IN ('replace') AND m.id IN (19); -INSERT INTO config.metabib_field_index_norm_map (field,norm,params) - SELECT m.id, - i.id, - $$[" ",""]$$ - FROM config.metabib_field m, - config.index_normalizer i - WHERE i.func IN ('replace') - AND m.id IN (19); - INSERT INTO config.metabib_field_index_norm_map (field,norm,pos) SELECT m.id, i.id, diff --git a/Open-ILS/src/sql/Pg/upgrade/XXXX.schema.do_not_despace_issns.sql b/Open-ILS/src/sql/Pg/upgrade/XXXX.schema.do_not_despace_issns.sql new file mode 100644 index 0000000000..b788a2d488 --- /dev/null +++ b/Open-ILS/src/sql/Pg/upgrade/XXXX.schema.do_not_despace_issns.sql @@ -0,0 +1,21 @@ +-- Delete the index normalizer that was meant to remove spaces from ISSNs +-- but ended up breaking records with multiple ISSNs +DELETE FROM config.metabib_field_index_norm_map WHERE id IN ( + SELECT map.id FROM config.metabib_field_index_norm_map map + INNER JOIN config.metabib_field cmf ON cmf.id = map.field + INNER JOIN config.index_normalizer cin ON cin.id = map.norm + WHERE cin.func = 'replace' + AND cmf.field_class = 'identifier' + AND cmf.name = 'issn' + AND map.params = $$[" ",""]$$ +); + +-- Reindex records that have more than just a single ISSN +-- to ensure that spaces are maintained +SELECT metabib.reingest_metabib_field_entries(source) + FROM metabib.identifier_field_entry mife + INNER JOIN config.metabib_field cmf ON cmf.id = mife.field + WHERE cmf.field_class = 'identifier' + AND cmf.name = 'issn' + AND char_length(value) > 9 +; -- 2.43.2