Schema erstellen und registrieren

Ein Google Cloud Search-Schema ist eine JSON-Struktur, die die Objekte, Attribute und Optionen definiert, die bei der Indexierung und Abfrage Ihrer Daten verwendet werden sollen. Der Inhaltsconnector liest Daten aus Ihrem Repository und strukturiert und indexiert die Daten anhand des registrierten Schemas.

Sie können ein Schema erstellen, indem Sie ein JSON-Schemaobjekt für die API bereitstellen und es dann registrieren. Sie müssen für jedes Ihrer Repositories ein Schemaobjekt registrieren, bevor Sie Ihre Daten indexieren können.

In diesem Dokument werden die Grundlagen der Schemaerstellung behandelt. Informationen zum Optimieren des Schemas für eine bessere Suche finden Sie unter Suchqualität verbessern.

Schema erstellen

So erstellen Sie Ihr Cloud Search-Schema:

  1. Erwartetes Nutzerverhalten ermitteln
  2. Datenquelle initialisieren
  3. Schema erstellen
  4. Vollständiges Beispielschema
  5. Schema registrieren
  6. Daten indexieren
  7. Schema testen
  8. Schema optimieren
.

Erwartetes Nutzerverhalten ermitteln

Wenn Sie vorhersehen, welche Arten von Abfragen Ihre Nutzer stellen, können Sie Ihre Strategie für die Erstellung Ihres Schemas festlegen.

Wenn Sie beispielsweise Abfragen für eine Filmdatenbank ausführen, könnten Sie davon ausgehen, dass der Nutzer eine Abfrage wie „Zeig mir alle Filme mit Robert Redford“ stellt. Ihr Schema muss daher Abfrageergebnisse unterstützen, die auf „alle Filme mit einem bestimmten Schauspieler“ basieren.

Führen Sie die folgenden Aufgaben aus, um Ihr Schema so zu definieren, dass es die Verhaltensmuster der Nutzer widerspiegelt:

  1. Evaluieren Sie verschiedene gewünschte Suchanfragen von verschiedenen Nutzern.
  2. Objekte identifizieren, die in Abfragen verwendet werden können Objekte sind logische Sätze verwandter Daten, wie z. B. ein Film in einer Filmdatenbank.
  3. Identifizieren Sie die Attribute und Werte, aus denen das Objekt besteht und die in Abfragen verwendet werden können. Attribute sind die indexierbaren Attribute des Objekts. Sie können primitive Werte oder andere Objekte enthalten. Ein Filmobjekt kann beispielsweise Eigenschaften wie den Filmtitel und das Veröffentlichungsdatum als primitive Werte haben. Das Filmobjekt kann auch andere Objekte mit eigenen Attributen wie Name oder Rolle enthalten, z. B. Mitwirkende.
  4. Ermitteln Sie gültige Beispielwerte für Attribute. Werte sind die tatsächlichen Daten, die für ein Attribut indexiert sind. Beispiel: Der Titel eines Films in Ihrer Datenbank könnte „Raiders of the Lost Ark“ lauten.
  5. Legen Sie die Sortier- und Rankingoptionen fest, die von den Nutzenden gewünscht werden. Wenn Nutzer beispielsweise Filme abfragen möchten, können sie eine chronologische Sortierung und ein Ranking nach Zuschauerbewertung vornehmen und nicht alphabetisch nach Titel sortieren.
  6. (Optional) Überlegen Sie, ob eines Ihrer Attribute einen genaueren Kontext darstellt, in dem Suchanfragen ausgeführt werden können, z. B. die Jobrolle oder Abteilung des Nutzers, damit Vorschläge für die automatische Vervollständigung basierend auf dem Kontext bereitgestellt werden können. Beispielsweise könnten Nutzer, die in einer Datenbank mit Filmen suchen, nur an einem bestimmten Filmgenre interessiert sein. Nutzer definieren, welches Genre bei ihren Suchanfragen zurückgegeben werden soll, möglicherweise im Rahmen ihres Nutzerprofils. Wenn ein Nutzer dann beginnt, eine Filmabfrage einzugeben, werden nur Filme in seinem bevorzugten Genre als Teil der Vorschläge für die automatische Vervollständigung vorgeschlagen, z. B. "Actionfilme".
  7. Erstellen Sie eine Liste dieser Objekte, Attribute und Beispielwerte, die in Suchvorgängen verwendet werden können. Weitere Informationen zur Verwendung dieser Liste finden Sie im Abschnitt Operatoroptionen definieren.

Datenquelle initialisieren

Eine Datenquelle stellt die Daten aus einem Repository dar, die in Google Cloud indexiert und gespeichert wurden. Eine Anleitung zum Initialisieren einer Datenquelle finden Sie unter Datenquellen von Drittanbietern verwalten.

Die Suchergebnisse eines Nutzers werden von der Datenquelle zurückgegeben. Wenn ein Nutzer auf ein Suchergebnis klickt, wird er von Cloud Search über die in der Indexierungsanfrage angegebene URL zum tatsächlichen Element weitergeleitet.

Objekte definieren

Die grundlegende Dateneinheit in einem Schema ist das Objekt, auch als Schemaobjekt bezeichnet. Bei diesem Objekt handelt es sich um eine logische Datenstruktur. Eine logische Datenstruktur in einer Filmdatenbank ist „Film“. Ein weiteres Objekt könnte eine Person sein, die die Darsteller und die Crew repräsentiert.

Jedes Objekt in einem Schema hat eine Reihe von Attributen oder Attributen, die das Objekt beschreiben, z. B. den Titel und die Dauer eines Films oder den Namen und das Geburtsdatum einer Person. Die Eigenschaften eines Objekts können primitive Werte oder andere Objekte enthalten.

Abbildung 1 zeigt die Film- und Personenobjekte sowie die zugehörigen Eigenschaften.

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

Ein Cloud Search-Schema besteht im Wesentlichen aus einer Liste von Objektdefinitionsanweisungen, die im objectDefinitions-Tag definiert sind. Das folgende Schema-Snippet zeigt die objectDefinitions-Anweisungen für die Schemaobjekte „movie“ und „person“.

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

Wenn Sie ein Schemaobjekt definieren, geben Sie einen name für das Objekt an, der unter allen anderen Objekten im Schema eindeutig sein muss. Normalerweise verwenden Sie einen name-Wert, der das Objekt beschreibt, z. B. movie für ein Filmobjekt. Der Schemadienst verwendet das Feld name als Schlüsselkennung für indexierbare Objekte. Weitere Informationen zum Feld name finden Sie unter Objektdefinition.

Objektattribute definieren

Wie in der Referenz zu ObjectDefinition angegeben, folgt auf den Objektnamen ein Satz von options und eine Liste von propertyDefinitions. Die options kann außerdem aus freshnessOptions und displayOptions bestehen. freshnessOptions wird verwendet, um das Suchranking basierend auf der Aktualität eines Elements anzupassen. Mit displayOptions wird definiert, ob bestimmte Labels und Attribute in den Suchergebnissen für ein Objekt angezeigt werden.

Im Abschnitt propertyDefinitions definieren Sie die Attribute für ein Objekt, z. B. den Filmtitel und das Veröffentlichungsdatum.

Das folgende Snippet zeigt das movie-Objekt mit zwei Attributen: movieTitle und releaseDate.

{
  "objectDefinitions": [
    {
      "name": "movie",
      "propertyDefinitions": [
        {
          "name": "movieTitle",
          "isReturnable": true,
          "isWildcardSearchable": 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"
            }
          },
          "displayOptions": {
            "displayLabel": "Release date"
          }
      ...
      ]
    }
  ]
}

Eine PropertyDefinition besteht aus den folgenden Elementen:

  • Ein name-String.
  • Eine Liste mit typunabhängigen Optionen, z. B. isReturnable im vorherigen Snippet.
  • Ein Typ und die zugehörigen typspezifischen Optionen, z. B. textPropertyOptions und retrievalImportance im vorherigen Snippet
  • Ein operatorOptions, das beschreibt, wie das Attribut als Suchoperator verwendet wird.
  • Eine oder mehrere displayOptions, z. B. displayLabel im vorherigen Snippet

Der name eines Attributs muss innerhalb des Objekts, in dem es enthalten ist, eindeutig sein. Derselbe Name kann jedoch auch in anderen Objekten und Unterobjekten verwendet werden. In Abbildung 1 wurden der Titel und das Veröffentlichungsdatum des Films zweimal definiert: einmal im movie-Objekt und einmal im filmography-Unterobjekt des person-Objekts. Für dieses Schema wird das Feld movieTitle wiederverwendet, sodass das Schema zwei Arten von Suchverhalten unterstützen kann:

  • Ergebnisse für Filme anzeigen, wenn Nutzer nach dem Titel eines Films suchen
  • Suchergebnisse für Personen anzeigen, wenn Nutzer nach dem Titel eines Films suchen, in dem ein Schauspieler mitgespielt hat

In ähnlicher Weise verwendet das Schema das Feld releaseDate, da es für die beiden movieTitle-Felder dieselbe Bedeutung hat.

Überlegen Sie bei der Entwicklung Ihres eigenen Schemas, wie Ihr Repository verwandte Felder haben könnte, die Daten enthalten, die Sie mehr als einmal in Ihrem Schema deklarieren möchten.

Typunabhängige Optionen hinzufügen

In der PropertyDefinition sind allgemeine Optionen für Suchfunktionen aufgeführt, die unabhängig vom Datentyp für alle Properties gelten.

  • isReturnable: Gibt an, ob das Attribut Daten identifiziert, die in Suchergebnissen über die Query API zurückgegeben werden sollen. Alle Eigenschaften des Beispielfilms können zurückgegeben werden. Nicht rückgabefähige Attribute können für die Suche oder das Ranking von Ergebnissen verwendet werden, ohne an den Nutzer zurückgegeben zu werden.
  • isRepeatable: Gibt an, ob für das Attribut mehrere Werte zulässig sind. Ein Film hat beispielsweise nur ein Veröffentlichungsdatum, kann aber mehrere Schauspieler haben.
  • isSortable: Gibt an, dass das Attribut zum Sortieren verwendet werden kann. Dies kann nicht für Attribute gelten, die wiederholbar sind. Filmergebnisse können beispielsweise nach Veröffentlichungsdatum oder Zuschauerbewertung sortiert werden.
  • isFacetable: Gibt an, dass das Attribut zum Generieren von Attributen verwendet werden kann. Ein Attribut wird zum Verfeinern der Suchergebnisse verwendet, wobei der Nutzer die ersten Ergebnisse sieht und dann Kriterien oder Attribute hinzufügt, um die Ergebnisse weiter zu verfeinern. Diese Option kann für Properties vom Typ "Objekt" nicht auf "true" gesetzt sein. isReturnable muss "true" sein, um diese Option festzulegen. Diese Option wird nur für Attribute vom Typ „enum“, „Boolesch“ und „Text“ unterstützt. In unserem Beispielschema könnten wir genre, actorName, userRating und mpaaRating als facettierbar festlegen, damit sie zur interaktiven Verfeinerung von Suchergebnissen verwendet werden können.
  • isWildcardSearchable gibt an, dass Nutzer die Platzhaltersuche für dieses Attribut durchführen können. Diese Option ist nur für Texteigenschaften verfügbar. Wie die Platzhaltersuche im Textfeld funktioniert, hängt vom Wert ab, der im Feld exactMatchWithOperator festgelegt wurde. Wenn exactMatchWithOperator auf true gesetzt ist, wird der Textwert als ein atomarer Wert tokenisiert und eine Platzhaltersuche wird ausgeführt. Lautet der Textwert beispielsweise science-fiction, wird eine Platzhalterabfrage science-* damit abgeglichen. Wenn exactMatchWithOperator auf false gesetzt ist, wird der Textwert tokenisiert und eine Platzhaltersuche für jedes Token durchgeführt. Wenn der Textwert beispielsweise "Science-Fiction" lautet, stimmt der Platzhalter sci* oder fi* mit dem Element überein, aber science-* stimmt nicht mit dem Element überein.

Diese Parameter der allgemeinen Suchfunktion sind allesamt boolesche Werte. Sie haben alle den Standardwert false und müssen auf true gesetzt werden, um verwendet werden zu können.

Die folgende Tabelle zeigt die booleschen Parameter, die für alle Attribute des movie-Objekts auf true festgelegt sind:

Property isReturnable isRepeatable isSortable isFacetable isWildcardSearchable
movieTitle true true
releaseDate true true
genre true true true
duration true
actorName true true true true
userRating true true
mpaaRating true true

Für genre und actorName ist isRepeatable auf true festgelegt, da ein Film zu mehreren Genres gehören kann und in der Regel mehr als einen Schauspieler hat. Attribute können nicht sortiert werden, wenn sie wiederholbar sind oder in einem wiederholbaren Unterobjekt enthalten sind.

Typ definieren

In der PropertyDefinition sind mehrere xxPropertyOptions aufgelistet, bei denen xx ein bestimmter Typ ist, z. B. boolean. Um den Datentyp des Attributs festzulegen, müssen Sie das entsprechende Datentypobjekt definieren. Das Definieren eines Datentypobjekts für eine Eigenschaft bestimmt den Datentyp dieser Eigenschaft. Wenn Sie beispielsweise textPropertyOptions für das Attribut movieTitle definieren, weist dies darauf hin, dass der Filmtitel den Typ „Text“ hat. Im folgenden Snippet sehen Sie das Attribut movieTitle, wobei der Datentyp durch textPropertyOptions festgelegt wird.

{
  "name": "movieTitle",
  "isReturnable": true,
  "isWildcardSearchable": true,
  "textPropertyOptions": {
    ...
  },
  ...
},

Einer Property kann nur ein Datentyp zugeordnet sein. Beispielsweise kann in unserem Filmschema releaseDate nur ein Datum sein (z.B. 2016-01-13) oder einen String (z.B. January 13, 2016), aber nicht beides.

Hier sind die Datentypobjekte, mit denen die Datentypen für die Attribute im Beispielschema für Filme angegeben werden:

Property Datentypobjekt
movieTitle textPropertyOptions
releaseDate datePropertyOptions
genre enumPropertyOptions
duration textPropertyOptions
actorName textPropertyOptions
userRating integerPropertyOptions
mpaaRating textPropertyOptions

Welchen Datentyp Sie für die Property auswählen, hängt von den erwarteten Anwendungsfällen ab. Im Szenario dieses Filmschemas wird erwartet, dass Nutzer die Ergebnisse chronologisch sortieren möchten, sodass releaseDate ein Datumsobjekt ist. Wenn beispielsweise ein erwarteter Anwendungsfall für den Vergleich von Dezember-Releases im Laufe der Jahre mit Januar-Releases vorgesehen war, könnte ein String-Format nützlich sein.

Typspezifische Optionen konfigurieren

Im Abschnitt PropertyDefinition finden Sie Links zu den Optionen für die einzelnen Typen. Die meisten typspezifischen Optionen sind optional, mit Ausnahme der Liste von possibleValues im enumPropertyOptions. Außerdem können Sie mit der Option orderedRanking Werte relativ zueinander ranken. Im folgenden Snippet sehen Sie das Attribut movieTitle, wobei textPropertyOptions den Datentyp festlegt und die typspezifische Option retrievalImportance verwendet.

{
  "name": "movieTitle",
  "isReturnable": true,
  "isWildcardSearchable": true,
  "textPropertyOptions": {
    "retrievalImportance": { "importance": "HIGHEST" },
    ...
  },
  ...
}

Hier sind die zusätzlichen typspezifischen Optionen, die im Beispielschema verwendet werden:

Property Typ Typspezifische Optionen
movieTitle textPropertyOptions retrievalImportance
releaseDate datePropertyOptions
genre enumPropertyOptions
duration textPropertyOptions
actorName textPropertyOptions
userRating integerPropertyOptions orderedRanking, maximumValue
mpaaRating textPropertyOptions

Operatoroptionen definieren

Zusätzlich zu den typspezifischen Optionen verfügt jeder Typ über eine Reihe optionaler operatorOptions. Diese Optionen beschreiben, wie das Attribut als Suchoperator verwendet wird. Das folgende Snippet zeigt das Attribut movieTitle, wobei textPropertyOptions den Datentyp festlegt und die typspezifischen Optionen retrievalImportance und operatorOptions verwendet.

{
  "name": "movieTitle",
  "isReturnable": true,
  "isWildcardSearchable": true,
  "textPropertyOptions": {
    "retrievalImportance": { "importance": "HIGHEST" },
    "operatorOptions": {
      "operatorName": "title"
    }
  },
  ...
}

Jedes operatorOptions hat ein operatorName, z. B. title für movieTitle. Der Operatorname ist der Suchoperator für das Attribut. Ein Suchoperator ist der tatsächliche Parameter, den Nutzer verwenden sollen, um eine Suche einzugrenzen. Wenn Sie beispielsweise Filme anhand ihres Titels suchen möchten, gibt der Nutzer title:movieName ein, wobei movieName der Name eines Films ist.

Operatornamen müssen nicht mit dem Namen des Attributs übereinstimmen. Verwenden Sie stattdessen Operatornamen, die die gebräuchlichsten Wörter widerspiegeln, die von Nutzern in Ihrer Organisation verwendet werden. Wenn Ihre Nutzer beispielsweise den Begriff „Name“ anstelle von „Titel“ für einen Filmtitel bevorzugen, sollte der Operatorname auf „Name“ festgelegt werden.

Sie können denselben Operatornamen für mehrere Attribute verwenden, solange alle Attribute in denselben Typ aufgelöst werden. Wenn Sie in einer Abfrage einen gemeinsamen Operatornamen verwenden, werden alle Attribute abgerufen, die diesen Operatornamen verwenden. Angenommen, das Filmobjekt hätte die Attribute plotSummary und plotSynopsis und jedes dieser Attribute hätte den Wert plot für operatorName. Solange beide Attribute Text sind (textPropertyOptions), werden bei einer einzelnen Abfrage mit dem Suchoperator plot beide abgerufen.

Neben operatorName können Attribute, die sortierbar sind, auch die Felder lessThanOperatorName und greaterThanOperatorName in operatorOptions haben. Mit diesen Optionen können Nutzer Abfragen erstellen, die auf Vergleichen mit einem übergebenen Wert basieren.

Schließlich hat textOperatorOptions das Feld exactMatchWithOperator in operatorOptions. Wenn Sie exactMatchWithOperator auf true setzen, muss der Abfragestring mit dem gesamten Attributwert übereinstimmen und nicht nur im Text enthalten sein. Der Textwert wird in Operatorsuchen und Attributübereinstimmungen als ein atomarer Wert behandelt.

Erwägen Sie beispielsweise die Indexierung von Buch- oder Filmobjekten mit Genre-Eigenschaften. Zu den Genres könnten "Science-Fiction", "Science" und "Fiction" gehören. Wenn exactMatchWithOperator auf false gesetzt oder weggelassen wird, würde eine Suche nach einem Genre oder die Auswahl des Attributs „Science“ oder „Fiction“ auch Ergebnisse für „Science-Fiction“ zurückgeben, da der Text tokenisiert ist und die Tokens „Science“ und „Fiction“ in „Science-Fiction“ vorhanden sind. Wenn exactMatchWithOperator den Wert true hat, wird der Text als einzelnes Token behandelt, sodass weder „Science“ noch „Fiction“ mit „Science-Fiction“ übereinstimmt.

Optional: Abschnitt displayOptions hinzufügen

Am Ende jedes propertyDefinition-Abschnitts gibt es einen optionalen displayOptions-Abschnitt. Dieser Abschnitt enthält einen displayLabel-String. displayLabel ist ein empfohlenes, nutzerfreundliches Textlabel für das Attribut. Wenn die Anzeige des Attributs mit ObjectDisplayOptions konfiguriert ist, wird dieses Label vor dem Attribut angezeigt. Wenn das Attribut zur Anzeige konfiguriert ist und displayLabel nicht definiert ist, wird nur der Attributwert angezeigt.

Im folgenden Snippet sehen Sie das Attribut movieTitle mit einem displayLabel, der auf „Titel“ festgelegt ist.

{
  "name": "movieTitle",
  "isReturnable": true,
  "isWildcardSearchable": true,
  "textPropertyOptions": {
    "retrievalImportance": { "importance": "HIGHEST" },
    "operatorOptions": {
       "operatorName": "title"
    }
},
  "displayOptions": {
    "displayLabel": "Title"
  }
},

Im Folgenden sind die displayLabel-Werte für alle Attribute des movie-Objekts im Beispielschema aufgeführt:

Property displayLabel
movieTitle Title
releaseDate Release date
genre Genre
duration Run length
actorName Actor
userRating Audience score
mpaaRating MPAA rating

Optional: Abschnitt „suggestionFilteringOperators[]“ hinzufügen

Am Ende jedes propertyDefinition-Abschnitts befindet sich ein optionaler suggestionFilteringOperators[]-Abschnitt. In diesem Abschnitt können Sie ein Attribut zum Filtern von Vorschlägen für die automatische Vervollständigung definieren. Sie können beispielsweise den Operator genre definieren, um Vorschläge basierend auf dem bevorzugten Filmgenre des Nutzers zu filtern. Wenn der Nutzer dann seine Suchanfrage eingibt, werden nur die Filme, die dem bevorzugten Genre entsprechen, als Teil der Vorschläge für die automatische Vervollständigung angezeigt.

Schema registrieren

Damit strukturierte Daten von Cloud Search-Abfragen zurückgegeben werden, müssen Sie Ihr Schema beim Cloud Search-Schemadienst registrieren. Für die Registrierung eines Schemas ist die ID der Datenquelle erforderlich, die Sie im Schritt Datenquelle initialisieren erhalten haben.

Senden Sie mithilfe der Datenquellen-ID eine UpdateSchema-Anfrage, um Ihr Schema zu registrieren.

Führen Sie die auf der Referenzseite UpdateSchema beschriebene HTTP-Anfrage aus, um Ihr Schema zu registrieren:

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

Der Text Ihrer Anfrage sollte Folgendes enthalten:

{
  "validateOnly": // true or false,
  "schema": {
    // ... Your complete schema object ...
  }
}

Mit der Option validateOnly können Sie die Gültigkeit Ihres Schemas testen, ohne es tatsächlich zu registrieren.

Daten indexieren

Sobald das Schema registriert ist, befüllen Sie die Datenquelle mit Indexaufrufen. Die Indexierung erfolgt normalerweise über Ihren Inhaltsconnector.

Bei Verwendung des Filmschemas würde eine REST API-Indexierungsanfrage für einen einzelnen Film so aussehen:

{
  "name": "datasource/<data_source_id>/items/titanic",
  "acl": {
    "readers": [
      {
        "gsuitePrincipal": {
          "gsuiteDomain": true
        }
      }
    ]
  },
  "metadata": {
    "title": "Titanic",
    "sourceRepositoryUrl": "http://www.imdb.com/title/tt2234155/?ref_=nv_sr_1",
    "objectType": "movie"
  },
  "structuredData": {
    "object": {
      "properties": [
        {
          "name": "movieTitle",
          "textValues": {
            "values": [
              "Titanic"
            ]
          }
        },
        {
          "name": "releaseDate",
          "dateValues": {
            "values": [
              {
                "year": 1997,
                "month": 12,
                "day": 19
              }
            ]
          }
        },
        {
          "name": "actorName",
          "textValues": {
            "values": [
              "Leonardo DiCaprio",
              "Kate Winslet",
              "Billy Zane"
            ]
          }
        },
        {
          "name": "genre",
          "enumValues": {
            "values": [
              "Drama",
              "Action"
            ]
          }
        },
        {
          "name": "userRating",
          "integerValues": {
            "values": [
              8
            ]
          }
        },
        {
          "name": "mpaaRating",
          "textValues": {
            "values": [
              "PG-13"
            ]
          }
        },
        {
          "name": "duration",
          "textValues": {
            "values": [
              "3 h 14 min"
            ]
          }
        }
      ]
    }
  },
  "content": {
    "inlineContent": "A seventeen-year-old aristocrat falls in love with a kind but poor artist aboard the luxurious, ill-fated R.M.S. Titanic.",
    "contentFormat": "TEXT"
  },
  "version": "01",
  "itemType": "CONTENT_ITEM"
}

Der Wert von movie im Feld objectType stimmt mit dem Namen der Objektdefinition im Schema überein. Durch den Abgleich dieser beiden Werte weiß Cloud Search, welches Schemaobjekt während der Indexierung verwendet werden soll.

Beachten Sie auch, wie bei der Indexierung des Schemaattributs releaseDate die untergeordneten Attribute year, month und day verwendet werden, die übernommen werden, da es als Datentyp date definiert wird, indem datePropertyOptions zur Definition verwendet wird. Da year, month und day jedoch nicht im Schema definiert sind, können Sie keine dieser Attribute abfragen (z.B. year).

Beachten Sie auch, wie das wiederholbare Attribut actorName mithilfe einer Liste von Werten indexiert wird.

Mögliche Indexierungsprobleme identifizieren

Die beiden häufigsten Probleme im Zusammenhang mit Schemas und Indexierung sind:

  • Ihre Indexierungsanfrage enthält ein Schemaobjekt oder einen Attributnamen, das nicht beim Schemadienst registriert wurde. Dies führt dazu, dass das Attribut oder das Objekt ignoriert wird.

  • Ihre Indexierungsanfrage enthält ein Attribut mit einem Typwert, der von dem im Schema registrierten Typ abweicht. Dieses Problem führt dazu, dass Cloud Search bei der Indexierung einen Fehler zurückgibt.

Schema mit mehreren Abfragetypen testen

Bevor Sie Ihr Schema für ein großes Produktionsdaten-Repository registrieren, sollten Sie es mit einem kleineren Testdaten-Repository testen. Wenn Sie mit einem kleineren Test-Repository testen, können Sie schnell Anpassungen an Ihrem Schema vornehmen und die indexierten Daten löschen, ohne dass sich dies auf einen größeren Index oder einen vorhandenen Produktionsindex auswirkt. Erstellen Sie für ein Testdaten-Repository eine ACL, die nur einen Testnutzer autorisiert, sodass andere Nutzer diese Daten nicht in den Suchergebnissen sehen können.

Informationen zum Erstellen einer Suchoberfläche zum Validieren von Suchanfragen finden Sie unter Die Suchoberfläche.

Dieser Abschnitt enthält verschiedene Beispielabfragen, mit denen Sie ein Filmschema testen können.

Mit einer generischen Abfrage testen

Bei einer generischen Abfrage werden alle Elemente in der Datenquelle zurückgegeben, die einen bestimmten String enthalten. Mithilfe einer Suchoberfläche können Sie eine generische Abfrage für eine Filmdatenquelle ausführen. Geben Sie dazu das Wort "Titanic" ein und drücken Sie die Eingabetaste. Alle Filme mit dem Wort „Titanic“ sollten in den Suchergebnissen zurückgegeben werden.

Mit einem Operator testen

Wenn Sie der Abfrage einen Operator hinzufügen, werden die Ergebnisse auf die Elemente beschränkt, die diesem Operatorwert entsprechen. Sie können beispielsweise den Operator actor verwenden, um alle Filme zu finden, in denen ein bestimmter Schauspieler mitspielt. Über eine Suchoberfläche können Sie diese Operatorabfrage ausführen, indem Sie einfach ein Operator=Wert-Paar eingeben, z. B. "actor:Zane", und die Eingabetaste drücken. Alle Filme, in denen Zane mitspielt, sollten in den Suchergebnissen zurückgegeben werden.

Schema anpassen

Nachdem das Schema und die Daten verwendet wurden, sollten Sie weiterhin im Blick behalten, was bei Ihren Nutzern funktioniert und was nicht. Sie sollten Ihr Schema für die folgenden Situationen anpassen:

  • Indexierung eines Feldes, das zuvor noch nicht indexiert wurde. Wenn Ihre Nutzer beispielsweise wiederholt anhand des Regisseurnamens nach Filmen suchen, können Sie Ihr Schema so anpassen, dass der Regisseurname als Operator unterstützt wird.
  • Namen von Suchoperatoren basierend auf Nutzerfeedback ändern Operatornamen sollten nutzerfreundlich sein. Wenn sich Ihre Nutzer ständig an den falschen Operatornamen „erinnern“, sollten Sie erwägen, ihn zu ändern.

Neuindexierung nach einer Schemaänderung

Wenn Sie einen der folgenden Werte in Ihrem Schema ändern, müssen Sie die Daten nicht noch einmal indexieren. Sie können einfach eine neue UpdateSchema-Anfrage senden und der Index funktioniert weiterhin:

  • Operatornamen
  • Ganzzahlige Mindest- und Höchstwerte.
  • Ranking nach Ganzzahl und Aufzählung.
  • Aktualisierungsoptionen.
  • Anzeigeoptionen

In den folgenden Änderungen funktionieren zuvor indexierte Daten weiterhin gemäß dem zuvor registrierten Schema. Sie müssen jedoch vorhandene Einträge neu indexieren, um Änderungen basierend auf dem aktualisierten Schema zu sehen, wenn dieses folgende Änderungen enthält:

  • Neue Eigenschaften oder Objekte hinzufügen oder entfernen
  • isReturnable, isFacetable oder isSortable von false in true ändern.

Sie sollten isFacetable oder isSortable nur dann auf true festlegen, wenn Sie einen eindeutigen Anwendungsfall haben und dies unbedingt erforderlich ist.

Wenn Sie schließlich das Schema durch Markieren eines Attributs isSuggestable aktualisieren, müssen Sie Ihre Daten neu indexieren. Dies führt zu einer Verzögerung bei der Verwendung der automatischen Vervollständigung für dieses Attribut.

Unzulässige Property-Änderungen

Einige Schemaänderungen sind nicht zulässig, selbst wenn Sie Ihre Daten neu indexieren, da sie den Index beschädigen oder schlechte oder inkonsistente Suchergebnisse liefern. Dazu gehören Änderungen an:

  • Property-Datentyp.
  • Attributnamen
  • exactMatchWithOperator-Einstellung.
  • retrievalImportance-Einstellung.

Es gibt jedoch eine Möglichkeit, diese Einschränkung zu umgehen.

Komplexe Schemaänderungen vornehmen

Nach der Indexierung des Repositorys werden in Cloud Search bestimmte Änderungen in UpdateSchema-Anfragen verhindert. So vermeiden Sie Änderungen, die schlechte Suchergebnisse oder einen fehlerhaften Suchindex generieren. Beispielsweise können der Datentyp oder der Name eines Attributs nicht mehr geändert werden, nachdem sie festgelegt wurden. Diese Änderungen können nicht über eine einfache UpdateSchema-Anforderung vorgenommen werden, selbst wenn Sie Ihre Daten neu indexieren.

In Situationen, in denen Sie eine ansonsten nicht zugelassene Änderung an Ihrem Schema vornehmen müssen, können Sie häufig eine Reihe zulässiger Änderungen vornehmen, die dieselbe Wirkung erzielen. Im Allgemeinen umfasst dies zuerst die Migration indexierter Attribute von einer älteren zu einer neueren Objektdefinition und das Senden einer Indexierungsanfrage, die nur das neuere Attribut verwendet.

Die folgenden Schritte zeigen, wie Sie den Datentyp oder den Namen einer Eigenschaft ändern:

  1. Fügen Sie der Objektdefinition in Ihrem Schema eine neue Eigenschaft hinzu. Verwenden Sie einen anderen Namen als das Attribut, das Sie ändern möchten.
  2. Führen Sie mit der neuen Definition die Anforderung UpdateSchema aus. Denken Sie daran, in der Anfrage das gesamte Schema zu senden, einschließlich des neuen und alten Attributs.
  3. Backfill des Index aus dem Daten-Repository. Senden Sie zum Backfill des Index alle Indexierungsanfragen mit dem neuen Attribut, jedoch nicht mit dem alten Attribut, da dies dazu führen würde, dass Abfrageübereinstimmungen doppelt gezählt werden.

    1. Prüfen Sie während des Index-Backfills, ob das neue Attribut vorhanden ist, und verwenden Sie standardmäßig das alte, um ein inkonsistentes Verhalten zu vermeiden.
    2. Führen Sie nach Abschluss des Backfills Testabfragen zur Überprüfung aus.
  4. Löschen Sie das alte Attribut. Senden Sie eine weitere UpdateSchema-Anfrage ohne den alten Attributnamen und verwenden Sie ihn bei zukünftigen Indexierungsanfragen nicht mehr.

  5. Migrieren Sie sämtliche Nutzungen der alten Property in die neue Property. Wenn Sie beispielsweise den Attributnamen von „creator“ zu „author“ ändern, müssen Sie den Abfragecode so aktualisieren, dass „author“ verwendet wird, wo zuvor auf „creator“ verwiesen wurde.

Gelöschte Properties oder Objekte werden in Cloud Search 30 Tage lang gespeichert, um zu verhindern, dass sie wiederverwendet werden, die zu unerwarteten Indexierungsergebnissen führen. Innerhalb dieser 30 Tage sollten Sie das gelöschte Objekt oder Attribut nicht mehr verwenden und auch in zukünftigen Indexanfragen auslassen. So können Sie die Richtigkeit des Index beibehalten, falls Sie sich später dazu entschließen, dieses Attribut oder Objekt wieder zu aktivieren.

Größenbeschränkungen kennen

Bei Cloud Search gelten Beschränkungen für die Größe von strukturierten Datenobjekten und Schemas. Diese Limits sind:

  • Es sind maximal 10 Objekte der obersten Ebene zulässig.
  • Die maximale Tiefe einer strukturierten Datenhierarchie beträgt 10 Ebenen.
  • Die Gesamtzahl der Felder in einem Objekt ist auf 1.000 begrenzt. Dazu gehören die Anzahl der einfachen Felder plus die Summe der Felder in jedem verschachtelten Objekt.

Nächste Schritte

Als Nächstes könnten Sie Folgendes tun:

  1. Erstellen Sie eine Suchoberfläche, um Ihr Schema zu testen.

  2. Passen Sie Ihr Schema an, um die Suchqualität zu verbessern.

  3. Schema für eine optimale Abfrageinterpretation strukturieren

  4. Mit dem _dictionaryEntry-Schema können Sie Synonyme für Begriffe definieren, die in Ihrem Unternehmen häufig verwendet werden. Informationen zur Verwendung des Schemas _dictionaryEntry finden Sie unter Synonyme definieren.

  5. Erstellen Sie einen Connector.