Suchoberfläche mit der Query API erstellen

Die Query API bietet Ihnen Zugriff auf Methoden für Suchanfragen und Vorschläge, mit denen Sie eine Suchoberfläche erstellen oder mit denen Suchergebnisse in eine Anwendung eingebettet werden können.

Für Webanwendungen mit minimalen Anforderungen können Sie das Such-Widget verwenden. Weitere Informationen zum Erstellen einer Suchoberfläche mit dem Such-Widget

Suchoberfläche erstellen

So erstellen Sie eine einfache Suchoberfläche:

  1. Suchanwendung konfigurieren
  2. OAuth-Anmeldedaten für die Anwendung generieren
  3. Index abfragen
  4. Abfrageergebnisse anzeigen lassen

Sie können die Suchoberfläche mit Funktionen wie Paginieren, Sortieren, Filtern, Facetten und automatischen Vorschlägen weiter optimieren.

Suchanwendung konfigurieren

Sie müssen mindestens eine Suchanwendung erstellen, die mit jeder Suchoberfläche verknüpft werden muss, die Sie erstellen. Eine Suchanwendung stellt die Standardparameter für eine Abfrage bereit, z. B. die zu verwendenden Datenquellen, die Sortierreihenfolge, die Filter und die abzufragenden Facetten. Bei Bedarf können Sie diese Parameter mithilfe der Query API überschreiben.

Weitere Informationen finden Sie im Hilfeartikel Suche in Cloud Search anpassen.

OAuth-Anmeldedaten für die Anwendung generieren

Zusätzlich zu den Schritten im Artikel Zugriff auf die Google Cloud Search API konfigurieren müssen Sie auch OAuth-Anmeldedaten für die Webanwendung generieren. Der Typ der Anmeldedaten hängt vom Kontext ab, in dem die API verwendet wird.

Fordern Sie mithilfe der Anmeldedaten im Namen der Nutzer die Autorisierung an. Verwenden Sie dabei den Bereich https://www.googleapis.com/auth/cloud_search.query.

Weitere Informationen zu den OAuth-Optionen und Clientbibliotheken finden Sie auf der [Google Identity Platform](https://developers.google.com/identity/choose-auth{: .external target="_blank"}.

Index abfragen

Führen Sie beim Autorisieren mithilfe der Methode search Suchanfragen im Index durch.

Jede Anfrage muss zwei Informationen enthalten: eine Textabfrage (query), mit der Elemente abgeglichen werden, und einen Wert für searchApplicationId, also die ID der zu verwendenden Suchanwendung.

Im folgenden Snippet wird eine Abfrage der Filmdatenquelle für den Film „Titanic“ gezeigt:

{   "query": "titanic",   "requestOptions": {     "searchApplicationId": "searchapplications/<search_app_id>"   }, } 

Abfrageergebnisse anzeigen

Es wird erwartet, dass in Suchoberflächen mindestens das Element title sowie ein Link zum ursprünglichen Element angezeigt wird. Sie können die Anzeige von Suchergebnissen optimieren, indem Sie zusätzliche Informationen in diesen Ergebnissen nutzen, z. B. Snippets und Metadaten.

Zusätzliche Ergebnisse verarbeiten

Standardmäßig gibt Cloud Search zusätzliche Ergebnisse zurück, wenn es nicht genügend Ergebnisse für die Anfrage des Nutzers gibt. Das Feld queryInterpretation in der Antwort gibt an, wann zusätzliche Ergebnisse zurückgegeben werden. Wenn nur zusätzliche Ergebnisse zurückgegeben werden, wird InterpretationType auf REPLACE festgelegt. Wenn einige Ergebnisse für die ursprüngliche Anfrage zusammen mit zusätzlichen Ergebnissen zurückgegeben werden, wird InterpretationType auf BLEND gesetzt. In beiden Fällen gilt: QueryInterpretation.Reason = NOT_ENOUGH_RESULTS_FOUND_FOR_USER_QUERY.

Wenn einige zusätzliche Ergebnisse zurückgegeben werden, sollten Sie einen Text einfügen, der darauf hinweist. Bei einem REPLACE könnten Sie beispielsweise den String „Ihre Suche nach Ihrer ursprünglichen Anfrage hat keine Ergebnisse geliefert. Wir zeigen Ergebnisse für ähnliche Suchanfragen.“

Im Fall eines BLEND können Sie den String „Ihre Suche nach Ihrer ursprünglichen Anfrage hat nicht genügend Ergebnisse geliefert. Enthält Ergebnisse für ähnliche Anfragen.“

Ergebnisse für Personen verarbeiten

Cloud Search gibt zwei Arten von „Personenergebnissen“ zurück: Dokumente, die sich auf eine Person beziehen, deren Name in der Anfrage verwendet wird, und Mitarbeiterinformationen für eine Person, deren Name in einer Anfrage verwendet wird. Der zweite Ergebnistyp ist eine Funktion der Funktion „Personensuche“ von Cloud Search. Die Ergebnisse für eine solche Anfrage finden Sie im Feld structuredResults einer Query API-Antwort:

{   "results": [...],   "structuredResults": [{     "person": {...}   }] } 

Abgleich direkt unterstellter Mitarbeiter

„Direct Reports Matching“ ist eine Funktion von Cloud Search People Search, mit der Nutzer die direkten unterstellten Mitarbeiter einer Person in ihrer Organisation sehen können. Das Ergebnis ist im Feld structuredResults verfügbar.

Bei Anfragen zum Vorgesetzten oder zu direkt unterstellten Mitarbeitern einer Person enthält die Antwort ein assistCardProtoHolder innerhalb von structuredResults. Das assistCardProtoHolder hat ein Feld namens cardType, das RELATED_PEOPLE_ANSWER_CARD entspricht. Die assistCardProtoHolder enthält eine Karte mit dem Namen relatedPeopleAnswerCard, die die eigentliche Antwort enthält. Es enthält subject (die Person, die in der Anfrage enthalten war) und relatedPeople, die die Menge der Personen sind, die mit dem Thema in Verbindung stehen. Das Feld relationType gibt den Wert MANAGER oder DIRECT_REPORTS zurück.

Der folgende Code zeigt ein Beispiel für eine Antwort auf eine Abfrage, die mit direkten unterstellten Mitarbeitern übereinstimmt:

{   "results": [],   "structuredResults": [{     "assistCardProtoHolder": {       "extensions": {         "@type": "type.googleapis.com/enterprise.topaz.sidekick.AssistCardProto",         "cardMetadata": {           "cardCategory": "ANSWER"         },         "cardType": "RELATED_PEOPLE_ANSWER_CARD",         "relatedPeopleAnswerCard": {           "subject": {             "email": "[email protected]",             "displayName": "Adam Stanford"             "manager": {               "email": "[email protected]"             }           },           "relatedPeople": [{             "email": "[email protected]",             "displayName": "Edgar Mountain Ramirez"           }, {             "email": "[email protected]",             "displayName": "Francisco Jose Martinez"           }],           "relationType": "DIRECT_REPORTS",         }       }     }   }] } 

Optimierungen deaktivieren, einschließlich zusätzlicher Ergebnisse

Standardmäßig sind Optimierungen wie zusätzliche Ergebnisse aktiviert. Sie können jedoch alle Optimierungen oder nur zusätzliche Ergebnisse sowohl auf Ebene der Suchanwendung als auch auf Ebene der Suchanfrage deaktivieren:

Snippets markieren

Bei Elementen mit indexiertem Text oder HTML-Code wird ein Snippet des Inhalts zurückgegeben. Dies hilft Nutzern, die Relevanz des zurückgegebenen Elements zu bestimmen.

Wenn im Snippet Abfragebegriffe vorhanden sind, wird auch mindestens ein Bereich mit den Stellen zurückgegeben, an denen sich die übereinstimmenden Begriffe befinden.

Mit matchRanges lässt sich übereinstimmender Text beim Rendern der Ergebnisse hervorheben. Im folgenden JavaScript-Beispiel wird das Snippet in HTML-Markup konvertiert, wobei jeder übereinstimmende Bereich in ein <span>-Tag eingeschlossen wird.

function highlightSnippet(snippet) {   let text = snippet.snippet;   let formattedText = text;   if (snippet.matchRanges) {     let parts = [];     let index = 0;     for (let match of snippet.matchRanges) {       let start = match.start || 0; // Default to 0 if omitted       let end = match.end;       if (index < start) { // Include any leading text before/between ranges         parts.push(text.slice(index, start));       }       parts.push('<span class="highlight">');       parts.push(text.slice(start, end));       parts.push('</span>');       index = end;     }     parts.push(text.slice(index)); // Include any trailing text after last range     formattedText = parts.join('');   }   return formattedText; } 

Bei folgendem Snippet…

{   "snippet": "This is an example snippet...",   "matchRanges": [     {       "start": 11,       "end": 18     }   ] } 

…lautet der resultierende HTML-String:

This is an <span class="highlight">example</span> snippet... 

Angezeigte Metadaten

Mit dem Feld metadata können Sie sich zusätzliche Informationen zum zurückgegebenen Element anzeigen lassen, die für Nutzer relevant sein können. Das Feld metadata enthält die Werte für createTime und updateTime des Elements sowie alle mit dem Element verknüpften strukturierten Daten.

Das Feld displayOptions dient zur Anzeige strukturierter Daten. Das Feld displayOptions enthält das Anzeigelabel für den Objekttyp und eine Reihe von metalines. Jede Metazeile ist der Schemakonfiguration entsprechend ein Array von Anzeigelabels und Wertepaaren.

Zusätzliche Ergebnisse abrufen

Sie können weitere Ergebnisse abrufen, indem Sie das Feld start in der Anfrage auf den gewünschten Offset-Wert festlegen. Außerdem haben Sie die Möglichkeit, die Größe jeder Seite mit dem Feld pageSize anzupassen.

Mithilfe des Felds resultCount können Sie die Anzahl der zurückgegebenen Elemente oder die Seitensteuerelemente aufrufen, mit denen sich in zurückgegebenen Elementen blättern lässt. Je nach Größe der Ergebnismenge wird entweder der tatsächliche Wert oder ein geschätzter Wert angegeben.

Ergebnisse sortieren

Das Feld sortOptions dient dazu, die Reihenfolge der zurückgegebenen Elemente anzugeben. Der Wert sortOptions ist ein Objekt mit zwei Feldern:

  • operatorName: ein Operator für das Attribut der strukturierten Daten, nach dem sortiert werden soll. Bei Attributen mit mehreren Operatoren können Sie nur mit dem wichtigsten Gleichheitsoperator sortieren.
  • sortOrder: die Sortierreihenfolge, entweder ASCENDING oder DESCENDING.

Die Relevanz wird als sekundärer Sortierschlüssel verwendet. Wenn in einer Abfrage keine Sortierreihenfolge angegeben ist, werden die Ergebnisse nur nach Relevanz sortiert.

"sortOptions": {   "operatorName": "priority",   "sortOrder": "DESCENDING" } 

Filter hinzufügen

Zusätzlich zu Abfrageausdrücken lassen sich Suchergebnisse auch mithilfe von Filtern weiter einschränken. Sie können diese sowohl in der Suchanwendung als auch in der Suchanfrage angeben.

Wenn Sie einer Anfrage oder Suchanwendung Filter hinzufügen möchten, fügen Sie sie in das Feld dataSourceRestrictions.filterOptions[] ein.

Es gibt zwei Möglichkeiten, eine Datenquelle weiter zu filtern:

  • Objektfilter, über das Attribut filterOptions[].objectType: So werden übereinstimmende Elemente auf den angegebenen Typ beschränkt. Dies wird in einem benutzerdefinierten Schema definiert.
  • Wertefilter: Hiermit werden übereinstimmende Elemente auf Grundlage eines Abfrageoperators und des bereitgestellten Werts eingeschränkt.

Zusammengesetzte Filter ermöglichen es, mehrere Wertfilter zu logischen Ausdrücken zu kombinieren. Auf diese Art können komplexere Abfragen gestellt werden.

Im Beispiel mit dem Filmschema haben Sie z. B. die Möglichkeit, je nach aktuellem Nutzer eine Altersbeschränkung anzuwenden und die verfügbaren Filme auf Grundlage der MPAA-Bewertung einzuschränken. Diese ist mit der deutschen FSK-Bewertung vergleichbar.

{   "query": "adventure",   "requestOptions": {     "searchApplicationId": "<search_app_id>"   },   "dataSourceRestrictions": [     {       "source": {         "name": "datasources/<data_source_id>"       },       "filterOptions": [         {           "objectType": "movie",           "filter": {             "compositeFilter": {               "logicOperator": "AND"               "subFilters": [                 {                   "compositeFilter": {                   "logicOperator": "OR"                   "subFilters": [                     {                       "valueFilter": {                         "operatorName": "rated",                         "value": {                           "stringValue": "G"                         }                       }                     },                     {                       "valueFilter": {                         "operatorName": "rated",                         "value": {                           "stringValue": "PG"                         }                       }                     }                   ]                 }               ]             }           }         }       ]     }   ] } 

Ergebnisse mithilfe von Facetten verfeinern

Facetten sind indexierte Attribute, also Kategorien. Mithilfe von Facetten können Nutzer Abfragen interaktiv verfeinern und relevante Elemente schneller finden.

Facetten können in der Suchanwendung definiert und durch Einstellungen in der Abfrage überschrieben werden.

Beim Anfordern von Facetten werden in Cloud Search diejenigen Werte der angefragten Attribute ermittelt, die in den übereinstimmenden Elementen vorkommen. In der Antwort werden diese Werte zurückgegeben. Mit ihnen können Sie Filter erstellen, die bei nachfolgenden Abfragen die Ergebnisse eingrenzen.

Die Interaktion mit Facetten verläuft üblicherweise so:

  1. Sie erstellen eine erste Abfrage, in der Sie angeben, welche Attribute in den Facetten-Ergebnissen berücksichtigt werden sollen.
  2. Sie rendern die Such- und Facetten-Ergebnisse.
  3. Der Nutzer wählt mindestens einen Facettenwert aus, um die Ergebnisse zu verfeinern.
  4. Sie wiederholen die Abfrage mit einem Filter, der auf den ausgewählten Werten basiert.

Wenn Sie beispielsweise Filmabfragen nach Jahr und MPAA-Bewertung verfeinern möchten, sollte die Abfrage das Attribut facetOptions berücksichtigen.

"facetOptions": [   {     "sourceName": "datasources/<data_source_id>",     "operatorName": "year"   },   {     "sourceName": "datasources/<data_source_id>",     "operatorName": "rated"   } ] 

Attributergebnisse mit ganzzahligen Feldern

Sie können die Ergebnisse von Anfragen auch mit ganzzahligen Feldern aufteilen. Sie können beispielsweise ein Attribut vom Typ „Ganzzahl“ mit dem Namen book_pages als filterbar markieren, um die Ergebnisse einer Suche nach Büchern mit „100–200“ Seiten einzugrenzen.

Wenn Sie das Schema für das Feld der Ganzzahl-Property einrichten, legen Sie isFacetable auf true fest und fügen Sie der integerPropertyOptions entsprechende Optionen für die Aufteilung in Klassen hinzu. So wird sichergestellt, dass für jede Property mit Ganzzahlfacetten Standardoptionen für die Bucket-Erstellung definiert sind.

Wenn Sie die Logik für die Bucket-Optionen definieren, geben Sie ein Array mit inkrementellen Werten an, die Bereiche darstellen. Wenn der Endnutzer beispielsweise Bereiche als 2, 5, 10, 100 angibt, werden Facetten für <2, [2-5), [5-10), [10-100) und >=100 berechnet.

Sie können ganzzahlige Facetten überschreiben, indem Sie in der Anfrage dieselben Bucketing-Optionen für facetOptions definieren. Falls erforderlich, verwendet Cloud Search die im Schema definierten Bucket-Optionen, wenn weder in der Suchanwendung noch in der Suchanfrage Facettenoptionen definiert sind. Facetten, die in der Abfrage definiert sind, haben Vorrang vor Facetten, die in der Suchanwendung definiert sind. Facetten, die in der Suchanwendung definiert sind, haben Vorrang vor Facetten, die im Schema definiert sind.

Attributergebnisse nach Dokumentgröße oder Datum filtern

Mit reservierten Operatoren können Sie Suchergebnisse nach der Dateigröße eines Dokuments (in Byte) oder danach eingrenzen, wann ein Dokument erstellt oder geändert wurde. Sie müssen kein benutzerdefiniertes Schema definieren, aber Sie müssen den operatorName-Wert in der FacetOptions Ihrer Suchanwendung angeben.

  • Wenn Sie die Facettierung nach Dokumentgröße vornehmen möchten, verwenden Sie itemsize und definieren Sie die Bucket-Optionen.
  • Wenn Sie nach dem Erstellungsdatum des Dokuments aufteilen möchten, verwenden Sie createddatetimestamp.
  • Wenn Sie die Facettierung nach dem Änderungsdatum des Dokuments vornehmen möchten, verwenden Sie lastmodified.

Facetten-Buckets interpretieren

Das Attribut facetResults in der Antwort auf die Suchanfrage enthält die genaue Filteranfrage des Nutzers im Feld filter für jedes bucket.

Bei Facets, die nicht auf Ganzzahlen basieren, enthält facetResults einen Eintrag für jede angeforderte Eigenschaft. Für jedes Attribut ist eine Liste von Werten oder Bereichen angegeben, sogenannte buckets. Die am häufigsten vorkommenden Werte sind zuerst angegeben.

Wenn ein Nutzer mindestens einen Wert auswählt, nach dem gefiltert werden soll, erstellen Sie eine neue Abfrage mit den ausgewählten Filtern und fragen Sie die API noch einmal ab.

Vorschläge hinzufügen

Mit der Suggest API können Sie eine automatische Vervollständigung von Abfragen implementieren. Die Vorschläge werden auf Grundlage des persönlichen Abfrageverlaufs sowie der Kontakte und deren Dokumentenkorpus gemacht.

Der folgende Aufruf führt beispielsweise dazu, dass der Nutzer Vorschläge für die Teilphrase jo erhält.

{   "query": "jo",   "requestOptions": {     "searchApplicationId": "<search_app_id>",     "peoplePhotoOptions": {       "peoplePhotoUrlSizeInPx": 32     },     "timeZone": "America/Denver"   } } 

Anschließend können Sie die resultierenden Vorschläge in einer für Ihre Anwendung geeigneten Form anzeigen lassen.