Der MyCoRe-Kern stellt eine eigene, backend-unabhängige Anfragesprache zur Verfügung, die als einfacher String, im XML-Format oder als Java-Objekt formuliert werden kann.
Jedem Suchfeld ist ein definierter Datentyp zugeordnet. Der Datentyp bestimmt die möglichen Operatoren für Suchanfragen und legt implizit fest, wie Inhalte dieses Typs behandelt werden (Normalisierung von Umlauten, Stammwortbildung statt exakter Suche etc.). Für jeden Datentyp gibt es eine festgelegte Menge vordefinierter Standard-Operatoren, die jede Searcher-Implementierung unterstützen muss. Darüber hinaus kann eine Implementierung aber auch eigene Datentypen und eigene Operatoren mit erweiterten Suchmöglichkeiten definieren.
Die nachfolgende Tabelle zeigt alle Standard-Operatoren, die für die MCR-QL zur Verfügung stehen:
Operator | Beschreibung |
---|---|
= | exakter Wertvergleich |
> | größer |
< | kleiner |
>= | größer oder gleich |
<= | kleiner oder gleich |
like | Wildcard-Suche mittels * und ? |
contains | Wort an beliebiger Stelle im Text |
phrase | Wortgruppe an beliebiger Stelle im Text |
Bei der Konfiguration der Suchfelder ist insbesondere auf die richtige Wahl der Textdatentypen zu achten. Es wird
zwischen drei verschiedenen Datentypen für Textfelder unterschieden: identifier
, name
und text
. Die folgenden Standard-Datentypen sind derzeit implementiert:
Datentyp | Suchoperatoren | Beschreibung |
---|---|---|
identifier |
=, <, >, <=, >=,like |
ID, URN, Dateiname etc., also für exakte Werte, keine Normalisierung oderStemming |
name |
=, <, >, <=, >=,like , contains |
Personen- oder Ortsnamen etc., Umlautnormalisierung, aber kein Stemming |
text |
=, <, >, <=, >=,like , contains ,phrase |
Volltext, Abstract, freier Text, Umlautnormalisierung, Stemming |
date |
=, <, >, <=, >= | Datum, vollständig im Format yyyy-MM-dd |
time |
=, <, >, <=, >= | Uhrzeit oder zeitliche Dauer, im Format HH:mm:ss |
timestamp |
=, <, >, <=, >= | Zeitpunkt, im Format 'yyyy-MM-dd HH:mm:ss' |
boolean |
= | 'true' oder 'false' |
decimal |
=, <, >, <=, >= | Gleitkommazahl,"." als Trennzeichen |
integer |
=, <, >, <=, >= | Ganzzahl |
Es ist Aufgabe der Suchimplementierung, diese Datentypen auf möglichst geeignete Suchstrukturen abzubilden und die Standard-Operatoren in der späteren Suche umzusetzen. Zu beachten ist, dass für Datums-, Zeit- und Boolean-Werte das Format für die Indizierung (wie werden die Felder zur Indizierung übergeben) und die spätere Suche (wie wird ein Wert in einer Query formatiert) exakt festgelegt ist (siehe Formate in obiger Tabelle).
Sortierkriterien kann man mit dem Tag <sortBy />
festlegen. Darin können beliebig
viele Felder und die jeweilige Reihenfolge (ascending
oder descending
)
festgelegt werden.
|
|
Eine Suchanfrage kann als XML-Dokument oder als Textausdruck formuliert werden. Für Programmierer besteht weiterhin die Möglichkeit, eine Suche als zusammengesetztes Java-Objekt zu formulieren.
Eine einfache Suchbedingung enthält das zu durchsuchende Feld, einen Suchoperator und den Vergleichswert, z.B. Suche nach dem Wort „Optik“ im Titel:
|
|
Die Klassen MCRQueryParser
und MCRQueryCondition
implementieren die Java-Darstellung einer
Query bzw. den Parser, um aus der String- oder XML-Darstellung die Java-Darstellung zu gewinnen und zwischen den
Darstellungen zu wechseln.
Einfache Suchbedingungen können über and/or/not
-Ausdrücke miteinander verknüpft und so zu komplexeren
Suchanfragen zusammengesetzt werden:
|
|
Solche komplexen Suchbedingungen können über die Klassen MCRAndCondition
, MCROrCondition
und MCRNotCondition
aus dem Paket org.mycore.parsers.bool
auch als Java-Objekte gebildet
werden.
Hier eine vollständige Beispiel-Anfrage in MCR-QL:
|
|