Skip to content

Bereichssuche Technischer Überblick

Mario Trojan edited this page Nov 29, 2022 · 14 revisions

Überblick

Grundsätzlich umfasst die Bereichssuche eine allgemeine Implementierung, von der die Bibestellensuche, die Kanonessuche und die Zeitbereichssuche abgeleitet sind. (Bei der Zeitbereichssuche ist jedoch aus Performancegründen statt dieses Plugins der BBOX-Ansatz in Verwendung).

In den MARC21-Datensätzen sind z.T. die im innerhalb des Textes 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, 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 linken und rechten Endpunkte bestimmt.

Image showing scoring

Anpassungen VuFind

Wenn ein User eine Anfrage startet, wird diese zunächst von VuFind verarbeitet.

Durch die Ersetzung des Standard-Solr-Query-Builders durch $VUFIND_HOME/module/ixTheo/src/ixTheo/Search/Backend/Solr/IxTheoQueryBuilder.php wird im Falle der Erkennung einer Bibelstelle die Anfrage so angepasst, dass bei der Verarbeitung in Solr der BibleRangeParser aufgerufen wird. Andernfalls wird die Anfrage unverändert an Solr durchgereicht. Hierfür war neben der Erstellung der Klasse IxTheoQueryBuilder das Hinzufügen von IxTheoSolrDefaultBackendFactory.phpin module/VuFind/config/module.config.php notwendig.

Anpassungen in Solr

In die vufind-eigene Solr-Umgebung wurde ein zusätzliches Parserplugin integriert ($VUFIND_HOME/solr/lib/BibleRangeParser-x.x.x.jar).

Folgende Klassen finden sich im Paket de.uni_tuebingen.ub.ixTheo:

RangeSearch

Hier befinden sich die allgemeinen Klassen, von denen später die einzelnen Suchtypen erben.

RangeParserPlugin

Allgemeiner Einstiegspunkt des Plugins. Abgeleitete Klassen wie z.B. das BibleRangeParserPlugin sind in der solrconfig.xml registriert und starten den zugehörigen RangeParser.

Range

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.

RangeParser

Klasse mit diversen Konstanten zum Parsen von Bereichsangaben (z.B. in Queries oder in DB-Feldern).

RangeQuery

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).

RangeScorer

Der Scorer stellt vor allem die Iterationslogik über Ergebnisse bereit und löst das Scoring über RangeWeight aus.

RangeWeight

Stößt die Berechnung des Scorings für einzelne Dokumente an, und verwendet dazu die Range-Klasse.

BibleRangeSearch

Hier befinden sich die Anpassungen für die Bibelstellensuche.

BibleRangeParserPlugin

Dies ist der Einstiegspunkt von Solr. Dieses Plugin erstellt den BibleRangeParser und hat sonst keine weitere Funktion.

BibleRange

Ist auch eine Range, die Zusatzfunktionen für die Bibelstellensuche bereit hält, da diese nur Strings als Eingaben hat.

  • Range(String) erzeugt einen Bereich durch das Interpretieren des Strings. 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 jedem String ein Range. Dabei muss der String 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.

BibleRangeParser

Ü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.

BibleRangeQuery

Überschreibt RangeQuery und verwendet dafür BibleRangeWeight und BibleRangeQuery.

BibleRangeWeight

Überschreibt RangeWeight und verwendet die für die Bibelstellensuche definierte Datenfelder + Logik aus dem BibleRangeParser und BibleRange.

CanonesRangeSearch

Ähnlich wie die Bibelstellensuche, aber für Canones.

TimeAspectRangeSearch

Zeitbereichssuche. Derzeit inaktiv bzw. es wird stattdessen der BBOX-Ansatz verwendet.