Die Volltextsuche im Archiv von Linux-Magazin und anderen Fachzeitschriften scheint ein Kinderspiel, liegen die Artikel digitalisiert vor. Allerdings muss die Software für nützliche Resultate vor allem die Spracherkennung beherrschen.
Der erste Teil der Artikelreihe [1] stellte Datafari [2] als vielseitigen, auf Solr basierenden Open-Source-Suchserver vor. Als Bindeglied zwischen dem Dokumentendepot auf einem Webserver und Solr fungierte Apache Manifold CF (MCF [3]).
Als wenig zielführend erwies sich allerdings der Einsatz des weithin bekannten Solr Cell, einer Content-Extraction-Library. Die Bibliothek sollte die Artikel des Linux-Magazin-Archivs indexieren, doch die Suchergebnisse enthielten viele störende Bestandteile. Schuld daran waren die Navigationselemente im Kopf der Artikeldateien. Was im Browser des Lesers als komfortabel klickbare Verknüpfung aller Ausgaben erscheint, entpuppte sich beim Indexieren als Ursache für die schlechte Spracherkennung durch Solr. Die Sprache der zu indexierenden Inhalte korrekt zu erkennen ist allerdings unentbehrlich: Ohne sprachabhängige Textanalyse lässt sich kein ernst zu nehmender Suchserver bauen.
Wie im ersten Teil muss auch im zweiten wieder die 25-Jahres-DVD von LM 10/2019 herhalten. Als Alternative eignen sich die in lockerer Folge davor erschienenen LM-Mega-Archiv-DVDs. Für Interessierte stehen über den Listing-Service des Verlags sämtliche Konfigurationsdaten zu den Beispielen der Artikelreihe bereit [14].
Dokumentenhändler
Das HTTP- und XML-Interface von Solr greift mithilfe adressierbarer Request Handler (Abbildung 1, rechte Hälfte, links) auf die Funktionskomplexe zu. Diese Handler definiert die Konfigurationsdatei »solrconfig.xml«. Alle Dokumente durchlaufen dann sogenannte Update Request Handler und anschließend eine Reihe von Update-Prozessoren in der Update-Chain (Abbildung 1, rechts, mittig). Am Ende erfolgt eine Aktualisierung des Index durch den Indexer (Abbildung 1, rechts, ganz rechts). Welcher Update Handler zum Einsatz kommt, hängt dabei in der Regel vom Dokumententyp ab.
Datafari nutzt von Haus aus einen Update Request Handler mit dem Namen Solr Cell (»/update/extract/«), der zahlreiche Dateiformate mit Apache Tika [4] verarbeitet. Die Implementierung bringt aber auch zwei neue, sehr sinnvoll einsetzbare Request Handler mit. Der erste der beiden ist der Generic Update Request Handler. Er unterstützt Architekturen, die Text und Metadaten bereits durch vorgelagerte Komponenten trennen und nicht erst in Solr. Hierzu gehören solche, deren Verarbeitungsketten auf MCF Transformer Connections wie dem Tika Extractor basieren.
HTML Update Request Handler
Als wahre Perle erweist sich der zweite vom Entwicklerteam für HTML-Dokumente beigesteuerte Update Request Handler mit eingebautem Jsoup-Parser [5]. Beim Versuch, Text und Metadaten mit CSS-Selektoren aus dem Originaldokument zu extrahieren, entpuppt sich dessen Mechanismus als flexibel und praxistauglich.
Zu jedem Artikel definierte Tabelle 1 im ersten Teil der Artikelreihe einen Satz von Metadaten und konfigurierte im Solr-Schema entsprechende Felder. Dazu zählen der Titel, der Magazinname, der Jahrgang und die Nummer der Ausgabe. Sofern verfügbar, ergänzen noch die Dachzeile des Artikels, die Rubrik und Seitenzahlen die gespeicherten Informationen. Einige Metadaten präsentiert bereits der Titel der HTML-Seite im »<title>«-Tag (Listing 1).
Listing 1
<title>-Tag
<title>Elastische Treffer - Linux-Magazin 04/2014</title>
Aktualisierungskette
In der Solr Update Chain (Abbildung 1, oberste Reihe) sorgen Prozessoren der Typen »CloneFieldUpdateProcessorFactory« und »RegexReplaceProcessorFactory« für die gewünschten Ergebnisse [6]. Der erste erzeugt eine Kopie des Titelfelds, der zweite zerlegt die Kopie mit einem regulären Ausdruck in seine Bestandteile: tatsächlicher Titel, Ausgabe und Jahrgang. Listing 2 zeigt das anhand des Erscheinungsjahrs.
Listing 2
Metadaten durch Solr Update Chain
<processor class="solr.CloneFieldUpdateProcessorFactory">
<str name="source">title</str>
<str name="dest">year</str>
</processor>
<processor class="solr.RegexReplaceProcessorFactory">
<str name="fieldName">year</str>
<str name="pattern">^.*-\sLinux-Magazin\s\d{2}/(\d{4})$</str>
<str name="replacement">$1</str>
<bool name="literalReplacement">false</bool>
</processor>
Den Import der gesamten MCF-Konfiguration für dieses Projekt übernimmt die Restore-Funktion, die der Nutzer über das Admin-UI von Manifold CF erreicht (siehe erster Teil). Dazu entpackt der Admin zunächst das Tar-Archiv (»mcf_conf.tar« [14]) in einen Pfad der Wahl. Dann startet er den Import, indem er »Connectors« | »Backup and Restore connections« | »Restore MCF connections« auswählt und den Pfad angibt.
Geduld erweist sich bei dieser Prozedur als hilfreiche Eigenschaft, denn erst nach einer Kaffeepause erscheint die (hoffentlich positive) Rückmeldung. Da die GUI mit Ausnahme eines kleinen sich drehenden Rädchens bis zum Schluss keinen Mucks von sich gibt, verfolgt der Admin den Importvorgang notgedrungen über die Logdatei unter »/opt/datafari/logs/datafari-manifold.log«.
Abschließend passt er lediglich die Seed-URLs und bei Bedarf die Ausschlusslisten der Jobs über das Admin-UI von MCF an die vorgegebene Webserverumgebung an. Die übrigen zum Betrieb erforderlichen Skripte und Konfigurationsdateien warten auf dem erwähnten Listing-Server [14]. Ihr erfolgreicher Einsatz setzt allerdings voraus, dass der Admin Solr getreu der Anleitung im ersten Teil konfiguriert hat.
Bleibt noch zu erwähnen, dass die nun in die Metadaten gewanderten Bestandteile des »<title>«-Elements redundant sind, also alles in Listing 1 nach »Elastische Treffer« im Prinzip überflüssig ist. Dazu gibt es in der Update Chain einen weiteren »RegexReplaceProcessor«, um das »title«-Feld zu bearbeiten [14].
Ohne Titel
Unangenehmerweise setzen sich nicht alle Artikeltitel so zusammen, wie es das Beispiel demonstriert. Es gibt einige Fälle, in denen eine Titelangabe fehlt, etwa in häufig wiederkehrenden Rubriken wie dem Editorial. Ein Buch oder ein Artikel ohne Titel sind undenkbar. Deshalb soll in diesem Fall der Dateiname als Titel herhalten.
Den Ersatztitel zu erzeugen fällt leicht, denn Solr kann innerhalb der Update Chain externe Skripte aufrufen. Die dürfen in allen von der JVM unterstützten Programmiersprachen vorliegen und haben vor dem Indexieren vollen Zugriff auf das Solr-Dokument. Für das Linux-Magazin-Beispiel kommt hier ein Skript-Prozessor (Listing 3) mit wenigen Zeilen Javascript zum Einsatz (Listing 4). Er kopiert das vom Webserver gelieferte Metadatum »resource.name« in das Feld »title«, falls Letzteres leersteht.
Listing 3
Skript-Prozessor-Definition in solrconfig.xml
<processor class="solr.StatelessScriptUpdateProcessorFactory"> <str name="script">addreqp.js</str> <lst name="params"> <str name="fieldName">resourcename</str> <str name="paramName">resource.name</str> </lst> </processor> <processor class="solr.StatelessScriptUpdateProcessorFactory"> <str name="script">replace.js</str> <lst name="params"> <str name="fieldName">title</str> <str name="pattern">^\s*$</str> <str name="replField">resourcename</str> </lst> </processor>
Listing 4
Skript-Prozessor in Javascript
// Request Parameter in ein Indexfeld kopieren
function processAdd(cmd) {
doc = cmd.solrDoc;
field = params.get("fieldName");
param = params.get("paramName");
try {
doc.addField(field, req.getParams().get(param));
logger.debug("field added: " + field);
} catch (err) {
logger.error("cannot add field: " + err);
}
}
Mit etwas Glück lässt sich aus dem Dateinamen ein sinnvoller Titel ableiten. Die Update Chain berücksichtigt diese Sonderfälle, wie das Beispiel in Listing 5 zeigt.
Listing 5
Titel ersetzen
// Titel aus dem Dateinamen mit Substitution generieren <processor class="solr.RegexReplaceProcessorFactory"> <str name="fieldName">title</str> <str name="pattern">^readme\.html$|^login\.html$|^editorial\.html$</str> <str name="replacement">Editorial</str> </processor>
Die Dachzeile ist in der HTML-Datei jahrgangsabhängig mit zwei verschiedenen Tags (»<h2>«, »<h4>«) versehen oder fehlt mitunter sogar ganz. Eine Kombination der passenden CSS-Selektoren bildet das elegant ab (Listing 6). Treten im Artikel Überschriften beider Typen auf, wäre das Resultat standardmäßig eine wenig zielführende Zusammenfassung der Zeichenketten ohne Trennzeichen. Was die Datafari-Dokumentation verschweigt: Anwender dürfen beim Zusammenfassen mehrerer Werte glücklicherweise ein Trennzeichen definieren (Listing 6).
Listing 6
HTML Update Request Handler in solrconfig.xml
<requestHandler name="/update/website_lmde" class="com.francelabs.datafari.handler.html.HTMLRequestHandler"> <lst name="defaults"> <str name="id">id</str> <str name="field">content</str> <str name="field">title</str> <str name="field">headline</str> <str name="f.content.selector">section</str> <str name="f.content.separator"> </str> <str name="f.title.selector">title</str> <str name="f.headline.selector">article section h4, header section h2, h4</str> <str name="f.headline.separator">|</str> <str name="update.chain">updchain_lmde</str> </lst> </requestHandler>
Die Auswahl nur der ersten Überschrift als Dachzeile klappt dann schmerzlos mit einem regulären Ausdruck. Allerdings verwenden andere Update Request Handler das Leerzeichen als Trenner, statt ein wählbares Trennzeichen zu unterstützen. Das schränkt den Einsatzbereich je nach Anwendungsfall ein, weil das Trennzeichen dann im Fließtext untergeht.
Der eigentliche Text befindet sich innerhalb der »<section>«-Tags mit den Klassennamen »teaser« und »body«. Der Teaser fehlt allerdings bei älteren Ausgaben. Über den CSS-Selektor »section« wählt der Anwender jedoch alle erwünschten Textelemente aus.
Die beiden vom Entwicklerteam in »solrconfig.xml« vorkonfigurierten Update Chains (»datafari« und »datafariweb«) implementieren schon im Auslieferungszustand die Spracherkennung. Diese nützliche Funktion lässt sich nach ihrer im ersten Teil bereits angesprochenen Lokalisierung weiterhin verwenden. Sie bildet gleichzeitig die Voraussetzung für die korrekte Arbeitsweise der multilingualen Volltextsuche im Titel und im Text.
Die für das Linux-Magazin implementierte Update Chain enthält noch weitere, selbsterklärende Verarbeitungsschritte. Während die über den Include-Mechanismus geladenen, selbst definierten Request Handler in »solrconfig.xml« getrennt von den Datafari-eigenen Deklarationen bleiben, landen selbst definierte Update Prozessoren mitten in einer der beiden Update Chains mit dem Namen »datafari«. Auf diese merkwürdige Schnittstelle sollten Nutzer bei eigenen Experimenten achten und alle Modifikationen besser in der vorgesehenen Custom-Konfiguration für Request Handler zusammenfassen.
Alles in allem eignet sich die Solr Update Chain für kleinere Korrekturen der Feldinhalte. Dazu gehören das Tauschen oder Eliminieren von Zeichen und ganzen Zeichenketten inklusive aufeinanderfolgender Leerzeilen und das Zerlegen in einzelne Bestandteile. Weitere Anwendungsfälle sind das Zusammenfassen mehrerer Felder, das Zählen bestimmter Werte und das Aufrufen externer Skripte.
LM-Jahrgangs-DVDs
Die Jahrgangsscheiben des Linux-Magazins unterscheiden sich strukturell nur unwesentlich von der Archiv-DVD. Die Artikel verwenden aber je nach Ausgabejahr unterschiedliche Zeichensätze: ISO-8859-1 für Jahrgänge vor 2011 und UTF-8 für jüngere. Im Prinzip wäre eine jahrgangsabhängige Verarbeitung mit dem nachfolgend beschriebenen Solr Cell oder dem bereits vorgestellten HTML Request Handler realisierbar. Allerdings verspricht der Data Import Handler bessere Ergebnisse. Er kommt jedoch erst im übernächsten Teil dieser Reihe zum Einsatz. Wer nicht so lange warten möchte, kann den Job »LM_de« nach entsprechendem Anpassen der Seed-URL für einzelne Jahrgangs-DVDs ab 2011 einsetzen. Die Seed-URL verweist auf die Indexdatei des Jahrgangs (»index.html«) auf dem eigenen Webserver.
Solr Cell Comeback
Bisher basierte die Dokumentenverarbeitung ausschließlich auf dem HTML Request Handler. Das soll sich nun für das Indexieren von LinuxUser-Artikeln ändern. Dank der sparsamen Verwendung von Navigationselementen in den HTML-Dateien ist hier der Einsatz von Solr Cell nicht nur sinnvoll, sondern sogar zwingend: Tika als wesentliche Komponente von Solr Cell kümmert sich um die korrekte Behandlung der Zeichensätze. Die LinuxUser-Artikel liegen ab Erstausgabe 2000 bis Ende 2013 in ISO-8859-1 vor, Solr erwartet jedoch UTF-8. Ohne Tika wäre eine Zeichensatzkonvertierung innerhalb der Update Chain zu implementieren.
Wie beim Linux-Magazin liefert wieder ein Sammelarchiv den Grundstock, nämlich die Mega-Archiv-DVD von 2012 mit allen bis dahin erschienenen Ausgaben; einzelne Jahrgangs-DVDs dienen als Ergänzung. Ab Jahrgang 2014 kommt wegen der damit einhergehenden Vorteile wieder der HTML Handler zum Einsatz, und zwar mit einer aus der Konfiguration für das Linux-Magazin abgeleiteten Variante der Update Chain. Ein Job steuert den Massenimport (»SolrCell LUMA_de«) und zwei weitere (»SolrCell LU_de« und »LU_de«) kümmern sich abhängig vom Ausgabedatum um die Jahrgangs-DVDs.
Der HTML Handler bleibt trotz aller Vorzüge von Solr Cell weiterhin die erste Wahl, sobald das Quellmaterial in UTF-8 vorliegt. Zum weiteren Verständnis sei ein kurzer Blick auf die interne Arbeitsweise von Tika gestattet.
Tika produziert intern aus dem Quelldokument zunächst ein XHTML-Dokument. Kennt der Admin die Artikelstruktur, kann er dabei die Qualität der Textextraktion in besonderen Situationen verbessern. Dazu beschränkt er die XHTML-Elemente, die Tika zur Textextraktion heranziehen soll, mit einem XPath-Ausdruck. Die Deklaration aus Listing 7 begrenzt die Extraktion auf Elemente innerhalb des »<body>«-Tags.
Listing 7
XHTML-Elemente beschränken
<str name="xpath">/xhtml:html/xhtml:body/descendant::node()</str>
Für die LinuxUser-Artikel im HTML-Format erscheint diese Form angemessen. Den Namensraum »xhtml« anzugeben ist übrigens obligatorisch. Dieser eigentlich elegante Mechanismus hat jedoch einen großen Haken: Der XPath-Ausdruck erlaubt nur bestimmte Tags, die zudem außerhalb des Tika-Quelltexts nicht dokumentiert sind. Es fehlen die häufig verwendeten HTML5-Tags »<article>«, »<aside>« und »<section>« sowie eine Möglichkeit, mehrere Ausdrücke zu kombinieren.
Die Dachzeile ist in »<h4>«-Tags eingebettet. Das Capturing und Mapping von Solr Cell eignet sich prinzipiell zum Extrahieren, wenn das »<h4>«-Tag im ganzen HTML-Dokument nur einmal vorkommt – das ist bei LinuxUser der Fall. Andernfalls weist Solr Cell mehrere durch Leerzeichen getrennte Werte zu. Listing 8 zeigt die nun vollständige Deklaration von Solr Cell für den LinuxUser.
Listing 8
Solr Cell mit Parameterliste
<requestHandler class="solr.extraction.ExtractingRequestHandler" name="/update/extract_lude" startup="lazy"> <lst name="defaults"> <str name="captureAttr">true</str> <str name="lowernames">true</str> <str name="fmap.language">ignored_</str> <str name="fmap.source">ignored_</str> <str name="xpath">/xhtml:html/xhtml:body/descendant::node()</str> <str name="capture">h4</str> <str name="fmap.h4">headline</str> <str name="uprefix">ignored_</str> <str name="update.chain">updchain_lude_cell</str> <bool name="ignoreTikaException">true</bool> </lst> </requestHandler>
In der Update Chain generiert Solr Cell dann die übrigen Metadaten wie bei Linux-Magazin. Das Flag »langid.map.keepOrig« muss der Nutzer im Spracherkennungsprozessor auf »true« setzen. Andernfalls löscht der Spracherkennungsprozessor in der Update Chain den Inhalt des »title«-Felds, und es taucht folglich kein Titel auf. Bleibt zu erwähnen, dass die Reihenfolge der Bestandteile des »<title>«-Tags je nach Jahrgang variiert. Die getrennten Update Chains für Solr Cell und HTML Handler berücksichtigen das.
Tika Content Extractor Transformer
Eine im nächsten Teil der Reihe näher vorgestellte Pipeline-Variante nutzt die Erweiterbarkeit von MCF über sogenannte Transformer-Instanzen. Mit dem Tika Content Extractor Transformer findet das Extrahieren von Text und Metadaten nicht ausschließlich innerhalb der Solr-Pipeline statt, sondern im Wesentlichen in Manifold CF.
Seit Längerem verwendet dieser Tika Transformer die Boilerpipe-Bibliotheken [7], um störende oder unwesentliche Bestandteile (Boilerplate) mit diversen Algorithmen auszufiltern. Dem Tika Transformer darf der Nutzer zudem einen Metadata Transformer (auch: Adjuster) nachschalten, der die Metadaten verarbeitet. Das funktioniert bei allen Transformer Connections bequem über ein Admin-UI (Abbildung 2).
Eine Verarbeitungsregel ordnet dem Metadatum im Adjuster einen Wert zu. Hierzu stehen reguläre Ausdrücke in exotischer Syntax bereit, um in der Pipeline bereits vorher erfasste Metadaten aufzubereiten. Der Mechanismus eignet sich auch für das Einspeisen von Konstanten. Solr Cell übernimmt die Metadaten direkt in gleichnamige Felder des Index. Davon abgesehen stehen die Metadaten anderen Update Handlern als Literal-Parameter (Request Parameter) zur Verfügung.

Abbildung 2: Die Transformer der MCF-Pipeline lassen sich über die Datafari-Benutzerschnittstelle einrichten.
Ärgerlicherweise ist es nicht möglich, ohne Programmierung innerhalb der MCF-Pipeline eine Dachzeile zu erzeugen. Der Grund: Es fehlt ein über die bescheidenen Mittel der MCF Transformer hinausgehender Zugriff auf das strukturierte Originaldokument. Auch die Solr Update Chain muss hier passen, denn das Dokument ist dort bereits in unstrukturierten Inhalt auf der einen und Tika-bekannte Metadaten auf der anderen Seite zerlegt.
HTML Extractor Transformer
Der HTML Extractor Transformer für MCF bietet eine mit dem HTML Update Request Handler für Solr verwandte Funktionalität. Er ist insbesondere als Vorstufe für Solr Cell konzipiert. Der zu extrahierende Text eines HTML-Dokuments lässt sich, wie bereits beschrieben, über einen CSS-Selektor bestimmen. Streng genommen ist hier eine Liste von CSS-Selektoren zulässig.
Idealerweise würde der Anwender hier deshalb »section.teaser« und »section.body« oder »section.teaser, section.body« eintragen. Der Nachteil: Sobald ein Selektor Text extrahiert, ignoriert der HTML Extractor Transformer die übrigen Elemente der Liste. Den »<body>«-Text erhält der Nutzer nur dann, wenn es keinen Teaser gibt.
Als Lösung kommt der CSS-Selektor »article« in Frage, der beide Textblöcke einschließt. Unerwünschte Komponenten liegen dann außerhalb. Die optionale Definition weiterer CSS-Selektoren ermöglicht es dann, zusätzlich im Dokumentenbereich enthaltene HTML-Elemente auszuschließen. Hier verschönert »footer« das Erscheinungsbild des Texts. Der Transformer extrahiert auch gleich das »<title>«-Element und die HTML-Metadaten des Dokuments, die das Tag »<meta>« markiert. Alle dabei gefundenen Daten erhalten »jsoup« als Präfix.
Der Extractor gibt wahlweise reinen Text oder das ursprüngliche HTML-Dokument weiter. Letzteres ist dann nützlich, wenn nachfolgende Komponenten auf weitere HTML-Tags zugreifen sollen.
Generic Update Request Handler oder Solr Cell übernehmen die Metadaten als Request Parameter (Literals) direkt oder mit einem Mapping der Namen in Indexfelder. Ein dem HTML Extractor in MCF nachgeschalteter Metadata Adjuster übernimmt diese Aufgabe. Er verwendet »${jsoup_title}« als Quelle und »title« als Ziel. Alternativ führt er Parameter aus der ersten Zeile von Listing 9 im Generic Update Request Handler oder Solr Cell zum selben Ergebnis. Zudem darf der Anwender nicht vergessen, wie bei Solr Cell den Parameter aus der zweiten Zeile im Spracherkennungsprozessor anzugeben, damit der Dokumententitel auch wirklich in den Hits erscheint.
Listing 9
Wichtige Parameter
<str name="fmap.jsoup_title">title</str> <str name="langid.map.keepOrig">true</str>
Fremde Publikationen
Auch die englischsprachigen Publikationen Linux Magazine [8], Ubuntu User [9] und Admin Magazine [10] sind auf DVD als Komplettarchive im HTML-Format erhältlich. Sie weisen aufgrund gemeinsamer Wurzeln starke Ähnlichkeit mit der von Linux-Magazin und LinuxUser genutzten Formatierung auf. Eine Indexierung via HTML Handler lässt sich deshalb mit einer jeweils leicht modifizierten Pipeline schnell realisieren. Ebenso einfach kann man historische Artikel von Linux Journal [11], Linux Gazette [12] und Linux Voice [13] einbinden. Manifold CF erhält schließlich noch einige neue Jobs (siehe Tabelle 1), um die Fremdpublikationen im HTML-Format zu erfassen.
|
Magazin |
Typ |
Jahrgang |
Sprache |
Job |
Verfahren |
|---|---|---|---|---|---|
|
Linux-Magazin |
Sammler |
ab 1994 |
Deutsch |
»LMMA_de« |
HTML Handler |
|
Linux-Magazin |
Jahrgang |
ab 2011 |
Deutsch |
»LM_de« |
HTML Handler |
|
LinuxUser |
Sammler |
2000-2012 |
Deutsch |
»SolrCell LUMA_de« |
SolrCell |
|
LinuxUser |
Jahrgang |
2013 |
Deutsch |
»SolrCell LU_de« |
SolrCell |
|
LinuxUser |
Jahrgang |
ab 2014 |
Deutsch |
»LU_de« |
HTML Handler |
|
Linux Magazine |
Sammler |
2005-2016 |
Englisch |
»LM_en« |
HTML Handler |
|
Ubuntu User |
Sammler |
2009-2016 |
Englisch |
»UU_en« |
HTML Handler |
|
Linux Gazette |
Sammler |
2004-2011 |
Englisch |
»LG_en« |
HTML Handler |
|
Linux Voice |
Sammler |
2014-2016 |
Englisch |
»LV_en« |
HTML Handler |
|
Linux Journal |
Sammler |
1994-2017 |
Englisch |
»LJ_en« |
HTML Handler |
|
Admin Magazine |
Sammler |
ab 2010 |
Englisch |
»AM_en« |
HTML Handler |
Qual der Wahl
Der nächste Teil dieser Serie beschäftigt sich dann mit nachträglichen Verbesserungen der Metadaten und mit PDFs. So liegen etwa frühe Artikel von Linux Magazine nur im PDF-Format vor, weshalb Archivare nochmals Solr Cell bemühen müssen. Schließlich komplettieren PDF-Artikel von LinuxWelt, AndroidWelt, iX und c’t das Gesamtarchiv. Letztere sammeln alle Artikel einer Ausgabe in nur einer Datei pro Heft, was eine besondere Vorgehensweise nötig macht, um Suchtreffer per Artikel und nicht pro Heft darzustellen.
Die vielfältigen Varianten beim Indexieren von HTML- und PDF-Dateien machen die Wahl des richtigen Verfahrens nicht immer einfach. Allerdings hängt die Qualität der Suchergebnisse wesentlich davon ab. Für die Textextraktion steht bei passender Zeichenkodierung der HTML Update Request Handler als Teil der Solr-Pipeline bereit. Er lässt sich immer dann erfolgreich einsetzen, wenn HTML-Tags die Texte gut strukturieren. Liegt der Text nicht im Zeichensatz UTF-8 vor, führt kein Weg an Solr Cell vorbei.
Alternativ übernimmt der Tika Extractor in Manifold CF die Extraktionsarbeit. Verschiedene Algorithmen oder Mechanismen stehen für die Textfilterung bereit. Auch der HTML Extractor in Manifold CF kann Textbestandteile mit CSS-Selektoren filtern und lässt sich mit Solr Cell kombinieren.
Um die Metadaten zu gewinnen, bietet jedes Verfahren andere Möglichkeiten. Das Capturing von Solr Cell eignet sich für den einfachen Zugriff auf HTML-Tags. Der HTML Update Request Handler spielt seine Stärke aus, wenn sich das Ausgraben der Metadaten nur durch das Angeben zusätzlicher Eigenschaften (Klassenname, Attribute) der HTML-Tags bewerkstelligen lässt. Die CSS-Selektoren bieten dafür einen mächtigen Mechanismus.
Nicht zu vernachlässigen sind Performance und Skalierbarkeit der gewählten Lösung, aber das ist nicht Thema dieser Artikelserie. Ein im vierten Teil dieser Serie vorgestelltes Verfahren wird die Jobs aus Tabelle 1 für Linux-Magazin und LinuxUser größtenteils ersetzen.
Fazit
Die Verlage liefern ihre Magazine schon lange nicht mehr ausschließlich auf Papier – digitale Ausgaben sind selbstverständlich und machen den Weg frei für die schnelle Volltextsuche. Im Gesamtbestand befinden sich nun über 25 000 im Volltext oder nach Metadaten durchsuchbare Artikel aus dem Fundus von Linux-Magazin, LinuxUser und einigen fremdsprachigen Publikationen (Abbildung 3). Jeder Verlag nutzt zwar eigene Formate mit unterschiedlichen Strukturelementen, aber gewisse Ähnlichkeiten sind unübersehbar. Aus diesem Grund gelingt das Indexieren ohne nennenswerte Programmierung. Einen zentralen Anteil daran hat die flexible Open-Source-Suchmaschine Datafari. (kki)

Abbildung 3: Bereits 25 000 Artikel aus verschiedenen Linux-Publikationen liegen nach den ersten Anpassungen im Volltext vor.
Infos
-
Eigene Suchmaschine (Teil 1): Michael Brandenburg, “Suchtrupp”, LM 11/2019, S. 62, https://www.linux-magazin.de/43403
-
Datafari: https://www.datafari.com/en
-
Manifold CF: https://manifoldcf.apache.org
-
Tika: https://tika.apache.org
-
Jsoup: https://jsoup.org
-
Apache Solr Reference Guide: https://lucene.apache.org/solr/guide/7_4/index.html
-
Boilerpipe: https://code.google.com/archive/p/boilerpipe
-
Linux Magazine: https://www.linux-magazine.com
-
Ubuntu User: https://www.ubuntu-user.com
-
Admin Magazine: https://www.admin-magazine.com
-
Linux Journal: https://www.linuxjournal.com
-
Linux Gazette: https://linuxgazette.net
-
Linux Voice: https://www.linux-magazine.com
-
Dateien zum Artikel herunterladen: http://www.linux-magazin.de/static/listings/magazin/2019/11/datafari/






