Schema erstellen und registrieren

Ein Google Cloud Search-Schema ist eine JSON-Struktur, in der Objekte, Attribute und Optionen zum Indexieren und Abfragen von Daten definiert sind. Ihr Inhaltsconnector verwendet das registrierte Schema, um Repository-Daten zu strukturieren und zu indexieren.

Ein Schema erstellen Sie, indem Sie in der API ein JSON-Schemaobjekt bereitstellen. Sie müssen ein Schema für jedes Repository registrieren, bevor Sie Daten indexieren.

In diesem Dokument werden die Grundlagen der Schemaerstellung behandelt. Informationen zur Optimierung der Suchfunktionen finden Sie unter Suchqualität verbessern.

Schema erstellen

So erstellen Sie ein Cloud Search-Schema:

  1. Zu erwartendes Nutzerverhalten bestimmen
  2. Datenquelle initialisieren
  3. Objekte definieren
  4. Objekt-Attribute definieren
  5. Schema registrieren
  6. Daten indexieren
  7. Schema testen
  8. Schema anpassen

Zu erwartendes Nutzerverhalten bestimmen

Wenn Sie antizipieren, wie Nutzer suchen, können Sie auf dieser Grundlage die Strategie für Ihr Schema festlegen. Bei einer Filmdatenbank könnten Nutzer z. B. nach „Filme mit Robert Redford“ suchen. Ihr Schema muss Abfragen für Filme mit einem bestimmten Schauspieler unterstützen.

So passen Sie Ihr Schema an das Nutzerverhalten an:

  1. Analysieren Sie unterschiedliche Suchanfragen von verschiedenen Nutzern.
  2. Identifizieren Sie logische Datasets oder Objekte, z. B. einen „Film“.
  3. Attribute wie Titel oder Veröffentlichungsdatum identifizieren.
  4. Gültige Werte für Properties wie „Jäger des verlorenen Schatzes“ identifizieren.
  5. Bestimmen Sie die Sortier- und Rankinganforderungen, z. B. chronologische Reihenfolge oder Zuschauerbewertungen.
  6. Kontextbezogene Eigenschaften wie die Jobrolle identifizieren, um Vorschläge zur automatischen Vervollständigung zu verbessern.
  7. Listen Sie diese Objekte, Attribute und Beispielwerte auf. Verwenden Sie diese Liste, um Operatoroptionen festzulegen.

Datenquelle initialisieren

Eine Datenquelle stellt indexierte Repository-Daten dar, die in Google Cloud gespeichert sind. Weitere Informationen finden Sie unter Integration von Drittanbietern. Wenn ein Nutzer auf ein Ergebnis klickt, wird er von Cloud Search über die URL aus der Indexierungsanfrage zum Element weitergeleitet.

Objekte definieren

Das Objekt ist die Grundeinheit eines Schemas. Logische Strukturen wie „Film“ oder „Person“ sind Objekte. Jedes Objekt hat Attribute wie Titel, Dauer oder Name.

Grafik von Schemaverbindungen zwischen Entitäten
Abbildung 1. Beispielschema mit zwei Objekten und einem Unterobjekt

Ein Schema ist eine Liste von Objektdefinitionen im Tag objectDefinitions.

{
  "objectDefinitions": [
    { "name": "movie" },
    { "name": "person" }
  ]
}

Verwenden Sie für jedes Objekt einen eindeutigen Namen, z. B. movie. Der Schemadienst verwendet diese Namen als Schlüssel. Weitere Informationen finden Sie unter ObjectDefinition.

Objektattribute definieren

Definieren Sie Attribute wie Titel und Veröffentlichungsdatum im Abschnitt propertyDefinitions. Verwenden Sie options für freshnessOptions (Ranking) und displayOptions (UI-Labels).

{
  "objectDefinitions": [{
    "name": "movie",
    "propertyDefinitions": [
      {
        "name": "movieTitle",
        "isReturnable": true,
        "textPropertyOptions": {
          "retrievalImportance": { "importance": "HIGHEST" },
          "operatorOptions": { "operatorName": "title" }
        },
        "displayOptions": { "displayLabel": "Title" }
      },
      {
        "name": "releaseDate",
        "isReturnable": true,
        "isSortable": true,
        "datePropertyOptions": {
          "operatorOptions": {
            "operatorName": "released",
            "lessThanOperatorName": "releasedbefore",
            "greaterThanOperatorName": "releasedafter"
          }
        }
      }
    ]
  }]
}

Eine PropertyDefinition enthält:

  • Ein name-String.
  • Typunabhängige Optionen (z.B. isReturnable).
  • Ein Typ und typspezifische Optionen (z.B. textPropertyOptions).
  • operatorOptions für Suchoperatoren.
  • displayOptions für UI-Labels.

Sie können Attributnamen für verschiedene Objekte wiederverwenden. Beispielsweise kann movieTitle sowohl in einem movie-Objekt als auch in der Filmografie eines person-Objekts vorkommen.

Typunabhängige Optionen hinzufügen

Die PropertyDefinition enthält boolesche Optionen zum Konfigurieren der Suchfunktion für eine Property, unabhängig von ihrem Typ. Diese Optionen sind standardmäßig auf false festgelegt und müssen auf true gesetzt werden, damit sie verwendet werden können.

  • isReturnable: Auf true gesetzt, wenn die Attributdaten in Suchergebnissen über die Query API zurückgegeben werden sollen. Nicht rückgabefähige Attribute können für die Suche oder das Ranking verwendet werden, ohne in den Ergebnissen zu erscheinen.
  • isRepeatable: Auf true festlegen, wenn das Attribut mehrere Werte haben kann. Beispielsweise hat ein Film nur ein Veröffentlichungsdatum, es können jedoch mehrere Schauspieler in ihm mitspielen.
  • isSortable: Legen Sie true fest, wenn das Attribut zum Sortieren verwendet werden kann. Darf nicht true sein, wenn isRepeatable true ist oder wenn sich das Attribut in einem wiederholbaren Unterobjekt befindet.
  • isFacetable: Auf true setzen, wenn die Property zum Generieren von Facetten (Attributen zum Verfeinern von Suchergebnissen) verwendet werden kann.
    • Erfordert, dass isReturnable true ist.
    • Wird nur für Attribute vom Typ „Aufzählung“, „Bool“ und „Text“ unterstützt.
  • isWildcardSearchable: Auf true festgelegt, damit Nutzer Platzhaltersuchen für diese Property ausführen können. Diese Option ist nur für Texteigenschaften verfügbar. Das Verhalten hängt von der Einstellung exactMatchWithOperator ab:
    • Wenn exactMatchWithOperator gleich true ist: Der Textwert wird als einzelnes Token behandelt. Eine Abfrage wie science-* stimmt mit dem Wert science-fiction überein.
    • Wenn exactMatchWithOperator den Wert false hat, wird der Textwert in Tokens zerlegt. Eine Anfrage wie sci* oder fi* stimmt mit science-fiction überein, science-* jedoch nicht.

Typ definieren

Legen Sie den Datentyp fest, indem Sie das entsprechende Attributoptions-Objekt definieren (z.B. textPropertyOptions). Verwenden Sie Enums (enumPropertyOptions), wenn Sie alle möglichen Werte kennen. Eine Property kann nur einen Datentyp haben.

Operatoroptionen definieren

operatorOptions beschreibt, wie ein Attribut als Suchoperator funktioniert.

Jeder operatorOptions benötigt einen operatorName (z.B. title). Das ist der Parameter, den Nutzer in Suchanfragen eingeben (z.B. title:titanic). Verwenden Sie intuitive Namen und machen Sie sie Nutzern zugänglich.

Sie können ein operatorName für Properties desselben Typs freigeben. Bei Abfragen mit diesem Namen werden Ergebnisse aus allen übereinstimmenden Properties abgerufen.

Sortierbare Eigenschaften können lessThanOperatorName und greaterThanOperatorName für Vergleichsabfragen enthalten. Bei Texteigenschaften kann exactMatchWithOperator verwendet werden, um den gesamten Wert als einzelnes Token zu behandeln.

Anzeigeoptionen hinzufügen

Der optionale Abschnitt displayOptions enthält einen displayLabel. Dies ist ein nutzerfreundliches Label, das in den Suchergebnissen angezeigt wird.

Operatoren zum Filtern von Vorschlägen hinzufügen

Verwenden Sie suggestionFilteringOperators[], um eine Property zu definieren, mit der Autocomplete-Vorschläge gefiltert werden (z.B. um Filmvorschläge nach dem bevorzugten Genre eines Nutzers zu filtern). Sie können nur einen Filter für Vorschläge definieren.

Schema registrieren

Registrieren Sie Ihr Schema mit dem Schemadienst mithilfe Ihrer Datenquellen-ID. Senden Sie eine UpdateSchema-Anfrage:

PUT https://cloudsearch.googleapis.com/v1/indexing/{name=datasources/*}/schema

Mit validateOnly: true können Sie Ihr Schema testen, ohne es zu registrieren.

Daten indexieren

Nach der Registrierung können Sie die Datenquelle mithilfe von Index-Aufrufen befüllen, in der Regel mit einem Connector.

Beispielanfrage zur Indexierung:

{
  "name": "datasource/<data_source_id>/items/titanic",
  "metadata": {
    "title": "Titanic",
    "objectType": "movie"
  },
  "structuredData": {
    "object": {
      "properties": [{
        "name": "movieTitle",
        "textValues": { "values": ["Titanic"] }
      }]
    }
  },
  "itemType": "CONTENT_ITEM"
}

Schema testen

Testen Sie mit einem kleinen Repository, bevor Sie es in der Produktion einsetzen. Erstellen Sie eine ACL, die die Ergebnisse auf einen Testnutzer beschränkt.

  • Allgemeine Anfrage: Suche nach einem String (z.B. „titanic“), um alle übereinstimmenden Elemente zu sehen.
  • Operatoranfrage: Verwenden Sie einen Operator (z.B. actor:Zane), um die Ergebnisse zu begrenzen.

Schema anpassen

Behalten Sie das Nutzerfeedback im Blick und passen Sie Ihr Schema entsprechend an. Möglicherweise indexieren Sie neue Felder oder benennen Operatoren um, um sie intuitiver zu gestalten.

Neuindexierung nach einer Schemaänderung

Bei folgenden Änderungen ist keine Neuindexierung erforderlich:

  • Operatornamen
  • Numerische Grenzwerte.
  • Geordnete Rangfolge.
  • Aktualitäts- oder Anzeigeoptionen

Sie müssen neu indexieren für:

  • Eigenschaften oder Objekte hinzufügen oder entfernen
  • isReturnable, isFacetable oder isSortable in true ändern.
  • Markieren einer Property isSuggestable.

Nicht zulässige Attributänderungen

Änderungen, die den Index beschädigen oder zu inkonsistenten Ergebnissen führen, sind nicht zulässig. Dazu gehören:

  • Datentyp oder Name des Attributs.
  • exactMatchWithOperator- oder retrievalImportance-Einstellungen.

Komplexe Schemaänderungen vornehmen

Wenn Sie eine unzulässige Änderung vornehmen möchten, migrieren Sie die Attribute aus einer alten Definition in eine neue:

  1. Fügen Sie dem Schema ein neues Attribut mit einem anderen Namen hinzu.
  2. Registrieren Sie das Schema mit den neuen und den alten Attributen.
  3. Füllen Sie den Index nur mit der neuen Property auf.
  4. Löschen Sie das alte Attribut aus dem Schema.
  5. Aktualisieren Sie den Abfragecode, damit der neue Property-Name verwendet wird.

In Cloud Search werden gelöschte Elemente 30 Tage lang gespeichert, um Probleme bei der Wiederverwendung zu vermeiden.

Größenbeschränkungen

  • Maximal 10 Objekte der obersten Ebene.
  • Maximale Tiefe von 10 Ebenen.
  • Maximal 1.000 Felder pro Objekt (einschließlich verschachtelter Felder).

Nächste Schritte

  1. Erstellen Sie eine Suchoberfläche.
  2. Suchqualität verbessern:
  3. Schema für optimale Abfrageinterpretation strukturieren:
  4. Synonyme definieren: