[Kobv-opus-tester] Probleme bei Migration von OPUS 3->OPUS 4.03

Michael Neufing mneufing at ub.uni-kl.de
Fre Feb 25 09:19:50 MET 2011


Liebes Opus Entwicklerteam,

wir haben gestern eine neue Testmigration mit unseren Daten von OPUS 3.2 
auf OPUS 4.03 durchgeführt und dabei zwei Probleme festgestellt.
Das erste der beiden konnten wir selbst lösen:

Einträge in der Spalte "title_de" der Tabelle "opus_diss" von Opus 3 
werden anscheinend als zusätzliche Abstracts anstatt als Titel importiert.
Das Problem liegt wohl in der Datei 
"opus4/import/stylesheets/opus3.xslt" in Zeile 285:
---------------------------------------------------------------------------
...
<!-- Dissertation:TitleMain, Language="deu" (2nd) -->
<xsl:for-each select="/mysqldump/database/table_data[@name='opus_diss' 
or @name='temp_diss']/row[field[@name='source_opus']=$OriginalID]">
<xsl:if test="string-length(field[@name='title_de'])>0">
<xsl:element name="TitleAbstract"> <!-- Hier sollte bestimmt "TitleMain" 
stehen -->
<xsl:attribute name="OldLanguage">
<xsl:text>ger</xsl:text>
</xsl:attribute>
<xsl:attribute name="Value">
<xsl:value-of select="field[@name='title_de']" />
</xsl:attribute>
</xsl:element>
</xsl:if>
</xsl:for-each>
...
---------------------------------------------------------------------------
Nachdem wir das geändert hatten, wurden die Daten richtig in die 
Datenbank importiert, es gab nun jedoch sehr viele Datensätze, welche 
nun 2 deutsche Titel hatten.
Dies führte nun dazu, dass diese scheinbar nicht mehr in das Schema des 
Solr-Servers passen:

(aus der Solr-Logdatei)
----------------------------------------------------------------------------
...
Feb 24, 2011 10:21:26 AM org.apache.solr.common.SolrException log
SEVERE: org.apache.solr.common.SolrException: ERROR: [18] multiple 
values encountered for non multiValued field title_output: [TADDOLe als 
chirale Dotierstoffe in nematischen Phasen, TADDOLe als chirale 
Dotierstoffe in nematischen Phasen]
         at 
org.apache.solr.update.DocumentBuilder.toDocument(DocumentBuilder.java:214)
         at 
org.apache.solr.update.processor.RunUpdateProcessor.processAdd(RunUpdateProcessorFactory.java:60)
         at 
org.apache.solr.handler.XMLLoader.processUpdate(XMLLoader.java:139)
...
----------------------------------------------------------------------------
Das Dokument wird nicht in den Index aufgenommen und ist über die 
Suchfunktion nicht zu finden. Es steht allerdings richtig in der 
Datenbank und lässt sich direkt über die Document-Id problemlos aufrufen.
Sehr unschön äußert sich dieses Problem bei den gruppierten Ansichten. 
So wurde in unserem Beispiel unter dem Punkt "Browsen->Dokumenttypen" 
angezeigt, dass es 578 Dissertationen gibt (diese Zahl kommt scheinbar 
aus der Datenbank), allerdings werden,
wenn man auf den Link klickt nur 570 Dokumente gefunden (diese Zahl 
kommt scheinbar vom Solr).

Weitere Auswertungen der Logdateien ergaben, dass dieses Problem auch 
unabhängig von dem zuerst geschilderten Problem auftritt. Bei uns kommt 
es oft vor, das ein deutscher Titel sowohl als original Titel als auch 
als deutscher Titel eingetragen wurde.
Bei der Migration werden daraus zwei Einträge in der Tabelle 
"document_title_abstracts".

Dieses Problem konnten wir durch das Löschen der Duplikate und 
Neuaufbauen des Solrindexes weitestgehend beheben. Folgende SQL-Abfragen 
wurden benutzt:

1. Zum Suchen der betroffenen Dokumente:
----------------------------------------------------------------------------
select `document_id` from document_title_abstracts dta group by 
`document_id`, `type`,`language` having count(*) > 1 order by document_id;
----------------------------------------------------------------------------

2. Zum Löschen von absolut identischen Einträgen in der Tabelle 
"document_title_abstracts" :
----------------------------------------------------------------------------
drop table IF EXISTS document_title_abstracts_backup ;
create table document_title_abstracts_backup like document_title_abstracts;
insert into document_title_abstracts_backup select * from 
document_title_abstracts;
drop table IF EXISTS `temp_ids`;
CREATE TABLE IF NOT EXISTS `temp_ids` (   `id` int(11) NOT NULL,   
PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
insert into temp_ids (select max(dtab.id) as id from 
document_title_abstracts_backup dtab group by dtab.`document_id`, 
dtab.`type` ,dtab.`value`,dtab.`language` having count(*) > 1  );
delete FROM `document_title_abstracts` WHERE id in (select id from 
temp_ids);
delete from document_xml_cache where document_id in ( select 
dtab.document_id from document_title_abstracts_backup dtab join temp_ids 
tids on tids.id = dtab.id );
drop table IF EXISTS `temp_ids`;
drop table IF EXISTS document_title_abstracts_backup;
----------------------------------------------------------------------------



Mit freundlichen Grüßen
Michael Neufing

-- 
Universitätsbibliothek (UB)
der Technischen Universität Kaiserslautern
- EDV-Abteilung -

Michael Neufing

Paul-Ehrlich-Straße 32
67663 Kaiserslautern

Telefon: +49-631/205-2269
E-Mail: mneufing at ub.uni-kl.de

-------------- nächster Teil --------------
Ein Dateianhang mit Binärdaten wurde abgetrennt...
Dateiname   : mneufing.vcf
Dateityp    : text/x-vcard
Dateigröße  : 359 bytes
Beschreibung: nicht verfügbar
URL         : http://listserv.zib.de/mailman/private/kobv-opus-tester/attachments/20110225/ff2f332a/mneufing.vcf