Copyright ©
Mindbreeze GmbH, A-4020 Linz, 2024.
Alle Rechte vorbehalten. Alle verwendeten Hard- und Softwarenamen sind Handelsnamen und/oder Marken der jeweiligen Hersteller.
Diese Unterlagen sind streng vertraulich. Durch die Übermittlung und Präsentation dieser Unterlagen alleine werden keine Rechte an unserer Software, an unseren Dienstleistungen und Dienstleistungsresultaten oder sonstigen geschützten Rechten begründet. Die Weitergabe, Veröffentlichung oder Vervielfältigung ist nicht gestattet.
Aus Gründen der einfacheren Lesbarkeit wird auf die geschlechtsspezifische Differenzierung, z.B. Benutzer/-innen, verzichtet. Entsprechende Begriffe gelten im Sinne der Gleichbehandlung grundsätzlich für beide Geschlechter.
Die Property Expression Language kann verwendet werden, um Metadaten zu extrahieren, oder Filterwerte zu erzeugen, auf die dann bei der Suche eingeschränkt werden kann.
Diese Sprachelemente sind während der Invertierung als auch in der Suche verfügbar.
Konstante literale Werte wie Zahlen oder Zeichenketten können angegeben werden.
Beispiel: | |
Zeichenkette (String) | "text" |
Ganzzahl (Integer) | 3 |
Boolscher Typ (boolean) | true |
Ein Identifier bezieht sich immer auf den aktuellen Kontext.
Dieser Kontext kann ein Dokument sein, aber auch ein Item.
Wird eine Referenz nachverfolgt, so ist dies ein Verweis auf das referenzierte Dokument.
Beispiel: | |
Reguläres Metadatum eines Dokuments | title |
Referenz-Metadatum eines Dokuments | referenz |
Eigenschaft innerhalb eines Items | itemProperty |
Zu beachten ist, dass folgende Character-Class ohne Escaping gültig ist: [A-Za-z0-9_:\-]
Folgende Zeichen in einem Identifier müssen also nicht escaped werden:
Alle anderen Zeichen müssen mit einem Backslash (\) escaped werden, damit die Zeichenkette als Identifier erkannt wird. Z. B. muss property.value folgendermaßen escaped werden: property\.value
Eine Liste mehrerer Ausdrücke, die alle emittiert werden.
Beispiel: | |
Ausdruck | Emittiert wird … |
list("text1", "text2", "text3") | "text1", "text2", "text3" |
Der unique-Operator entfernt Duplikate aus seinen Parametern, wobei die Reihenfolge beibehalten wird. Es kann auf alle Ausdrücke angewendet werden die eine String-Repräsentation besitzen.
Beispiele: | |
Ausdruck | Emittiert wird … |
unique("a", "b", "c", "b") | "a", "b", "c" |
unique("a", "a", "a") | "a" |
Mit dem Filter-Operator kann eine zusätzliche Einschränkung definiert werden, die für selektierte Ausdrücke (z. B. Vergleiche) gelten muss (i. d. R. für Items).
Beispiel: | ||
Variante 1 | title[../mes:numericdate < 1444381468000] | Der Titel des aktuellen Dokuments wird nur dann emittiert, falls dessen Datum vor 2015-10-09T09:04:28.000Z liegt (als Millisekunden seit 1970). |
Folgende Vergleichsoperatoren können verwendet werden:
entweder in Kombination mit den logischen Verknüpfungen
oder innerhalb eines Filters
Beispiele in Kombination mit logischen Verknüpfungen: | ||
Ausdruck | Emittiert wird … | |
Gleichheit | 3 = 3 && "true" || "false" | "true" |
Ungleichheit | 3 != 3 && "true" || "false" | "false" |
Kleiner | 3 < 3 && "true" || "false" | "false" |
Kleiner oder gleich | 3 <= 3 && "true" || "false" | "true" |
Größer | 3 > 3 && "true" || "false" | "false" |
Größer oder gleich | 3 >= 3 && "true" || "false" | "true" |
Beispiele in Kombination mit Filter: | ||
Ausdruck | Emittiert wird … | |
Gleichheit | title[3 = 3] | Titel des aktuellen Dokuments |
Ungleichheit | title[3 != 3] | nichts |
Kleiner | title[3 < 3] | nichts |
Kleiner oder gleich | title[3 <= 3] | Titel des aktuellen Dokuments |
Größer | title[3 > 3] | nichts |
Größer oder gleich | title[3 >= 3] | Titel des aktuellen Dokuments |
Bei der Und-Verknüpfung wird nur das letzte Element in der &&-Kette genau dann emittiert, falls alle Elemente davor etwas emittiert hätten und ihr Wert nicht als false interpretiert wird.
Beispiel: | ||
Ausdruck | Emittiert wird … | |
Literale 1 | "text" && "text2" && "text3" | "text3" |
Boolsche Ausdrücke | 0 && "text2" | nichts |
1=1 && "true" || "false" | "true" | |
1!=1 && "true" || "false" | "false" |
Bei der Oder-Verknüpfung wird das erste Element in der ||-Kette emittiert, das etwas emittiert. In kombinierten Ausdrücken, die sowohl && als auch || enthalten, hat das && Vorrang vor dem ||.
Beispiel: | ||
Ausdruck | Emittiert wird … | |
Literale 1 | "text1" || "text2" || "text3" | "text1" |
Boolsche Ausdrücke | 0 || "text2" | "text2" |
0=0 && "true" || "text2" | "true" |
Folgende arithmetische Operatoren können verwendet werden:
Ausdruck | Emittiert wird … | |
Addition | 3 + 2 3.2 + 5 | 5 8.2 |
Subtraktion | 3 – 2 3.2 – 5 | 1 -2.2 |
Multiplikation | 3 * 2 3.2 * 5 | 6 16.0 |
Division | 3 div 2 3.2 div 5 | 1 0.64 |
Modulo | mod(3, 2) | 1 |
Bei zusammengesetzten Ausdrücken ist eine Operator-Präzedenz unterstützt, sodass Multiplikation und Division eine höhere Präzedenz als Addition und Subtraktion aufweisen. Durch den Einsatz von Klammern kann die Präzedenz von Teilausdrücken geändert werden:
Ausdruck | Emittiert wird … | |
Präzedenz | 3 + 1 * 2 – 1 (3 + 1) * 2 – 1 (3 + 1) * (2 – 1) | 4 7 4 |
Mit der Funktion regex_match kann auf jene Zeichenketten eingeschränkt werden, die einem regulären Ausdruck entsprechen.
Name des Identifers, der überprüft werden soll.
Der reguläre Ausdruck, der mit dem Wert des Identifiers abgeglichen werden soll.
Die verfügbaren Optionen für das Regex-Muster sind zum Beispiel:
Beispiel: | ||
Variante 1 | regex_match(title, "^T.*$") | Titel, die mit “T” beginnen, werden emittiert (Groß-/Kleinschreibung wird implizit beachtet). |
Variante 2 | regex_match(title, "^T.*$", "i") | Titel, die mit “T” beginnen, werden emittiert (Groß-/Kleinschreibung wird explizit nicht beachtet). |
Mit den Funktionen to_lower und to_upper können Ausdrücke auf Groß- oder Kleinschreibung konvertiert werden.
Beispiel: | ||
to_lower("UPPER") | "upper" wird emittiert. | |
to_upper("lower") | "LOWER" wird emittiert. |
Mit der Funktion concat können mehrere Werte von Metadaten zusammengehängt werden.
Beispiel: | |
concat("Hauptplatz", " ", "123") | "Hauptplatz 123" wird emittiert. |
Mit der Funktion replace können Zeichen(-ketten) ersetzt werden, dabei können auch reguläre Ausdrücke verwendet werden.
Der Eingabe String, der verändert werden soll.
Der String nach dem gesucht werden soll. Hier wird ein regulärer Ausdruck verwendet.
Der String mit dem der Such-String ersetzt wird.
Beispiel: | ||
Buchstaben entfernen | replace("12ab34cd56", "[a-z]", "") | "123456" wird emittiert. |
replace("0123456789","[0-9]{9}$","") | "0" wird emittiert. |
Mit der Funktion int kann eine Zeichenkette oder ein Datumswert auf eine Ganzzahl konvertiert werden.
Beispiel: | ||
Ausdruck | Emittiert wird: | |
Variante 1 | int("3") | Zahl 3 |
Variante 2 | int(dateproperty) | Datumswert der Eigenschaft "dateproperty" als Millisekunden seit 1970 |
Variante 3 | int(now()) | Aktueller Zeitpunkt als Millisekunden seit 1970 |
Mit der Funktion float kann eine Zeichenkette oder ein Datumswert auf eine Fließkommazahl konvertiert werden.
Beispiel: | ||
Ausdruck | Emittiert wird: | |
Variante 1 | float("3.124") | Zahl 3.124 |
Variante 2 | float(10) | 10 als Fließkommazahl |
Variante 3 | float(now()) | Aktueller Zeitpunkt als Millisekunden seit 1970 |
Mit der Funktion split kann ein String in mehrere Werte zerlegt werden.
Der Eingabe String, der verändert werden soll.
Der String nach dem gesucht werden soll. Hier wird ein regulärer Ausdruck verwendet.
Beispiel: | |
Ausdruck | Emittiert wird: |
split("a,b und c", " *(und|,) *") | Liste: a,b,c |
Mit der Funktion split_path(<string-expr>, <pattern>) kann ein String in eine hierachische Liste von Werten zerlegt werden. Diese Liste kann unter anderem als hierachische Facette angezeigt werden.
Beispiel:
Ausdruck | Emittiert wird: |
split_path(“/path/to/documents”, “/”) | Hierachische Liste: path, to, documents |
Mit der Funktion json_parse(<json>) kann ein JSON-Ausdruck analysiert und strukturiert dargestellt werden.
Beispiel:
Ausdruck | Emittiert wird: |
json_parse("\"a\"") | a |
json_parse("[\"a\", \"b\"]") | Liste: a,b |
json_parse("{\"int\": 1, \"str\": \"a\"}") | Der analysierte JSON-Ausdruck wird hierarchisch als Item dargestellt. |
Mit der Funktion parse_date können Zeichenketten als Datumswert interpretiert werden.
Der String der geparsed werden soll.
Siehe https://unicode-org.github.io/icu/userguide/format_parse/datetime/ .
Siehe https://unicode-org.github.io/icu/userguide/locale/#locale .
Beispiel: | ||
Ausdruck | Emittiert wird: | |
Variante 1 | parse_date("1970-01-01 00:00:00 UTC", "yyyy-MM-dd HH:mm:ss zzz") | Entsprechender Datumswert |
Variante 2 | parse_date("October 2015", "MMMM y", "en") | Entsprechender Datumswert |
Die Funktion format_date kann verwendet werden, um Datumswerte in einen String umzuwandeln.
Wert als Datumsstring oder als Integer (in Millisekunden seit dem 1. Januar 1970).
Siehe https://unicode-org.github.io/icu/userguide/format_parse/datetime/ - datetime-format-syntax.
Siehe https://unicode-org.github.io/icu/userguide/format_parse/datetime/ - time-zone-display-names und https://www.unicode.org/reports/tr35/ - Time_Zone_Identifiers.
Siehe https://unicode-org.github.io/icu/userguide/locale/examples.html.
Beispiel:
Ausdruck | Emittiert wird: | |
Variante 1 | format_date(1000, "yyyy-MM-dd HH:mm:ss zzz", "UTC") | Das Datum 1000ms nach dem 1. Januar 1970, in der Zeitzone UTC: "1970-01-01 00:00:01 UTC" |
Variante 2 | format_date(store:modificationdate, "dd MMMM y HH:mm zzz", "Europe/Vienna", "en") | Das Datum, an dem der Eintrag im Index zuletzt geändert wurde, in der Zeitzone Wien und in englischer Sprache: z.B. "13 June 2024 09:03 GMT+2" |
Variante 3 | format_date(parse_date("13.06.24","dd.MM.yy"), "EEEE dd MMMM y", "en") | Ändern des Formats eines als String angegebenen Datums: "Donnerstag, 13. Juni 2024" |
Variante 4 | int(format_date(store:modificationdate, "y")) | Extrahieren von Werten, z. B. das Jahr des letzten Änderungsdatums, als Ganzzahl: z. B. 2024 |
Die Funktion now kann verwendet werden, um auf den aktuellen Zeitpunkt Bezug zu nehmen. Der Wert ist gegeben in Millisekunden seit 1. Jänner 1970, was bei arithmetischen Ausdrücken wichtig ist.
Beispiel: | ||
Ausdruck | Emittiert wird: | |
Variante 1 | now() | aktueller Zeitpunkt |
Variante 2 | now() - 3600000 | Zeitpunkt vor einer Stunde |
Variante 3 | mes:date[../mes:date < now()] | Datumswerte von Dokumenten, die in der Vergangenheit liegen |
Variante 4 | now() - dateproperty > 3600000 && "true" || "false" | "true" |
Die Funktion annotation kann verwendet werden, um Werte von Annotationen zu extrahieren. Die entsprechenden Annotationen müssen aggregierbar sein.
Beispiel:
Ausdruck | Emittiert wird: |
annotation(author, "mes:key") | Der Wert der Anmerkung mes:key für die Eigenschaft mit dem Namen author wird ausgegeben. Im folgenden Eigenschaftsbeispiel wird der folgende String-Wert ausgegeben: "https://mycompany.com/people/id/1447" Property: property { name: "author" value { kind: STRING string_value: "John Doe" } annotation { name: "mes:key" value { kind: STRING string_value: "https://mycompany.com/people/id/1447" } flags: 24 |
Diese Sprachelemente sind nur für die Suche verfügbar. Im Gegensatz zu allgemeinen Elementen sind diese Sprachelemente während der Inversion nicht verwendbar.
Soll auf Metadaten des referenzierten Dokuments zugegriffen werden, kann der Pfad-Operator „/“ verwendet werden:
Beispiel: | ||
Variante 1 | referenz/title | Falls das aktuelle Dokument die Referenzeigenschaft referenz hat, wird der Titel des referenzierten Dokumentes emittiert |
Variante 2 | referenz1/referenz2/title | Falls das aktuelle Dokument die Referenzeigenschaft referenz1 hat, und das referenzierte Dokument wiederum die Referenzeigenschaft referenz2 hat, das auf ein weiteres Dokument verweist, wird dessen Titel emittiert. |
Um inversen Referenzen zu folgen, kann der rev-Operator verwendet werden. Dafür ist es notwendig in den „Reference Settings“ des Index die Referenzeigenschaft als Inverted Reference Metadata Keys zu konfigurieren. Siehe auch den Abschnitt „Reference Settings“ in Konfiguration Mindbreeze InSpire – Registerkarte Indices.
Beispiel: | |
rev(parent)/mes:key | Es werden alle mes:key Werte der invertieren Referenz parent emittiert. |
Um String Referenzen zu folgen, kann der lookup Operator in Kombination mit dem Pfad-Operator „/“ verwendet werden. Dafür ist es notwendig, in den Reference Settings des Index die Referenzeigenschaft als Inverted Hash Reference Metadata Keys und Hash Reference Target Metadata Keys zu konfigurieren. Siehe auch den Abschnitt „Reference Settings“ in Konfiguration Mindbreeze InSpire – Registerkarte Indices.
Beispiel: | |
lookup(author_email)/name | Falls das aktuelle Dokument eine author_email Eigenschaft hat, wird der Name der referenzierten Person emittiert. |
lookup(creator_email,last_edited_email)/name | Falls das aktuelle Dokument eine creator_email oder last_edited_email Eigenschaft hat, werden die Namen der referenzierten Personen emittiert. Hinweis: Es müssen ein oder mehrere Parameter für den lookup Operator angegeben werden. |
Bei der Verwendung des lookup Operators sind folgende Einschränkungen zu beachten:
Außerdem wird empfohlen, die Anzahl der unterschiedlichen Werte aus Hash Reference Target Metadata Keys zu begrenzen, um Mehrdeutigkeiten zu vermeiden und eine angemessene Performance zu gewährleisten. Eine solche Begrenzung kann mittels „Precomputed Synthesized Metadata“ durchgeführt werden. Nachfolgend wird dies anhand eines Anwendungsbeispiels demonstriert:
Anwendungsbeispiel: Den Namen des Autors eines Dokuments synthetisieren. | |
Im folgenden Beispiel befinden sich Dokumente und Personen im Index. Auf den Dokumenten existiert bereits das Metadatum author_email mit der E-Mail-Adresse des Autors. Das Ziel ist es das Metadatum author_fullname für alle Dokumente zu synthetisieren, indem Referenzen zu den Personen (Autoren) hergestellt wird. Dokument 1 mit folgenden Metadaten: key: "doc1", datasource/category: "DataIntegration", author_email: "max.mustermann@mindbreeze.com" Person 1 mit folgenden Metadaten: key: "person1", datasource/category: "Microsoft Graph", fullname: "Max Mustermann", email: "max.mustermann@mindbreeze.com" Als Ergebnis soll das Metadatum author_fullname: "Max Mustermann" auf Dokument 1 erhalten werden. Dazu sind folgende Konfigurationsschritte in der Index-Konfiguration notwendig: | |
Precomputed Synthesized Metadata | |
Name | target_email |
Property Expression | regex_match(datasource\/category, "Microsoft Graph") && email |
Reference Settings | |
Inverted Hash Reference Metadata Keys | author_email |
Hash Reference Target Metadata Keys | target_email |
Synthesized Metadata | |
Name | author_fullname |
Property Expression | lookup(author_email)/fullname |
Ergebnis | |
Dokument 1 mit folgenden Metadaten: key: "doc1", datasource/category: "DataIntegration", author_email: "max.mustermann@mindbreeze.com", author_fullname: "Max Mustermann" Person 1 mit folgenden Metadaten: key: "person1", datasource/category: "Microsoft Graph", fullname: "Max Mustermann", email: "max.mustermann@mindbreeze.com", target_email: "max.mustermann@mindbreeze.com" |
Für weitere Informationen siehe Metadaten-Anreicherung – Precomputed Synthesized Metadata.
Um inversen String Referenzen zu folgen, kann der rev_lookup-Operator in Kombination mit dem Pfad-Operator „/“ verwendet werden. Dazu ist es notwendig, in den Reference Settings des Index die Refernzeigenchaft als Inverted Hash Reference Metadata Keys und Hash Reference Target Metadata Keys zu konfigurieren. Siehe auch den Abschnitt „Reference Settings“ in Konfiguration Mindbreeze InSpire – Registerkarte Indices.
Beispiel: | |
rev_lookup(email,author_email)/title | Es werden alle title Werte der invertieren String Referenz email emittiert. Beispiel für einen Anwendungsfall: Dokumente referenzieren Personen (Dokumentmetadatum author_email referenziert Person mit Metadatum email). Die Property Expression (siehe linke Spalte) liefert die Titel aller Dokumente, die von der ausgehenden Person geschrieben wurde. |
rev_lookup(list(email,email_alias), | Es werden alle title Werte der invertieren String Referenzen email und email_alias emittiert. Beispiel für einen Anwendungsfall: Dokumente referenzieren Personen (Dokumentmetadatum creator_email und last_edited_email referenzieren Person mit Metadatum email und email_alias). Die Property Expression (siehe linke Spalte) liefert die Titel aller Dokumente, die von der ausgehen Person erstellt oder das letzte Mal bearbeitet wurden. Hinweis: Es müssen zwei oder mehr Parameter für den rev_lookup Operator angegeben werden. Der erste Parameter von rev_lookup ist das Ziel-Metadatum, auf das die Referenz zeigt. Mithilfe von list können hier mehrere Eigenschaften angegeben werden. Alle weiteren Parameter stehen für die Eigenschaften, von denen die Referenzen ausgehen. |
Der dfs-Operation kann verwendet werden, um alle Items zu emittieren die mittels eines Ausdrucks mittels Tiefensuche („DFS“ = Depth First Search) beschritten werden. Zwei oder drei Argumente müssen für den dfs Operator angegeben werden:
Beispiele: | |
dfs(.,parent)/mes:key | Emittiert alle mes:key Werte die ausgehend vom aktuellen Kontext mit dem Ausdruck parent erreicht werden können. |
dfs(.,rev(parent))/mes:key | Emittiert alle mes:key Werte die ausgehend vom aktuellen Kontext mit dem Ausdruck rev(parent) erreicht werden können. |
dfs(.,parent,"terminal")/mes:key | Emittiert den mes:key Wert des letzten (terminal) Items das vom aktuellen Kontext mit dem Ausdruck parent erreichbar ist. Wenn der Graph baumförmig ist, wird der mes:key Wert der Wurzel emittiert. |
dfs(.,rev(parent),"terminal")/mes:key | Emittiert den mes:key Wert des letzten (terminal) Items das vom aktuellen Kontext mit dem Ausdruck rev(parent) erreichbar ist. Wenn der Graph baumförmig ist, werden alle mes:key Werte der Blätter emittiert, die vom akuellen Kontext aus erreichbar sind. |
Mit dem Parent-Operator .. kann auf den übergeordneten Kontext zugegriffen werden.
Dieser Operator ist besonders im Kombination mit dem Filter-Operator nützlich, siehe Inverse Referenzen.
Beispiel: | ||
Variante 1 | referenz/title/.. | Entspricht referenz . |
Variante 2 | referenz/title/../.. | Entspricht dem evaluierten Dokument selbst. |
Mit der Funktion name kann von einem Value-Kontext auf den Namen des Metadatums oder der Item-Eigenschaft zurückgeschlossen werden.
Beispiel: | ||
Variante 1 | name(regex_match(title, "^T.*$")) | title wird emittiert, falls der Titel des aktuellen Dokuments dem regulären Ausdruck entspricht. |