Copyright ©
Mindbreeze GmbH, A-4020 Linz, 06.12.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.
Dieses Dokument beschäftigt sich mit der Mindbreeze Web API zum Abfragen von Suchresultaten. Sie wurde an Anlehnung zu der Dokumentation api.v2.search auf help.mindbreeze.com implementiert. Dabei werden die Inhalte anhand von Beispielen illustriert und erklärt. Dabei wird der Fokus vor allem in die Verwendung mittels Backend beleuchtet. Die Kommunikation der API wird in dieser Dokumentation mithilfe des Chromium Browser und dem Plugin Postman durchgeführt. Die API verwendet dabei das Protokoll JSON für die Kommunikation.
Suchanfragen werden als HTTP POST-Request an ein Client Service gesendet. Der Pfad für Suchanfragen lautet: <Client Service URL>/api/v2/search
Im Body des HTTP-Request wird ein JSON-Dokument mitgeschickt, das die Suchanfrage beschreibt. Wie dieses JSON-Dokument auszusehen hat, wird in Kapitel 3 und Kapitel 4 beschrieben.
Als Response erhält man ebenfalls ein JSON-Dokument. Dieses wird in Kapitel 2 beschrieben.
Das JSON-Dokument der Suchanfrage (vom Request).
Enthält Informationen zu alternativen Suchbegriffen, die nach Typ gruppiert sind.
Der Eintrag mit id user_query enthält die erweiterte Query des Benutzers, falls eine Transformation wie Synonyme oder Stemming angewandt wurde. Wenn id user_query nicht vorhanden ist, kann die Query aus dem search_request Teil der Suchantwort (search_request.user.query) entnommen werden.
Der Eintrag mit id query_spelling bietet Rechtschreibkorrektur.
Die Einträge enthalten jeweils Listen von Alternativen (entries). Darin ist der Suchbegriff in html enthalten, eine Abschätzung der zu erwartenden Ergebnisse in count und die Query Expression in query_expr.
{
"id": "user_query",
"name": "user_query",
"entries": [{
"html": "mindbreeze",
"count": 1,
"query_expr": {
"unparsed": "mindbreeze"
}
}
]
}
Name der Suche. Kann im search_request mit name gesendet werden.
Abschätzung der erwarteten Trefferanzahl.
Eine Liste von Filtern für die aktuelle Suche. id enthält den Namen des Metadatums, name den Anzeigenamen.
Die Einträge liegen in entries. Mit html kann auf den Wert zugegriffen werden, mit count auf die geschätzte Anzahl von Ergebnissen, mit query_expr auf die Query Expression, die zur Einschränkung verwendet werden kann. Filter können auch hierarchisch sein, dann gibt es auch ein entries-Feld für einen Wert.
order_criteria und order_direction (ASCENDING, DESCENDING) zeigen die Sortierung der Filter.
Sortierungsbeschreibung order_criteria
COUNT | Geschätzte Anzahl |
HTML | Textuelle Beschreibung (z.B. August vor Juli) |
VALUE | Wert (z.B. Juli vor August) |
{
"id": "mes:date",
"name": "Date",
"entries": [{
"html": "2016",
"count": 676,
"query_expr": {
…
},
"entries": [{
"html": "July",
…
}],
}],
"order_criteria": "COUNT",
"order_direction": "DESCENDING"
}
Enthält die Eigenschaft, nach der die Ergebnisse sortiert sind.
Eine Liste von Eigenschaften, die für die Sortierung verwendet werden können. Jeweils mit Name (name) und Anzeigenname (localized_name).
Eine Liste von Eigenschaften, die für die Anzeige verwendet werden können. Jeweils mit Name (name) und Anzeigenname (localized_name).
Eine Liste von Eigenschaften, die als Filter zur Verfügung stehen. Jeweils mit Name (name) und Anzeigenname (localized_name).
Enthält die Liste der Resultate (results), Informationen zum Blättern (prev_avail, next_avail, per_service_dataset) und die Sortierrichtung der Ergebnisse (order_direction, ASCENDING oder DESCENDING).
prev_avail enthält true, wenn in der Liste der Ergebnisse zurück, next_avail, wenn nach vorne geblättert werden kann.
per_service_dataset besitzt die id des angefragten Service, termination_cause.
COUNT_LIMIT | Weitere Resultate vorhanden |
NO_MORE_RESULTS | Keine weiteren Resultate vorhanden |
TIMEOUT | Die Suche hat weniger als count Treffer geliefert und in einer Phase der Suche ist ein Timeout passiert. Die Aussage ist hier es könnte noch mehr Treffer geben. Das gesamte Timeout der Suche wird in Phasen angewendet. |
ABORT | Die Suche wurde abgebrochen |
SHORTCUTTED | Die Suche wurde abgebrochen, weil es keine Ergebnisse mit der gegebenen Sucheinschränkung nach Datenquellen gibt. |
UNKNOWN | Unbekannt |
und paging_state zum Blättern.
"id": "https://demo.mindbreeze.com/public/",
"termination_cause": "COUNT_LIMIT",
"paging_state": {
"id": "unnamed",
"state": "\n\u00010\u0010\u0000\u0018\u0001",
"digest": "dBCFawAIMiGsGEflr6JYhw=="
}
}
properties enthält die Liste der angeforderten Metadaten. Jeweils mit Name (id) und Anzeigename (name), sowie einer Liste der Einträge (data).
Wurde bei der Suchanfrage Gruppierung verwendet, enthält group den Wert.
id ist eine Kennung des Treffers, location wird für die Vorschau benötigt. rank_score kann für die Sortierung verwendet werden und relevance_score enthält die Relevanzbewertung.
{
"id": "Web:wwwmindbreezecom:https://www.mindbreeze.com/…",
"location": "aHR0cHM6Ly9pbnNwaXJlcHJvZC5pbnNwa…",
"rank_score": 53.4155,
"relevance_score": 53.4155,
"properties": [{
"id": "title",
"name": "Title",
"data": [{
"html": "Vertragsmanagement | <em>Mindbreeze</em>"
}]
},{
"id": "content",
"name": "content",
"data": [{
"html": "ist \nLösung mit <em>Mindbreeze</em> …"
}]
}],
"order": {
"num": 534155
},
"group": {
"str": ""
}
}
Eine Liste von Eigenschaften, die für die Gruppierung verwendet werden können. Jeweils mit Name (name) und Anzeigenname (localized_name).
Zeigt an, ob Query Spelling Alternativen (z. B. ein „Did You Mean“) in der Antwort vorhanden sein können. In der Anfrage gibt es die Option alternative_query_spelling_max_estimated_count dieser wird hier mit dem estimated_count geprüft.
Hinweis: falls wider Erwarten keine Query Spelling Alternatives erscheinen und eigene logische Operatoren in der Query verwendet werden, siehe: Hinweise zu Query Spelling Alternativen
Kann angegeben werden, um die Index-Option „Disable Did You Mean Term Count Threshold“ zu überschreiben, siehe auch Konfiguration – Mindbreeze InSpire, Bereich: Query Settings.
“Did You Mean” wird nur dann durchgeführt, wenn die Anzahl der Terme in der Suchanfrage (abzüglich Stopp-Wörtern, falls konfiguriert) den konfigurierten Wert nicht überschreitet.
Folgende Werte haben eine spezielle Bedeutung:
Enthält true, wenn die Sortierungsreihenfolge in der Suchanfrage angegeben werden kann.
Gibt an, wie Datumsfilter sortiert werden. ‚true‘ sortiert die Werte nach Jahr und Monat und ‚false‘ sortiert die Werte nach Anzahlt der Treffer.
Type: Boolean
Gibt an, welche Entitäten in einem Resultat hervorgehoben werden sollen. Type: Array
Beispiel:
"sample_text_mark_entity_types":["person","organization","date","misc","location"]
Gib an, ob alle verfügbaren Entitäten in einem Resultat hervorgehoben werden sollen. Type: Boolean
Siehe show_query_spelling_alternatives
Schränkt die Suche zusätzlich ein.
"source_context": {
"constraints": [{
id: "searchcontainer",
unparsed: "extension:PDF"
}]
}
Enthält detaillierte Informationen über die Application und zur Suche selbst, die in der app.telemetry eingesehen werden können.
Beispiel:
"query_context": {
"application_id": "Default Application",
"prev_query_id": "1649054355394",
"properties": [{
"key": "my_extension",
"value": "html"
}],
"query_id": "1649054355849",
"query_trigger_action": "submit",
"refinement_id": "164905355394",
"prev_refinement_id": "164905344394"
}
Enthält die User Query, kann im Log Pool der App.Telemetry angezeigt werden und besitzt den Type „String“.
Eine Liste von Antworten. Damit Antworten verfügbar sind, muss NLQA konfiguriert werden, siehe dazu Handbuch – Natural Language Question Answering (NLQA).
score: ein Wert zwischen 0 und 1 der die Qualität einer Antwort beschreibt. Je besser die Antwort, desto höher der Wert im score.
text: ein Objekt mit dem Antworttext (text). Der Antworttext enthält Text vor und nach der Antwort (context_before / context_after) und die Position der Antwort im Ursprungsdokument (text_start_pos).
properties: alle properties vom Ursprungsdokument.
{
"score": 0.7456222772598267,
"text": {
"text": "Over 450 connectors are available with Mindbreeze …",
"context_before": "… enables experts to create their own apps.",
"context_after": "Integration into your workplace …",
"text_start_pos": 1120
},
"properties": [ … ]
}
Dieser Abschnitt beschäftigt sich mit den 3 Typen von Suchen die sie mit der in diesem Dokument beschriebenen API gegen „Mindbreeze InSpire“ absetzen können.
Der Wert unparsed entspricht der Suche, wie sie auch im Suchfeld eingegeben werden kann.
{
"unparsed": "mindbreeze OR inspire"
}
Findet Wörter und Wortteile. Das folgende Beispiel findet Treffer mit „mind“, aber auch z. B. „mindbreeze“.
{
"term": "mind"
}
Findet nur Vorkommnisse der gesamten Phrase.
{
"quoted_term": "mindbreeze inspire"
}
NLQA liefert sowohl Ergebnisse als auch Antworten für die gestellte Frage.
{
"similar": "Wie installiert man einen Konnektor bei Mindbreeze?"
}
Um die Größe des HTTP Responses einzuschränken, werden im HTTP Response nicht alle Suchergebnisse zurückgegeben, sondern immer nur ein Auszug der Suchergebnisse. Dabei kann man im Request-JSON in count definieren, wie viele Suchergebnisse im Response maximal enthalten sein dürfen.
{
"query": {
"unparsed": "mindbreeze"
},
"count": 5
}
Die Suchantwort enthält resultset.prev_avail und resultset.next_avail um mitzuteilen, ob man zurück und/oder vor blättern kann.
"resultset": {
…
"prev_avail": false,
"next_avail": true,
"per_service_dataset": [
{
"id": "https://demo.mindbreeze.com/public/",
"termination_cause": "COUNT_LIMIT",
"paging_state": {
"id": "unnamed",
"state": "\n\u00010\u0010\u0000\u0018\u0001",
"digest": "dBCFawAIMiGsGEflr6JYhw=="
}
}
]
}
Soll geblättert werden, gibt man die Richtung mit paging.direction (PREV, NEXT) an und übernimmt resultset.per_service_dataset.paging_state in paging_states:
"query": {
"unparsed": "mindbreeze"
},
"count": 5,
"paging_states": [{
"id": "unnamed",
"state": "\n\u00010\u0010\u0000\u0018\u0001",
"digest": "dBCFawAIMiGsGEflr6JYhw=="
}],
"paging": {
"direction": "NEXT"
}
}
Ist das seitenweise Navigieren aktiviert (die Option max_page_count ist gesetzt), enthält die Suchantwort resultset.result_pages, um direkt auf einzelne Ergebnisseiten zu springen.
"result_pages": {
"qeng_ids": [{
"service_id": "https://demo.mindbreeze.com/public/",
"qeng_id": "https://demo.mindbreeze.com:23300",
"digest": "t/y1e0hHmK/VzgZNMwczHA=="
}
], {
"pages": [{
"starts": [0],
"counts": [5],
"current_page": true,
"page_number": 0
}, {
"starts": [5],
"counts": [5],
"page_number": 1
}, {
"starts": [10],
"counts": [5],
"page_number": 2
}, {
"starts": [15],
"counts": [5],
"page_number": 3
}, {
"starts": [20],
"counts": [5],
"page_number": 4
}
],
"page_size": 5,
"page_count": 5,
"more_avail": true
},
"page_size": 5,
"page_count": 5,
"more_avail": true
}
Soll auf eine Resultatsseite navigiert werden, setzt man die result_pages auf die Suchanfrage und setzt jene Seite als current_page auf die gezeigt werden soll.
"result_pages": {
"qeng_ids": [{
"service_id": "https://demo.mindbreeze.com/public/",
"qeng_id": "https://demo.mindbreeze.com:23300",
"digest": "t/y1e0hHmK/VzgZNMwczHA=="
}
], {
"pages": [{
"starts": [0],
"counts": [5],
"page_number": 0
}, {
"starts": [5],
"counts": [5],
"current_page": true,
"page_number": 1
}, {
"starts": [10],
"counts": [5],
"page_number": 2
}, {
"starts": [15],
"counts": [5],
"page_number": 3
}, {
"starts": [20],
"counts": [5],
"page_number": 4
}
],
"page_size": 5,
"page_count": 5,
"more_avail": true
},
"page_size": 5,
"page_count": 5,
"more_avail": true
}
Queries können wie in der Dokumentation auf help.mindbreeze.com auch mit AND, OR, NOT und vielen weiteren logischen Operatoren verknüpft werden. Nachstehend werden zur Illustration zwei Queries mit einem AND Operator verknüpft. Die Ergebnisse müssen „mindbreeze“ und gleichzeitig auch „About“ matchen.
{
"query": {
"and": [{
"unparsed": "mindbreeze"
}, {
"unparsed": "About"
}
]
}
"count": 5,
"properties": [{
"name": "title",
"formats": ["HTML"]
}, {
"name": "content",
"formats": ["HTML"]
}
]
}
…
"resultset": {
"results": [
{
"id": "SAP KMC:Default:/irj/go/km/docs/documents/MarketingPRTestdaten/DateienWebsite/Fabasoft%20Sales%20Kit%20(EN)/Mindbreeze/2013-02-27%20Mindbreeze%20Sales%20(English%2c%2016-9).pptx:",
"location": "aHR0cHM6Ly9pbnNwaXJlcHJvZC5pbnNwaXJlLm1pbmRicmVlemUuY29tOjIzMzM5OjUzNzE=",
"rank_score": 36.9355,
"relevance_score": 36.9355,
"properties": [
{
"id": "title",
"name": "Title",
"data": [
{
"html": "2013-02-27 <em>Mindbreeze</em> Sales (English, 16-9).pptx"
}
]
},
{
"id": "content",
"name": "content",
"data": [
{
"html": "<em>About Mindbreeze</em> \nVienna, February 28...– 10:30 \t<em>Mindbreeze</em> \n\t10:30 – 12:00 \t<em>Mindbreeze</em> InSite \n\t12:00...– 14:30 \t<em>Mindbreeze</em> InSpire \n\t14:30...– 16:00 \t<em>Mindbreeze</em> InApp \n\t16:00...– 17:30 \t<em>Mindbreeze</em> InTouch \n \n \n \n \n<em>Mindbreeze</em> Products \n \nLIGHT IN...arbeitet, findet mit <em>Mindbreeze</em> Enterprise Search relevante...website: http://insite.<em>mindbreeze</em>.com \nBenefits and"
}
]
}
],
"order": {
"num": 369355
},
"group": {
"str": ""
}
},…
Mit near können Suchbegriffe eingeschränkt werden auf die Distanz der Vorkommnisse. Wird Beispielsweise nach „mindbreeze NEAR inspire“ gesucht. So darf die Distanz zwischen „mindbreeze“ und „inspire“ nicht mehr als 6 Wörter betragen damit das Ergebnis der Suchanfrage matched. Die Reihenfolge wird dabei ignoriert (mindbreeze NEAR inspire == inspire NEAR mindbreeze).
{
"query": {
"near": ["mindbreeze","inspire"]
}
"count": 1,
"properties": [{
"name": "title",
"formats": ["HTML"]
},{
"name": "content",
"formats": ["HTML"]
}]
}
"resultset": {
"results": [
{
"id": "Web:wwwmindbreezecom:https://www.mindbreeze.com/de/inspire-training-feb2017:",
"location": "aHR0cHM6Ly9pbnNwaXJlcHJvZC5pbnNwaXJlLm1pbmRicmVlemUuY29tOjIzMzMxOjM1MTA=",
"rank_score": 43.8645,
"relevance_score": 43.8645,
"properties": [
{
"id": "title",
"name": "Title",
"data": [
{
"html": "<em>Mindbreeze InSpire</em> Training"
}
]
},
{
"id": "content",
"name": "content",
"data": [
{
"html": "<em>Mindbreeze InSpire</em> Training\nDauer: 3...wichtigsten Neuerungen von <em>Mindbreeze InSpire</em>. Wir freuen uns...richtigen Umgang mit <em>Mindbreeze InSpire</em> und im Speziellen...Einführung in das <em>Mindbreeze InSpire</em> SDK Entwicklung\n\tDetails...Sicherheitsmodells\n Know-how: <em>Mindbreeze InSpire</em> SDK (z. B"
}
]
}
],
"order": {
"num": 438645
},
"group": {
"str": ""
}
Bei numerischen Werten kann darüber hinaus automatisch der TO Operator angewendet werden. Dies ist sogar bei nummerischen Werten im Fließtext eines Ergebnisses möglich. In unserem Beispiel werden nur jene Ergebnisse zurückgegeben, die einen Zahl zwischen 100 und 103 enthalten.
{
"query": {
"from":"100",
"to":"103"
}
"count": 5,
"properties": [{
"name": "title",
"formats": ["HTML"]
},{
"name": "content",
"formats": ["HTML"]
}]
}
…
"resultset": {
"results": [
{
"id": "Web:wwwmindbreezecom:https://www.mindbreeze.com/de/presse/100-companies-that-matter.html:",
"location": "aHR0cHM6Ly9pbnNwaXJlcHJvZC5pbnNwaXJlLm1pbmRicmVlemUuY29tOjIzMzMxOjM3MTA=",
"rank_score": 39.933,
"relevance_score": 39.933,
"properties": [
{
"id": "title",
"name": "Title",
"data": [
{
"html": "<em>100</em>-companies-that-matter.html"
}
]
}
],
"order": {
"num": 399330
},
"group": {
"str": ""
}
},…
Mit der Mindbreeze Search API ist es auch möglich anstelle eines normalen Queries ein Regex abzusetzen. Matched dieses Regex so wird das Ergebnis returniert. Wichtig dabei ist das man den Backslash in JSON extra escapen muss. Das bedeutet, dass bei einem regex-Escape 2 Backslash anstelle von einen erforderlich sind (1 mal JSON und 1 mal regex Escape). In unserem Beispiel muss das Dokument im mes:key dem regex-Pattern (Beginn eines URLs) matchen damit es returniert wird. Dies funktioniert nur mit jenen Metadaten die regexmatchable oder aggregateable sind. Zu beachten ist hierbei, dass, Regex nur in bestimmten Metadaten gesucht werden kann und nicht ohne einem label.
{
"query": {
"label":"mes:key"
"regex": "https:\\/\\/www\\.mindbreeze\\.com\\/de.*"
}
"count": 1,
"properties": [{
"name": "title",
"formats": ["HTML"]
},{
"name": "content",
"formats": ["HTML"]
}]
}
"resultset": {
"results": [
{
"id": "Web:wwwmindbreezecom:https://www.mindbreeze.com/de/mindbreeze-basic-training-oktober-2015.html:",
"location": "aHR0cHM6Ly9pbnNwaXJlcHJvZC5pbnNwaXJlLm1pbmRicmVlemUuY29tOjIzMzMxOjY=",
"rank_score": 0,
"relevance_score": 0,
"properties": [
{
"id": "title",
"name": "Title",
"data": [
{
"html": "Mindbreeze Basic Training / Schulung"
}
]
},
{
"id": "content",
"name": "content",
"data": [
{
"html": "Mindbreeze Basic Training / Schulung\nTrainingsdatum: 13.10.2015\nOrt: Mindbreeze Academy, Honauerstraße 4, 4020 Linz, Austria\nDauer: 1 Tag, 09:00 - 17:00\nPreis: EUR 600,-- (exkl. MWSt.) pro Person\nTeilnehmeranzahl: mindestens 5 Personen\nLevel: Einsteiger\nVorausgesetzte Kurse: keine\nSprache: Englisch ¹)\n¹) Falls sich ausschließlich deutschsprachige Teilnehmer anmelden, wird auch die Ausbildung auf Deutsch gehalten.\nKommen Sie zu uns und erfahren Sie direkt von den Mindbreeze-Experten alles üb..."
}
]
}
],
"order": {
"num": 0
},
"group": {
"str": ""
}
}
Mit der Mindbreeze InSpire Search API ist es möglich Inhalte die sich in einem bestimmten Zeitraum bewegen als Ergebnisse zu returnieren. Als Einschränkung werden dafür timestamps (UNIX time) verwendet. In unseren Fall wollen wir alle Ergebnisse von 1.1.2016 bis 7.6.2017 um 10:26 UTC anzeigen. Neben einer Verundung der beiden Zeitstempel kann auch eine Veroderung verwendet werden.
{
"query": {
"label": "mes:date",
"and": [{
"num": 1451606400000,
"cmp": "GE",
"unit": "ms_since_1970"
}, {
"num": 1496831176874,
"cmp": "LE",
"unit": "ms_since_1970"
}
]
}
"count": 1,
"properties": [{
"name": "title",
"formats": ["HTML"]
}, {
"name": "content",
"formats": ["HTML"]
}
]
}
"resultset": {
"results": [
{
"id": "Web:wwwmindbreezecom:https://www.mindbreeze.com/inspire-contact:",
"location": "aHR0cHM6Ly9pbnNwaXJlcHJvZC5pbnNwaXJlLm1pbmRicmVlemUuY29tOjIzMzMxOjQ=",
"rank_score": 0,
"relevance_score": 0,
"properties": [
{
"id": "title",
"name": "Title",
"data": [
{
"html": "Contact"
}
]
},
{
"id": "content",
"name": "content",
"data": [
{
"html": "Contact\nWe are delighted that you have chosen Mindbreeze InSpire.\nPlease name a contact person and suitable dates for the on-site support.\nFor other data sources, please add also the IP address or DNS name of the data sources. The ports that are required to these data sources have to be unlocked bidirectional between Mindbreeze Appliance and data sources."
}
]
}
Die Query Spelling Alternativen werden auf Basis der ursprünglichen Benutzer-Query berechnet. Die ursprüngliche Benutzer-Query wird aus der Query aus dem unparsed-Wert entnommen (direkt oder innerhalb eines and-Operators).
Falls die Query nicht dieser Form entspricht, (weil beispielsweise zusätzliche logische Operatoren verwendet wurden) dann muss die ursprüngliche Benutzer-Query als separater original_unparsed Parameter übergeben werden.
(Falls dies nicht geschieht, dann kann keine ursprüngliche Benutzer-Query ermittelt werden und es können keine Query Spelling Alternativen angeboten werden.)
{
"user": {
"query": {
"and": [
{
"or": [
{
"unparsed": "\"eamples\""
},
{
"unparsed": "eamples"
}
]
}
],
"original_unparsed": "eamples"
}
}
}
{
...
"alternatives": [
{
"id": "query_spelling",
"name": "query_spelling",
"entries": [
{
"html": "<em>examples</em>",
"count": 863,
"query_expr": {
"unparsed": "examples",
"description": "examples"
}
}
]
}
],
...
"show_query_spelling_alternatives": true,
"status_messages": [
{
"id": "no_results",
"info": "No results found"
}
]
}
Mit der Mindbreeze Search API ist es möglich Parameter anzugeben, die einen Filter/Facet retournieren. In unserem Beispiel soll zusätzlich zu den Metadaten auch ein Filter/Facet für die Dateiendung/ das Metadatum extension zurückgegeben werden. Wichtige Informationen über die Filter sind Beispielsweise die Anzahl der Resultate die einen bestimmten Filterwert haben. Als Beispiel wurde nachstehend die Anzahl der PNG-Dateien der Suche nach „mindbreeze“ fett markiert.
{
"query": {
"unparsed": "mindbreeze"
},
"count": 1,
"properties": [{
"name": "title",
"formats": ["HTML"]
},{
"name": "content",
"formats": ["HTML"]
}],
"facets":[
{
"name":"extension"
"formats":[
"HTML"
]
}
]
}
Mit der Option filter_include_all_descendants ist es möglich, die komplette Hierarchie ohne Einschränkung zurückzuliefern.
Hinweis: Das Setzen dieser Option kann je nach Art und Anzahl von indizierten Dokumenten sehr aufwendig sein. Wir empfehlen, Performance-Tests mit einer angemessenen Anzahl von Dokumenten mit entsprechenden Metadaten durchzuführen, um sicherzustellen, dass die App schnell genug reagiert.
Hinweis: Diese Option kann nicht für mes:configuredfacets definiert werden. Sie muss für jeden angeforderten Filter explizit definiert werden.
{
"query": {
"unparsed": "mindbreeze"
},
"count": 1,
"properties": [{
"name": "title",
"formats": ["HTML"]
},{
"name": "content",
"formats": ["HTML"]
}],
"facets":[
{
"name":"my_hierarchical_filter"
"formats":[
"HTML"
],
"filter_include_all_descendants": true
}
]
}
"facets": [
{
"name": "extension",
"formats": [
"HTML"
]
}
],
"properties": [
{
"name": "title",
"formats": [
"HTML"
]
},
{
"name": "content",
"formats": [
"HTML"
]
}
],
"user_context": {}
},
"alternatives": [
{
"id": "user_query",
"name": "user_query",
"entries": [
{
"html": "mindbreeze",
"count": 1,
"query_expr": {
"unparsed": "mindbreeze"
}
}
]
}
],
"name": "unnamed",
"estimated_count": 4827,
"facets": [
{
"id": "extension",
"name": "File type",
"entries": [
{
"html": "png",
"count": 1437,
"query_expr": {
"label": "extension",
"regex": "^\\Qpng\\E$",
"description": "png",
"id": "png",
"value": {
"str": "png"
}
},
"value": {
"str": "png"
}
},
{
"html": "html",
"count": 863,
"query_expr": {
"label": "extension",
"regex": "^\\Qhtml\\E$",
"description": "html",
"id": "html",
"value": {
"str": "html"
}
},
"value": {
"str": "html"
}
},
{
"html": "jpg",
"count": 546,
"query_expr": {
"label": "extension",
"regex": "^\\Qjpg\\E$",
"description": "jpg",
"id": "jpg",
"value": {
"str": "jpg"
}
},
"value": {
"str": "jpg"
}
},
{
"html": "gif",
"count": 350,
"query_expr": {
"label": "extension",
"regex": "^\\Qgif\\E$",
"description": "gif",
"id": "gif",
"value": {
"str": "gif"
}
},
"value": {
"str": "gif"
}
},
{
"html": "pdf",
"count": 344,
"query_expr": {
"label": "extension",
"regex": "^\\Qpdf\\E$",
"description": "pdf",
"id": "pdf",
"value": {
"str": "pdf"
}
},
"value": {
"str": "pdf"
}
},
{
"html": "docx",
"count": 261,
"query_expr": {
"label": "extension",
"regex": "^\\Qdocx\\E$",
"description": "docx",
"id": "docx",
"value": {
"str": "docx"
}
},
"value": {
"str": "docx"
}
},
{
"html": "xml",
"count": 211,
"query_expr": {
"label": "extension",
"regex": "^\\Qxml\\E$",
"description": "xml",
"id": "xml",
"value": {
"str": "xml"
}
},
"value": {
"str": "xml"
}
},
{
"html": "msg",
"count": 195,
"query_expr": {
"label": "extension",
"regex": "^\\Qmsg\\E$",
"description": "msg",
"id": "msg",
"value": {
"str": "msg"
}
},
"value": {
"str": "msg"
}
},
{
"html": "zip",
"count": 113,
"query_expr": {
"label": "extension",
"regex": "^\\Qzip\\E$",
"description": "zip",
"id": "zip",
"value": {
"str": "zip"
}
},
"value": {
"str": "zip"
}
},
{
"html": "doc",
"count": 100,
"query_expr": {
"label": "extension",
"regex": "^\\Qdoc\\E$",
"description": "doc",
"id": "doc",
"value": {
"str": "doc"
}
},
"value": {
"str": "doc"
}
},
{
"html": "jpeg",
"count": 77,
"query_expr": {
"label": "extension",
"regex": "^\\Qjpeg\\E$",
"description": "jpeg",
"id": "jpeg",
"value": {
"str": "jpeg"
}
},
"value": {
"str": "jpeg"
}
},
{
"html": "ppt",
"count": 73,
"query_expr": {
"label": "extension",
"regex": "^\\Qppt\\E$",
"description": "ppt",
"id": "ppt",
"value": {
"str": "ppt"
}
},
"value": {
"str": "ppt"
}
},
{
"html": "tif",
"count": 62,
"query_expr": {
"label": "extension",
"regex": "^\\Qtif\\E$",
"description": "tif",
"id": "tif",
"value": {
"str": "tif"
}
},
"value": {
"str": "tif"
}
},
{
"html": "txt",
"count": 58,
"query_expr": {
"label": "extension",
"regex": "^\\Qtxt\\E$",
"description": "txt",
"id": "txt",
"value": {
"str": "txt"
}
},
"value": {
"str": "txt"
}
},
{
"html": "pptx",
"count": 39,
"query_expr": {
"label": "extension",
"regex": "^\\Qpptx\\E$",
"description": "pptx",
"id": "pptx",
"value": {
"str": "pptx"
}
},
"value": {
"str": "pptx"
}
}
],
Die maximale Anzahl der Werte, die im Filter zurückgeliefert werden, werden im Client Service über die Einstellung „Maximum Number of Displayed Values“ bestimmt. Diese Einstellung gilt für alle Filter gemeinsam. Hinweis: Der Standardwert für Maximum Number of Displayed Values“ ist 15. Wir empfehlen den Wert nicht zu hoch zu setzen, da sich dies auf alle Filter auswirkt und die Performanz der Suche reduziere kann.
Mit der Option filter_max_value_count im Search Request ist es möglich, pro Filter die maximale Anzahl der Werte zu setzen. Damit können nur für einzelne Filter mehr Werte angefordert werden, ohne die Performanz der gesamten Suche zu beeinträchtigen.
In diesem Beispiel werden zwei Filter/Facets angefordert. Bei myname1 werden keine besonderen Angaben gemacht, bei myname2 wird filter_max_value_count auf den Wert 5 gesetzt. Im der Client Service Konfiguration ist „Maximum Number of Displayed Values“ auf den Wert 3 gestellt.
Im Ergebnis wird für den Filter/Facet myname1 daher der Wert der Client Services übernommen und es werden 3 Entries zurückgeliefert. Für den Filter/Facet myname2 ist explizit filter_max_value_count auf den Wert 5 gesetzt, daher werden hier 5 Entries zurückgeliefert.
{
"facets": [
{
"formats": [
"HTML"
],
"name": "myname1"
},
{
"formats": [
"HTML"
],
"name": "myname2",
"filter_max_value_count": 5
}
],
"query": {
"unparsed": "mindbreeze"
}
}
{
"search_request": {
"query": {
"unparsed": "mindbreeze"
},
"facets": [
{
"name": "myname1",
"formats": [
"HTML"
]
},
{
"name": "myname2",
"formats": [
"HTML"
],
"filter_max_value_count": 5
}
],
"user_context": {}
}
"name": "unnamed",
"estimated_count": 254,
"facets": [
{
"id": "myname1",
"name": "myname1",
"entries": [
{
"html": "Case Studies",
"count": 2,
"query_expr": {
"label": "myname1",
"regex": "^\\QCase Studies\\E$",
"description": "Case Studies",
"id": "Case Studies",
"value": {
"str": "Case Studies"
}
},
"value": {
"str": "Case Studies"
}
},
{
"html": "Developer",
"count": 2,
"query_expr": {
"label": "myname1",
"regex": "^\\QDeveloper\\E$",
"description": "Developer",
"id": "Developer",
"value": {
"str": "Developer"
}
},
"value": {
"str": "Developer"
}
},
{
"html": "Management",
"count": 2,
"query_expr": {
"label": "myname1",
"regex": "^\\QManagement\\E$",
"description": "Management",
"id": "Management",
"value": {
"str": "Management"
}
},
"value": {
"str": "Management"
}
}
],
"order_criteria": "COUNT",
"order_direction": "DESCENDING",
"total_value_count": 254,
"distinct_value_count": 226,
"entries_truncated": true,
"count_filtered_facet_values": true,
"incomplete": false
},
{
"id": "myname2",
"name": "myname2",
"entries": [
{
"html": "Basic Indexing",
"count": 2,
"query_expr": {
"label": "myname2",
"regex": "^\\QBasic Indexing\\E$",
"description": "Basic Indexing",
"id": "Basic Indexing",
"value": {
"str": "Basic Indexing"
}
},
"value": {
"str": "Basic Indexing"
}
},
{
"html": "Case Studies",
"count": 2,
"query_expr": {
"label": "myname2",
"regex": "^\\QCase Studies\\E$",
"description": "Case Studies",
"id": "Case Studies",
"value": {
"str": "Case Studies"
}
},
"value": {
"str": "Case Studies"
}
},
{
"html": "Developer",
"count": 2,
"query_expr": {
"label": "myname2",
"regex": "^\\QDeveloper\\E$",
"description": "Developer",
"id": "Developer",
"value": {
"str": "Developer"
}
},
"value": {
"str": "Developer"
}
},
{
"html": "GSA Replacement",
"count": 2,
"query_expr": {
"label": "myname2",
"regex": "^\\QGSA Replacement\\E$",
"description": "GSA Replacement",
"id": "GSA Replacement",
"value": {
"str": "GSA Replacement"
}
},
"value": {
"str": "GSA Replacement"
}
},
{
"html": "Management",
"count": 2,
"query_expr": {
"label": "myname2",
"regex": "^\\QManagement\\E$",
"description": "Management",
"id": "Management",
"value": {
"str": "Management"
}
},
"value": {
"str": "Management"
}
}
],
"order_criteria": "COUNT",
"order_direction": "DESCENDING",
"total_value_count": 254,
"distinct_value_count": 226,
"entries_truncated": true,
"count_filtered_facet_values": true,
"incomplete": false
}
]
}
Darüber hinaus ist es möglich Filter im Request zu setzten. Dies führt zu demselben Verhalten als würde man eine Filterwert im Client selektieren um die Suche einzuschränken. Dazu muss wie im nachstehenden Beispiel die Query Expression des ausgewählten Filterwertes im Request gesetzt werden. Zu beachten ist hierbei, dass man auch mehrere Query Expressions in Form einer Liste als Request verwenden kann um mehrere Filterwerte gleichzeitig auszuwählen.
{
"user":{
"query": {
"unparsed": "mindbreeze"
},"constraints": [
{
"label": "extension",
"filter_base": [
{ "label": "extension",
"regex": "^\\Qpng\\E$",
"description": "png",
"id": "png",
"value": {"str": "png"}
},{
"label": "extension",
"regex": "^\\Qpdf\\E$",
"description": "pdf",
"id": "pdf",
"value": {"str": "pdf"}
}
]
},{
"label": "mes:date",
"filter_base": [
{ "and": [
{num: 1514764800000, cmp: "GE", unit: "ms_since_1970"},
{num: 1546300799999, cmp: "LE", unit: "ms_since_1970"}
],
"label": "mes:date",
"description": "2018",
"id": "2018",
"value": {
num: 1514764800000,
unit: "ms_since_1970"
}
}
]
}
]
},
"count": 1,
"properties": [{
"name": "title",
"formats": ["HTML"]
},{
"name": "content",
"formats": ["HTML"]
}],
"facets":[
{
"name":"extension"
"formats":[
"HTML"
]
}
]
}
"resultset": {
"results": [
{
"id": "SAP KMC:Default:/irj/go/km/docs/documents/MarketingPRTestdaten/Vorschlag%20Fotos%20zur%20Verwendung%20FFPR%20_%20Mobile%20Suche/Mindbreeze-Suche%20am%20iPad%20%c2%a9%20Mindbreeze.png:",
"location": "aHR0cHM6Ly9pbnNwaXJlcHJvZC5pbnNwaXJlLm1pbmRicmVlemUuY29tOjIzMzM5OjIxNzc=",
"rank_score": 35.896,
"relevance_score": 35.896,
"properties": [
{
"id": "title",
"name": "Title",
"data": [
{
"html": "<em>Mindbreeze</em>-Suche am iPad © <em>Mindbreeze</em>.png"
}
]
}
],
"order": {
"num": 358960
},
"group": {
"str": ""
}
}
Mit der Option count_filtered_facet_values in der Suchanfrage, kann gesteuert werden, ob gefilterte Werte mitgezählt werden sollen. Wird die Option nicht angegeben, ist das Standardverhalten so, dass die Konfiguration von Mindbreeze InSpire herangezogen wird. Ist es nicht anders konfiguriert, werden die gefilterten Werte mitgezählt (true), Die Option in der Anfrage überschreibt die Konfiguration unbedingt.
{
"user":{
"query": {
"unparsed": "mindbreeze"
},"constraints": [{ "label": "extension","filter_base": [
{"label": "extension", "regex": "^\\Qpng\\E$", "description": "png", "id": "png", "value": {"str": "png"}}]}]
},
"count": 1,
"count_filtered_facet_values": false,
"properties": [{
"name": "title",
"formats": ["HTML"]
},{
"name": "content",
"formats": ["HTML"]
}],
"facets":[
{
"name":"extension"
"formats":[
"HTML"
]
}
]
}
Wenn die Option request_facest_as_properties in der Suchanfrage aktiviert ist, werden die als facet abgefragten Eigenschaften auch als properties abgefragt. Dies wirkt sich nicht E2E auf die Dokumente aus, sondern führt zu einer korrekten Reduzierung der Anzahl der Dokumente in den Facetten, wenn Duplikate in der Antwort gefiltert werden.
{
"count": 5,
"request_facets_as_properties": true,
"properties":[
{
"name":"title"
}
],
"facets":[
{
"name":"mes:date"
},
{
"name":"mes:configuredfacets"
}
],
"user":{
"query":{
"unparsed":"ALL"
}
}
}
Mit dem Feld summarize_by kann man Ergebnisse nach auswählbaren Eigenschaften gruppieren und sortieren.
{
"query": {
"unparsed": "mindbreeze"
},
"count": 1,
"properties": [{
"name": "title",
"formats": ["HTML"]
}, {
"name": "content",
"formats": ["HTML"]
}
],
"query_context_user_query": "mindbreeze",
"summarize_by": {
"property": "mes:extension",
"orderby": "mes:date",
"order_direction": "ASCENDING",
"aggregated_properties": [{
"name": "countName",
"expr": "count()"
}, {
"name": "sumName",
"expr": "sum(mes:size)"
}
],
"summarize_non_existent": false
}
}
Im Request können Sie die NLQA bezogenen Optionen answer_count und min_similarity_score angeben.
Die Option answer_count ist die maximale Anzahl der Antworten, die in der Response zurückgegeben werden sollen.
Mit der Option min_similarity_score kann der Mindest-Score, den eine Antwort haben muss, festgelegt werden. Der Score ist ein Wert zwischen 0 und 1 und je höher der Score, desto besser die Antwort.
{
"count":5,
"answer_count":5,
"min_similarity_score": 0.7,
"user":{
"query":{
"similar":"Wieviele Konnektoren stellt Mindbreeze zur verfügung?"
}
}
}
Mit der Option disable_external_contextualization kann die External Contextualization deaktiviert werden. (Standardeinstellung: nicht gesetzt. Falls die Option nicht gesetzt ist, ist implizit die Client-Service Einstellung „Disable External Contextualization“ effektiv):
{
"count":5,
"disable_external_contextualization": true
"user":{
"query":{
"similar":"Wieviele Konnektoren stellt Mindbreeze zur verfügung?"
}
}
}
Dies bietet die Möglichkeit Metadaten labels bereits übersetzt zu erhalten:
{
"query": {
"unparsed": "mindbreeze"
},
"count": 1,
"properties": [{
"name": "title",
"formats": ["VALUE","HTML"]
},{
"name": "content",
"formats": ["VALUE","HTML"]
}],
"user_context":{
"locale":"de"
}
}
"resultset": {
"results": [
{
"id": "Web:wwwmindbreezecom:https://www.mindbreeze.com/de/inspire-training-feb2017:",
"location": "aHR0cHM6Ly9pbnNwaXJlcHJvZC5pbnNwaXJlLm1pbmRicmVlemUuY29tOjIzMzMxOjM1MTA=",
"rank_score": 42.5445,
"relevance_score": 42.5445,
"properties": [
{
"id": "title",
"name": "Titel",
"data": [
{
"html": "<em>Mindbreeze</em> InSpire Training",
"value": {
"str": "Mindbreeze InSpire Training"
}
}
]
},
{
"id": "content",
"name": "content",
"data": [
{
"html": "<em>Mindbreeze</em> InSpire Training\nDauer...Februar 2017\nOrt: <em>Mindbreeze</em> Academy, Honauerstraße 2...direkt von den <em>Mindbreeze</em>-Experten alles über...wichtigsten Neuerungen von <em>Mindbreeze</em> InSpire. Wir freuen...der Welt von <em>Mindbreeze</em> vertraut gemacht. Die",
"value": {
"str": ""
}
}
]
}
],
"order": {
"num": 425445
},
"group": {
"str": ""
}
}
Die Task-ID kann gesetzt werden, wenn die Suchen in derselben Session stattfinden. Dadurch werden aktuell laufende Suchen des aktuellen Benutzers gestoppt und nur die letzte ausgeführt. Wird also mehr als 1 Suche gleichzeitig abgesetzt, die dieselbe Task-ID verwenden werden alle bis auf die letzte abgesetzte abgebrochen und die letzte abgesetzte durchgeführt.
Dies kann zur Optimierung der Performance bei Multi-User Umgebungen verwendet werden. Best Practice: Jede Sitzung einer Insight App, jedes offene Suchfenster sollte eine eindeutige Task-ID haben.
{
"query": {
"unparsed": "mindbreeze"
},
"count": 1,
"properties": [{
"name": "title",
"formats": ["VALUE","HTML"]
},{
"name": "content",
"formats": ["VALUE","HTML"]
}],
"task_id":"<guid>"
}
Mit der option exclude_available_properties_and_facets ist es möglich, dass nur jene Properties/Facets bei der Response zurückgegeben werden die auch als Properties mit Wert beim Call angegeben werden. In unserem Beispiel werden also alle anderen außer Titel und Inhalte nicht mehr exportiert, wenn diese Option aktiv ist. Wird die Option nicht gesetzt ist sie automatisch false.
Beispiel:
{
"query": {
"unparsed": "mindbreeze"
},
"count": 1,
"properties": [{
"name": "title",
"formats": ["VALUE","HTML"]
},{
"name": "content",
"formats": ["VALUE","HTML"]
}],
"exclude_available_properties_and_facets":true
}
…
"resultset": {
"results": [
{
"id": "Web:wwwmindbreezecom:https://www.mindbreeze.com/de/inspire-training-feb2017:",
"location": "aHR0cHM6Ly9pbnNwaXJlcHJvZC5pbnNwaXJlLm1pbmRicmVlemUuY29tOjIzMzMxOjM1MTA=",
"rank_score": 42.5445,
"relevance_score": 42.5445,
"properties": [
{
"id": "title",
"name": "Title",
"data": [
{
"html": "<em>Mindbreeze</em> InSpire Training",
"value": {
"str": "Mindbreeze InSpire Training"
}
}
]
},
{
"id": "content",
"name": "content",
"data": [
{
"html": "<em>Mindbreeze</em> InSpire Training\nDauer...Februar 2017\nOrt: <em>Mindbreeze</em> Academy, Honauerstraße 2...direkt von den <em>Mindbreeze</em>-Experten alles über...wichtigsten Neuerungen von <em>Mindbreeze</em> InSpire. Wir freuen...der Welt von <em>Mindbreeze</em> vertraut gemacht. Die",
"value": {
"str": ""
}
}
]
}
],
"order": {
"num": 425445
},
"group": {
"str": ""
}
}
],
"prev_avail": false,
"next_avail": true,
"order_direction": "DESCENDING",
"per_service_dataset": [
{
"id": "https://demo.mindbreeze.com/public/",
"termination_cause": "COUNT_LIMIT",
"paging_state": {
"id": "unnamed",
"state": "\n\u00010\u0010\u0000\u0018\u0001",
"digest": "dBCFawAIMiGsGEflr6JYhw=="
}
}
]
},
"groupable": [
{
"name": "Author",
"localized_name": "Author"
},
{
"name": "Category",
"localized_name": "Category"
},
{
"name": "publisher",
"localized_name": "Company"
},
{
"name": "createdby",
"localized_name": "Created"
},
{
"name": "extension",
"localized_name": "Extension"
},
{
"name": "language",
"localized_name": "Language"
},
{
"name": "modifiedby",
"localized_name": "Modified"
},
{
"name": "ownername",
"localized_name": "Owner"
},
{
"name": "path",
"localized_name": "Path"
},
{
"name": "Presentation-Format",
"localized_name": "Presentation format"
},
{
"name": "parent",
"localized_name": "Room"
},
{
"name": "Content-Status",
"localized_name": "Status"
},
{
"name": "breadcrumbs",
"localized_name": "Tag"
}
],
"show_query_spelling_alternatives": false,
"order_direction_available": true
}
…
"resultset": {
"results": [
{
"id": "Web:wwwmindbreezecom:https://www.mindbreeze.com/de/inspire-training-feb2017:",
"location": "aHR0cHM6Ly9pbnNwaXJlcHJvZC5pbnNwaXJlLm1pbmRicmVlemUuY29tOjIzMzMxOjM1MTA=",
"rank_score": 42.5445,
"relevance_score": 42.5445,
"properties": [
{
"id": "title",
"name": "Title",
"data": [
{
"html": "<em>Mindbreeze</em> InSpire Training",
"value": {
"str": "Mindbreeze InSpire Training"
}
}
]
},
{
"id": "content",
"name": "content",
"data": [
{
"html": "<em>Mindbreeze</em> InSpire Training\nDauer...Februar 2017\nOrt: <em>Mindbreeze</em> Academy, Honauerstraße 2...direkt von den <em>Mindbreeze</em>-Experten alles über...wichtigsten Neuerungen von <em>Mindbreeze</em> InSpire. Wir freuen...der Welt von <em>Mindbreeze</em> vertraut gemacht. Die",
"value": {
"str": ""
}
}
]
}
],
"order": {
"num": 425445
},
"group": {
"str": ""
}
}
],
"prev_avail": false,
"next_avail": true,
"order_direction": "DESCENDING",
"per_service_dataset": [
{
"id": "https://demo.mindbreeze.com/public/",
"termination_cause": "COUNT_LIMIT",
"paging_state": {
"id": "unnamed",
"state": "\n\u00010\u0010\u0000\u0018\u0001",
"digest": "dBCFawAIMiGsGEflr6JYhw=="
}
}
]
},
"show_query_spelling_alternatives": false,
"order_direction_available": true
Die API ermöglicht darüber hinaus, dass Ergebnisse nach einem bestimmten Metadatum sortiert zurückgegeben werden können. Dabei enthält orderby das Metadatum, nach dem sortiert wird. order_direction (ASCENDING, DESCENDING) legt die Reihenfolge fest. In unserem Beispiel wird nach „mindbreeze“ gesucht und die Ergebnisse nach mes:date (Standartdatum) (aufssteigend) sortiert. Von den Resultaten werden dabei nur der Titel und der Inhalt der Resultate als HTML returniert. Es werden nur die ersten 5 Resultate zurückgegeben. Die Vorbelegungen sind mes:relevance und DESCENDING. Die Suchantwort enthält eine Liste aller für die Sortierung verfügbaren Metadaten.
{
"query": {
"unparsed": "mindbreeze"
},
"count": 5,
"orderby": "mes:date",
"order_direction": "ASCENDING",
"properties": [{
"name": "title",
"formats": ["HTML"]
},{
"name": "content",
"formats": ["HTML"]
}]
}
"resultset": {
"results": [
{
"id": "Atlassian Confluence:confluence:https://demo.mindbreeze.com/confluence/download/attachments/1343604/Monitor_Working_Wikily_2%200.pdf?api=v2:",
"location": "aHR0cHM6Ly9pbnNwaXJlcHJvZC5pbnNwaXJlLm1pbmRicmVlemUuY29tOjIzMzM4Ojgz",
"rank_score": 340231.0284,
"relevance_score": 0,
"properties": [
{
"id": "title",
"name": "Title",
"data": [
{
"html": "Monitor_Working_Wikily_2 0.pdf"
}
]
},
{
"id": "content",
"name": "content",
"data": [
{
"html": "Social Change with a Network Mindset\r\nWORKING\r\nWIKILY2.0 Created by the\r\nMonitor Institute\r\nwww.monitorinsitute.com\r\nThis work is licensed under the Creative Commons Attribution Share Alike 3.0 Unported License.\r\nIt’s probably safe to say by now that we all know about web 2.0. We’ve read a blog. \r\nWe’ve looked something up on Wikipedia. We’ve created a Facebook profile and started collecting friends. We may have even “tweeted.” The tools are now accessible to the \r\npoint where, f..."
}
]
}
],
"order": {
"num": 3402310284
},
"group": {
"str": ""
}
},
{
"id": "Atlassian Confluence:confluence:https://demo.mindbreeze.com/confluence/download/attachments/1343604/Wiki-based%20Portfolio%20Mgmt_DMR_Nr3_Tempich_2009_D.pdf?api=v2:",
"location": "aHR0cHM6Ly9pbnNwaXJlcHJvZC5pbnNwaXJlLm1pbmRicmVlemUuY29tOjIzMzM4OjE4NA==",
"rank_score": 340231.0491,
"relevance_score": 0,
"properties": [
{
"id": "title",
"name": "Title",
"data": [
{
"html": "Wiki-based Portfolio Mgmt_DMR_Nr3_Tempich_2009_D.pdf"
}
]
},
{
"id": "content",
"name": "content",
"data": [
{
"html": "Strategy\r\n29 Detecon Management Report • 3 / 2009\r\n ie Steuerung von komplexen Produkt- oder Geschäftsfeldportfolios mit Hilfe des Portfolio-Management hat sich in den \r\nletzten Jahren in vielen Großkonzernen etabliert. Auch wir nutzen die Portfolio-Methode in der Analysephase vieler unserer \r\nProjekte, um schnell Transparenz über die Wettbewerbssituation, \r\ntechnische Anforderungen, Prozesse und andere Analyseobjekte \r\nzu erlangen. Bei der Anwendung von Portfolio-Management \r\nkommt es ..."
}
]
}
],
"order": {
"num": 3402310491
},
"group": {
"str": ""
}
},
…
In diesem Beispiel wird nach „mindbreeze“ gesucht. Dabei wird nach dem Metadatum Extension gruppiert. Dies kann mithilfe des groupby.property festgelegt werden. Von den Resultaten werden dabei nur der Titel und der Inhalt der Resultate als HTML returniert. Es werden nur die ersten 5 Resultate zurückgegeben. Die Resultate enthalten in group den Gruppierungswert. Die Ergebnisse werden nach mes:date sortiert.
{
"query": {
"unparsed": "mindbreeze"
},
"count": 5,
"orderby": "mes:date",
"groupby": {
"property": "extension"
},
"properties": [{
"name": "title",
"formats": ["HTML"]
},{
"name": "content",
"formats": ["HTML"]
}]
}
"resultset": {
"results": [
{
"id": "Web:wwwmindbreezecom:https://www.mindbreeze.com/enterprise-search-appliance:",
"location": "aHR0cHM6Ly9pbnNwaXJlcHJvZC5pbnNwaXJlLm1pbmRicmVlemUuY29tOjIzMzMxOjQwNjE=",
"rank_score": 362366.644,
"relevance_score": 0,
"properties": [
{
"id": "title",
"name": "Title",
"data": [
{
"html": "The Enterprise Search Appliance"
}
]
},
{
"id": "content",
"name": "content",
"data": [
{
"html": "all their knowledge.\n<em>Mindbreeze</em> InSpire can help...Enterprise Search Appliance\n<em>Mindbreeze</em> analyzes both structured...the individual contents.\n<em>Mindbreeze</em> InSpire comes to...GSA configuration into <em>Mindbreeze</em> InSpire <em>Mindbreeze</em> InSpire supports all"
}
]
}
],
"order": {
"num": 3623666440
},
"group": {
"str": "html"
}
},
{
"id": "Web:wwwmindbreezecom:https://www.mindbreeze.com/de/enterprise-search-appliance:",
"location": "aHR0cHM6Ly9pbnNwaXJlcHJvZC5pbnNwaXJlLm1pbmRicmVlemUuY29tOjIzMzMxOjQwNjI=",
"rank_score": 362366.6438,
"relevance_score": 0,
"properties": [
{
"id": "title",
"name": "Title",
"data": [
{
"html": "Die Enterprise Search Appliance"
}
]
},
{
"id": "content",
"name": "content",
"data": [
{
"html": "agieren zu können.\n<em>Mindbreeze</em> InSpire hilft Ihnen...Enterprise Search Appliance\n<em>Mindbreeze</em> InSpire kommt zu...Hardware samt Suchsoftware. \n<em>Mindbreeze</em> analysiert strukturierte und...GSA-Konfiguration in <em>Mindbreeze</em> InSpire <em>Mindbreeze</em> InSpire unterstützt alle"
}
]
}
],
"order": {
"num": 3623666438
},
"group": {
"str": "html"
}
},
…
Es ist auch möglich Ergebnisse unter Berücksichtigung der Zeitzone abzufragen. Dabei geben user_context. utc_time_zone_differential_in_seconds die Sekunden zwischen UTC und der aktuellen Zeitzone an. Damit werden die angezeigten Daten sowie die Datumsfilter an die Zeitzone angepasst. Für mitteleuropäische Sommerzeit gibt man 7200 an. In unserem Beispiel wird nach „mindbreeze“ gesucht und es wird die mitteleuropäische Sommerzeit angewandt. Von den Resultaten werden dabei nur das Datum und der Inhalt der Resultate als HTML returniert. Es werden nur die ersten 5 Resultate zurückgegeben. Die Ergebnisse werden nach mes:date sortiert.
{
"query": {
"unparsed": "mindbreeze"
},
"count": 5,
"orderby": "mes:date",
"user_context": {
"utc_time_zone_differential_in_seconds": 7200
},
"properties": [{
"name": "mes:date",
"formats": ["HTML"]
},{
"name": "content",
"formats": ["HTML"]
}]
}
"resultset": {
"results": [
{
"id": "Web:wwwmindbreezecom:https://www.mindbreeze.com/enterprise-search-appliance:",
"location": "aHR0cHM6Ly9pbnNwaXJlcHJvZC5pbnNwaXJlLm1pbmRicmVlemUuY29tOjIzMzMxOjQwNjE=",
"rank_score": 362366.644,
"relevance_score": 0,
"properties": [
{
"id": "mes:date",
"name": "Date",
"data": [
{
"html": "10/11/16 10:46 AM"
}
]
},
{
"id": "content",
"name": "content",
"data": [
{
"html": "all their knowledge.\n<em>Mindbreeze</em> InSpire can help...Enterprise Search Appliance\n<em>Mindbreeze</em> analyzes both structured...the individual contents.\n<em>Mindbreeze</em> InSpire comes to...GSA configuration into <em>Mindbreeze</em> InSpire <em>Mindbreeze</em> InSpire supports all"
}
]
}
],
"order": {
"num": 3623666440
},
"group": {
"str": ""
}
},
"resultset": {
"results": [
{
"id": "Web:wwwmindbreezecom:https://www.mindbreeze.com/enterprise-search-appliance:",
"location": "aHR0cHM6Ly9pbnNwaXJlcHJvZC5pbnNwaXJlLm1pbmRicmVlemUuY29tOjIzMzMxOjQwNjE=",
"rank_score": 362366.644,
"relevance_score": 0,
"properties": [
{
"id": "mes:date",
"name": "Date",
"data": [
{
"html": "10/11/16 12:46 PM"
}
]
},
{
"id": "content",
"name": "content",
"data": [
{
"html": "all their knowledge.\n<em>Mindbreeze</em> InSpire can help...Enterprise Search Appliance\n<em>Mindbreeze</em> analyzes both structured...the individual contents.\n<em>Mindbreeze</em> InSpire comes to...GSA configuration into <em>Mindbreeze</em> InSpire <em>Mindbreeze</em> InSpire supports all"
}
]
}
],
"order": {
"num": 3623666440
},
"group": {
"str": ""
}
},
…
Bei der Suche kann darüber hinaus ein Timeout festgelegt werden. Wird dieses überschritten bricht die Suche ab. timeout_in_seconds legt dabei die Maximaldauer der Suche fest. Die Ergebnisse werden nach mes:date sortiert.
{
"query": {
"unparsed": "mindbreeze"
},
"count": 5,
"orderby": "mes:date",
"timeout_in_seconds": 1,
"properties": [{
"name": "title",
"formats": ["HTML"]
},{
"name": "content",
"formats": ["HTML"]
}]
}
Mit dem Parameter content_sample_length legt man die maximale Länge des Beispieltextes bei Resultaten in Zeichen fest. Wird dieses Überschritten wird der Text am Limit abgeschnitten. Der Standartwert ist auf 100 Zeichen gesetzt.
{
"query": {
"unparsed": "mindbreeze"
},
"count": 5,
"orderby": "mes:date",
"content_sample_length": 2,
"properties": [{
"name": "title",
"formats": ["HTML"]
},{
"name": "content",
"formats": ["HTML"]
}]
}
"resultset": {
"results": [
{
"id": "Web:wwwmindbreezecom:https://www.mindbreeze.com/enterprise-search-appliance:",
"location": "aHR0cHM6Ly9pbnNwaXJlcHJvZC5pbnNwaXJlLm1pbmRicmVlemUuY29tOjIzMzMxOjQwNjE=",
"rank_score": 362366.644,
"relevance_score": 0,
"properties": [
{
"id": "title",
"name": "Title",
"data": [
{
"html": "The Enterprise Search Appliance"
}
]
},
{
"id": "content",
"name": "content",
"data": [
{
"html": "all their knowledge.\n<em>Mindbreeze</em> InSpire can help...Enterprise Search Appliance\n<em>Mindbreeze</em> analyzes both structured...the individual contents.\n<em>Mindbreeze</em> InSpire comes to...GSA configuration into <em>Mindbreeze</em> InSpire <em>Mindbreeze</em> InSpire supports all"
}
]
}
],
"order": {
"num": 3623666440
},
"group": {
"str": ""
}
},
…
Für die Details zum Thema Relevanz gibt es ein weiterführendes Whitepaper. In diesem Abschnitt wird nur auf die Struktur eingegangen.
Mit der Eigenschaft relevance_factors können die einzelnen Relevanzfaktoren, wie z.B. die Aktualität des Treffers, die Nähe der Treffer zueinander im Dokument, etc. eingestellt werden. Von allen Faktorengewichten wird eine Gesamtmenge ermittelt und die einzelnen Paramatern sind dann relativ gewichtet.
Recency | Aktualität |
term_frequency | Häufigkeit der Treffer im Dokument |
doc_frequency | Normierte Häufigkeit relativ zur Dokumentgröße |
term_proximity | Nähe der Begriffe zu einander |
zone_boost_exponent | Gewichtung der Zonen (Metadaten) |
term_boost_exponent | Gewichtung von Term Boostings |
Gewichtung von Dokument Boostings | |
answer_doc_boost_exponent | Gewichtung von Dokument Boostings für Answers (NLQA) |
Mit der Eigenschaft boostings können Boostings auf Eigenschaften oder Metadaten bzw. auf Dokumente gesetzt werden.
Folgendes Boosting betrifft das Metadatum url, Treffer in dieser Eigenschaft werden doppelt gewichtet im Vergleich zu anderen Metadaten/Eigenschaten. Die spezielle Eigenschaft content kann verwendet werden, um den Inhalt des Treffers zu gewichten.
"boostings": [{
"id": "url",
"factor": 2
}]
Zusätzlich zum Boosting auf Basis der id kann auch eine query_expr hinterlegt werden. Dabei werden jene Dokumente geboostet, bei denen dieser Ausdruck zutrifft. Im Beispiel unten werden alle Dokumente um 20 % geboostet deren Eigenschaft extension den Wert png hat.
"boostings": [{
"id": "extension_png_boosting",
"factor": 1.2
"query_expr": {
"label": "extension",
"regex": "^\\Qpng\\E$"
}
}]
Eine weitere Möglichkeit ist, Boostingfaktoren auf Basis von Metadaten zu definieren. Dazu können Ausdrücke mithilfe der Mindbreeze Property Expression Language in property_expr_factor definiert werden.
Im Beispiel unten werden alle Dokumente 5-fach geboostet, deren Metadatum is_critical den Wert "true" hat. Es wird empfohlen, den maximalen Boost-Faktor mithilfe von max_factor anzugeben. Beachten Sie, dass die in property_expr_factor verwendeten Metadaten aggregierbar sein müssen.
"boostings": [{
"property_expr_factor": "is_critical && float(5) || float(1)",
"max_factor": 5.0
}]
Mit der Eigenschaft enable_additive_boosting kann das additive „Document Boosting“ aktiviert werden. Ist das additive Document Boosting deaktiviert (Standardeinstellung), so ist bei mehreren zutreffenden Document Boostings (Boostings mit einer query_expr) nur jenes mit dem höchsten Wert aktiv. Ist das additive Document Boosting aktiviert, so werden alle zutreffenden Document Boostings eines Dokuments addiert (hier sind auch negative Werte möglich).
Im Beispiel unten werden nun durch die Option enable_additive_boosting png Bilder der Datenquelle Web insgesamt 1.3-fach geboostet, alle anderen png-Bilder mit 1.2 und die restlichen Inhalte aus der Web Quelle mit 1.1, alle anderen Treffer werden mit 1.0 gewichtet. Würde die Option nicht aktiviert, würden alle Bilder mit 1.2 gewichtet, unabhängig ob diese von der Datenquelle Web sind.
{
"query": {
"unparsed": "mindbreeze"
},
"count": 5,
"enable_additive_boosting": true
"boostings": [{
"id": "extension_png_boosting",
"factor": 1.2
"query_expr": {
"label": "extension",
"regex": "^\\Qpng\\E$"
}
}, {
"id": "category_Web_boosting",
"factor": 1.1
"query_expr": {
"label": "category",
"regex": "^\\QWeb\\E$"
}
}
]
}
Additive Zone-Boostings können mit der Eigenschaft enable_additive_zone_boosting aktiviert werden. Sind additive Zonen-Boostings deaktiviert (Standardeinstellung), wird nur die Zone mit dem höchsten anwendbaren Boost-Faktor berücksichtigt. Sind additive Zonen-Boostings aktiviert, werden alle übereinstimmenden Zonen für die Berechnung des Boostings berücksichtigt. Dabei sind auch negative Boostings mit Faktoren kleiner als 1 möglich.
Im folgenden Beispiel werden Dokumente, die „mindbreeze“ im Titel enthalten, um den Faktor 1,25 geboostet, Dokumente, die „mindbreeze“ in den Metadaten enthalten, um den Faktor 1,1. Wenn enable_additive_zone_boosting aktiviert ist, werden Dokumente, die „mindbreeze“ sowohl im Titel als auch in den Schlüsselwörtern enthalten, um den Faktor 1,35 aufgewertet. Ist die Option nicht aktiviert, werden sie um den Faktor 1,25 aufgewertet.
{
"query": {
"unparsed": "mindbreeze"
},
"count": 5,
"enable_additive_zone_boosting": true,
"boostings": [{
"id": "title",
"factor": 1.25
},{
"id": "keywords",
"factor": 1.1
}
}
]
}
{
"query": {
"unparsed": "mindbreeze"
},
"count": 5,
"relevance_factors": {
"recency": 15,
"term_frequency": 5,
"doc_frequency": 0,
"term_proximity": 35,
"term_inverse_zone_frequency": 45,
"zone_boost_exponent": 50,
"term_boost_exponent": 50,
"doc_boost_exponent": 100
},
"boostings": [{
"id": "url",
"factor": 2
}],
"term_boost_factor": {
"term_boost_factor": 5,
"ngram_boost_factor": 10,
"congruence_boost_factor": 15,
"distance_boost_reduction": 20
}
,
"properties": [{
"name": "title",
"formats": ["HTML"]
},{
"name": "content",
"formats": ["HTML"]
}]
}
"resultset": {
"results": [
{
"id": "Web:wwwmindbreezecom:https://www.mindbreeze.com/de/inspire-training-feb2017:",
"location": "aHR0cHM6Ly9pbnNwaXJlcHJvZC5pbnNwaXJlLm1pbmRicmVlemUuY29tOjIzMzMxOjM1MTA=",
"rank_score": 42.5325,
"relevance_score": 42.5325,
"properties": [
{
"id": "title",
"name": "Title",
"data": [
{
"html": "<em>Mindbreeze</em> InSpire Training"
}
]
},
{
"id": "content",
"name": "content",
"data": [
{
"html": "<em>Mindbreeze</em> InSpire Training\nDauer...Februar 2017\nOrt: <em>Mindbreeze</em> Academy, Honauerstraße 2...direkt von den <em>Mindbreeze</em>-Experten alles über...wichtigsten Neuerungen von <em>Mindbreeze</em> InSpire. Wir freuen...der Welt von <em>Mindbreeze</em> vertraut gemacht. Die"
}
]
}
],
"order": {
"num": 425325
},
"group": {
"str": ""
}
},
{
"id": "Web:wwwmindbreezecom:https://www.mindbreeze.com/de/inspire-training-nov2017:",
"location": "aHR0cHM6Ly9pbnNwaXJlcHJvZC5pbnNwaXJlLm1pbmRicmVlemUuY29tOjIzMzMxOjM1MTY=",
"rank_score": 42.5325,
"relevance_score": 42.5325,
"properties": [
{
"id": "title",
"name": "Title",
"data": [
{
"html": "<em>Mindbreeze</em> InSpire Training"
}
]
},
{
"id": "content",
"name": "content",
"data": [
{
"html": "<em>Mindbreeze</em> InSpire Training\nDauer...November 2017\nOrt: <em>Mindbreeze</em> Academy, Honauerstraße 2...direkt von den <em>Mindbreeze</em>-Experten alles über...wichtigsten Neuerungen von <em>Mindbreeze</em> InSpire. Wir freuen...der Welt von <em>Mindbreeze</em> vertraut gemacht. Die"
}
]
}
],
"order": {
"num": 425325
},
"group": {
"str": ""
}
},
{
"id": "Web:wwwmindbreezecom:https://www.mindbreeze.com/de/inspire-training-nov2016:",
"location": "aHR0cHM6Ly9pbnNwaXJlcHJvZC5pbnNwaXJlLm1pbmRicmVlemUuY29tOjIzMzMxOjM1MTg=",
"rank_score": 42.5325,
"relevance_score": 42.5325,
"properties": [
{
"id": "title",
"name": "Title",
"data": [
{
"html": "<em>Mindbreeze</em> InSpire Training"
}
]
},
{
"id": "content",
"name": "content",
"data": [
{
"html": "<em>Mindbreeze</em> InSpire Training\nDauer...November 2016\nOrt: <em>Mindbreeze</em> Academy, Honauerstraße 2...direkt von den <em>Mindbreeze</em>-Experten alles über...wichtigsten Neuerungen von <em>Mindbreeze</em> InSpire. Wir freuen...der Welt von <em>Mindbreeze</em> vertraut gemacht. Die"
}
]
}
],
"order": {
"num": 425325
},
"group": {
"str": ""
}
},
…
"resultset": {
"results": [
{
"id": "Web:wwwmindbreezecom:https://www.mindbreeze.com/de/developer/basic-indexing:",
"location": "aHR0cHM6Ly9pbnNwaXJlcHJvZC5pbnNwaXJlLm1pbmRicmVlemUuY29tOjIzMzMxOjM5ODg=",
"rank_score": 44.989,
"relevance_score": 44.989,
"properties": [
{
"id": "title",
"name": "Title",
"data": [
{
"html": "Basic Indexing"
}
]
},
{
"id": "content",
"name": "content",
"data": [
{
"html": "von Objekten an <em>Mindbreeze</em>. Sie lernen die...müssen.\nObjekte an <em>Mindbreeze</em> senden Ein Objekt...Facetten \nObjekte an <em>Mindbreeze</em> senden\nUm Objekte...Ihrer Datenquelle an <em>Mindbreeze</em> schicken können. Es...kümmert sich darum?\n<em>Mindbreeze</em> verwendet Crawler, um"
}
]
}
],
"order": {
"num": 449890
},
"group": {
"str": ""
}
},
{
"id": "Web:wwwmindbreezecom:https://www.mindbreeze.com/developer/basic-indexing:",
"location": "aHR0cHM6Ly9pbnNwaXJlcHJvZC5pbnNwaXJlLm1pbmRicmVlemUuY29tOjIzMzMxOjM5OTI=",
"rank_score": 44.9465,
"relevance_score": 44.9465,
"properties": [
{
"id": "title",
"name": "Title",
"data": [
{
"html": "Basic Indexing"
}
]
},
{
"id": "content",
"name": "content",
"data": [
{
"html": "data source to <em>Mindbreeze</em>. You will learn...Send objects to <em>Mindbreeze</em> Send an object Send...Send objects to <em>Mindbreeze</em>\nIn order to be...data source to <em>Mindbreeze</em>. It’s very easy...care of it?\n<em>Mindbreeze</em> uses crawlers to"
}
]
}
],
"order": {
"num": 449465
},
"group": {
"str": ""
}
},
{
"id": "Web:wwwmindbreezecom:https://www.mindbreeze.com/de/inspire-training-feb2017:",
"location": "aHR0cHM6Ly9pbnNwaXJlcHJvZC5pbnNwaXJlLm1pbmRicmVlemUuY29tOjIzMzMxOjM1MTA=",
"rank_score": 43.5325,
"relevance_score": 43.5325,
"properties": [
{
"id": "title",
"name": "Title",
"data": [
{
"html": "<em>Mindbreeze</em> InSpire Training"
}
]
},
{
"id": "content",
"name": "content",
"data": [
{
"html": "<em>Mindbreeze</em> InSpire Training\nDauer...Februar 2017\nOrt: <em>Mindbreeze</em> Academy, Honauerstraße 2...direkt von den <em>Mindbreeze</em>-Experten alles über...wichtigsten Neuerungen von <em>Mindbreeze</em> InSpire. Wir freuen...der Welt von <em>Mindbreeze</em> vertraut gemacht. Die"
}
]
}
],
"order": {
"num": 435325
},
"group": {
"str": ""
}
},
…