-
Notifications
You must be signed in to change notification settings - Fork 4
Bereichssuche Technischer Überblick
Grundsätzlich umfasst die Bereichssuche eine allgemeine Implementierung, von der die Bibestellensuche, die Kanonessuche und die Zeitbereichssuche abgeleitet sind. Die entsprechenden Bereiche aus den Metadaten (wie z.B. Bibel/Kanonesstellen) werden auf ein Nummernschema abgebildet und als Bereiche in Solr gespeichert. Bei der Suche werden die Eingaben auf das selbe Nummernschema abgebildet und miteinander verglichen, um die Treffermenge zu ermitteln und die Sortierung zu ermöglichen.
In den MARC21-Datensätzen sind z.T. die im Text behandelten Bibelstellen hinterlegt. Die Bibestellensuche soll nun der Identifikation von Überschneidungen dienen, d.h. die Möglichkeit zur Verfügung stellen, ausgehend von einem angegebenen Bereich (z.B. Gen 1,5-17) alle Texte zu finden, die den Bereich vollständig oder in Teilen enthalten (z.B. Gen 1,1-20, Gen 1,7-12).
Dabei kann die Genauigkeit bis auf Versebene angegeben werden, wobei einzelne Verse durch eine Punktnotation getrennt werden können (z.B. Gen 1,1-3.4-5.7.9 umfasst Gen 1,1-3, Gen 1,4-5 und die Verse 7 und 9). Innerhalb eines Buches können vollständige Kapitelabschnitte durch eine Kommanotation angegeben werden (z.B. Gen 1-7,5 Gen 1,2-7,5).
Als Maß der Überschneidung (Scoring) wird die Summe der minimalen Abstände der Eingabe-Ranges zu den Ranges eines Ergebnisses genutzt, d.h. für jedes Abfrageteilintervall wird der Absolutbetrag der Summe der Differenzen der linken und rechten Endpunkte bestimmt.
Je nach Suche werden die Metadaten zunächst aus MARC21 ausgelesen und in verschiedene Felder geschrieben. Dafür werden auch Normdaten mit ausgewertet. Siehe auch:
In Solr sind zusätzliche Felder definiert. Siehe auch: schema_ixtheo_fields.xml.
Im Anschluss werden sie beim Import entsprechend befüllt, siehe: marc_ixtheo.properties.
In die VuFind-eigene Solr-Umgebung wurden zusätzliche Parser-Plugins integriert. Diese sind in der solrconfig.xml registriert.
Vom Ablauf her findet zunächst Query Rewriting statt, um ggf. weitere Kriterien (Facetten etc.) korrekt zu berücksichtigen. Danach wird aus Performancegründen erst geprüft, ob die benötigten Bereichsfelder in den Ergebnissen überhaupt vorhanden sind. Erst im Anschluss findet die genauere Score-Berechnung statt. Hierfür wird pro Dokument die beste Schnittmenge über den gesuchten + die vorhandenen Bereiche gebildet, und daraus wird ein Score zwischen 1.0 (Volltreffer) und 0.0 (bzw. Float.NEGATIVE_INFINITY
= kein Treffer) generiert, der als Basis für die Sortierung dient (absteigend).
Hier befinden sich die allgemeinen Klassen, von denen später die einzelnen Suchtypen erben.
Allgemeiner Einstiegspunkt des Plugins. Abgeleitete Klassen wie z.B. das BibleRangeParserPlugin starten die Auswertung der Query über den zugehörigen RangeParser.
Datenklasse die einen Bereich repräsentiert (mit Unter- und Obergrenze), sowie verschiedenen Hilfsfunktionen z.B. zur Berechnung von Schnittmengen, zur Vereinigung verschiedener überlappender Bereiche oder zur Berechnung des Scores mittels des Vergleiches der gesuchten und vorhandenen Bereiche.
Klasse mit diversen Konstanten zum Parsen von Bereichsangaben (z.B. in Queries oder in DB-Feldern).
Diese Klasse erstellt den RangeScorer
und löst den Gewichtungsvorgang aus. Außerdem wird Query Rewriting über den Parent ausgelöst (falls Z.B. neben Bereichen noch weitere Suchkriterien wie z.B. Facetten aktiv sind).
Der Scorer stellt vor allem die Iterationslogik über Ergebnisse bereit und löst das Scoring über RangeWeight
aus.
Stößt die Berechnung des Scorings für einzelne Dokumente an, und verwendet dazu die Range
-Klasse.
Hier befinden sich die Anpassungen für die Bibelstellensuche.
Dies ist der Einstiegspunkt von Solr. Dieses Plugin erstellt den BibleRangeParser
und hat sonst keine weitere Funktion.
Ist auch eine Range
, die Zusatzfunktionen für die Bibelstellensuche bereit hält, da diese nur String
s als Eingaben hat.
-
Range(String)
erzeugt einen Bereich durch das Interpretieren desString
s. Der String muss aus 15 Zeichen bestehen, wobei die ersten sieben Zeichen die untere Schranke und die letzten sieben Zeichen die obere Schranke darstellen. Das Zeichen in der Mitte wird zur Lesebarkeit als Trennzeichen beliebig gefüllt. -
Range[] getRanges(String[])
erzeugt aus jedemString
einRange
. Dabei muss derString
das beim Konstruktur beschriebene Format haben. -
Range[] getRanges(String, String)
Das erste Argument ist ein Text, in dem Bereiche kodiert und mit einem Trennzeichen getrennt sind. Dieses Trennzeichen wird im zweiten Argument angegeben.
Überschreibt den RangeParser
und verwendet dafür BibleRange
und BibleRangeQuery
. Außerdem ist hier Logik enthalten um zu unterscheiden, ob nach gesamten Büchern gesucht wird.
Überschreibt RangeQuery
und verwendet dafür BibleRangeWeight
und BibleRangeQuery
.
Überschreibt RangeWeight
und verwendet die für die Bibelstellensuche definierte Datenfelder + Logik aus dem BibleRangeParser
und BibleRange
.
Ähnlich wie die Bibelstellensuche, aber für Canones.
Zeitbereichssuche. Derzeit inaktiv bzw. es wird stattdessen der BBOX-Ansatz verwendet.
Wenn ein User eine Anfrage startet, wird diese zunächst von VuFind verarbeitet. In der searches.ini sind hierfür spezielle Search Handler definiert, insb. BibleRangeSearch
und CanonesRangeSearch
.
Die Logik hierzu befindet sich im Namespace IxTheo\Search\Backend\Solr
. Der Einstieg erfolgt über den QueryBuilder und die Logik befindet sich im SearchHandler.
Die eingegebenen Bibelstellen bzw. Kanonesstellen werden zunächst per Shell-Aufruf der C++ Programme normalisiert (siehe bib_ref_to_codes_tool und canon_law_ref_to_codes_tool). Daraus wird ein entsprechender Query String generiert und an Solr weitergegeben.