[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