LP932540: Fix ISSN indexing
authorDan Scott <dan@coffeecode.net>
Thu, 22 Mar 2012 02:39:40 +0000 (22:39 -0400)
committerMike Rylander <mrylander@gmail.com>
Mon, 26 Mar 2012 14:55:46 +0000 (10:55 -0400)
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 <dan@coffeecode.net>
Signed-off-by: Mike Rylander <mrylander@gmail.com>
Open-ILS/src/sql/Pg/950.data.seed-values.sql
Open-ILS/src/sql/Pg/upgrade/XXXX.schema.do_not_despace_issns.sql [new file with mode: 0644]

index aa98c2e..e17f0ee 100644 (file)
@@ -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 (file)
index 0000000..b788a2d
--- /dev/null
@@ -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
+;