Schema erstellen und registrieren

Ein Google Cloud Search-Schema ist eine JSON-Struktur, die die Objekte, Attribute und Optionen definiert, die beim Indexieren und Abfragen Ihrer Daten verwendet werden sollen. Der Inhaltsconnector liest Daten aus Ihrem Repository und strukturiert und indexiert die Daten anhand Ihres registrierten Schemas.

Sie können ein Schema erstellen, indem Sie der API ein JSON-Schemaobjekt 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 dazu, wie Sie Ihr Schema optimieren, um die Suche zu verbessern, finden Sie unter Suchqualität verbessern.

Schema erstellen

Im Folgenden finden Sie eine Liste der Schritte, mit denen Sie Ihr Cloud Search-Schema erstellen:

  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 die Arten von Abfragen Ihrer Nutzer antizipieren, können Sie Ihre Strategie zum Erstellen Ihres Schemas leichter steuern.

Wenn Sie beispielsweise Abfragen an eine Filmdatenbank senden, gehen Sie möglicherweise davon aus, dass der Nutzer eine Abfrage wie "Zeig mir alle Filme mit Robert Redford" durchführt. 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 den Verhaltensmustern Ihrer Nutzer entspricht:

  1. Bewerten Sie verschiedene gewünschte Suchanfragen von verschiedenen Nutzern.
  2. Identifizieren Sie die Objekte, die in Abfragen verwendet werden könnten. Objekte sind logische Sätze verwandter Daten, 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 Attribute wie den Titel und das Veröffentlichungsdatum des Films als primitive Werte haben. Das Filmobjekt kann auch andere Objekte (z. B. Darsteller) mit eigenen Eigenschaften wie Name oder Rolle enthalten.
  4. Ermitteln Sie gültige Beispielwerte für Attribute. Werte sind die tatsächlichen Daten, die für ein Attribut indexiert sind. Der Titel eines Films in Ihrer Datenbank könnte z. B. „Raiders of the Lost Ark“ lauten.
  5. Bestimmen Sie die von Ihren Nutzern gewünschten Sortier- und Rankingoptionen. Wenn Nutzer beispielsweise Filme abfragen, möchten sie möglicherweise chronologisch sortieren und nach Zielgruppenbewertung ordnen. Es ist nicht nötig, sie alphabetisch nach Titel zu sortieren.
  6. Optional: Überlegen Sie, ob eines Ihrer Attribute einen spezifischeren Kontext darstellt, in dem Suchanfragen ausgeführt werden können, z. B. die Jobrolle oder Abteilung des Nutzers, damit auf Grundlage des Kontexts Vorschläge für die automatische Vervollständigung angegeben werden können. Wenn Nutzer beispielsweise in einer Datenbank mit Filmen suchen, sind sie möglicherweise nur an einem bestimmten Filmgenre interessiert. Nutzer legen fest, welches Genre ihre Suchanfragen zurückgeben sollen, möglicherweise als Teil ihres Nutzerprofils. Wenn ein Nutzer dann mit der Eingabe einer Filmabfrage beginnt, werden nur Filme in dessen bevorzugtem Genre, z. B. „Actionfilme“, als Teil der Vorschläge für die automatische Vervollständigung vorgeschlagen.
  7. Erstellen Sie eine Liste dieser Objekte, Attribute und Beispielwerte, die bei Suchen 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 eigentlichen Element weitergeleitet.

Objekte definieren

Die grundlegende Dateneinheit in einem Schema ist das Objekt, das auch als Schemaobjekt bezeichnet wird. Es ist eine logische Datenstruktur. In einer Filmdatenbank ist eine logische Datenstruktur „Film“. Ein anderes könnte die „Person“ sein, die Darsteller und Crew repräsentiert.

Jedes Objekt in einem Schema hat eine Reihe von Eigenschaften oder Attributen zur Beschreibung des Objekts, z. B. Titel und Dauer für einen Film oder Name und Geburtsdatum einer Person. Die Eigenschaften eines Objekts können primitive Werte oder andere Objekte umfassen.

In Abbildung 1 sind die Film- und Personenobjekte und die zugehörigen Attribute zu sehen.

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

Ein Cloud Search-Schema ist im Wesentlichen eine Liste von Anweisungen zur Objektdefinition, die im Tag objectDefinitions 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 dafür eine name an, die 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 in der Objektdefinition.

Objektattribute definieren

Wie in der Referenz zu ObjectDefinition angegeben, folgen auf den Objektnamen eine Reihe von options und eine Liste von propertyDefinitions. Das options kann außerdem aus freshnessOptions und displayOptions bestehen. Mit freshnessOptions wird das Ranking von Suchergebnissen basierend auf der Aktualität eines Elements angepasst. Mit displayOptions können Sie festlegen, ob in den Suchergebnissen für ein Objekt bestimmte Labels und Eigenschaften 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 den beiden Eigenschaften 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, der 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 sich befindet, eindeutig sein. Derselbe Name kann aber in anderen Objekten und Unterobjekten verwendet werden. In Abbildung 1 wurden der Titel und das Veröffentlichungsdatum des Films zweimal definiert: einmal im Objekt movie und einmal im Unterobjekt filmography des Objekts person. Bei diesem Schema wird das Feld movieTitle wiederverwendet, sodass das Schema zwei Arten von Suchverhalten unterstützt:

  • Suchergebnisse 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 wird im Schema das Feld releaseDate wiederverwendet, da es für die beiden movieTitle-Felder dieselbe Bedeutung hat.

Überlegen Sie bei der Entwicklung Ihres eigenen Schemas, ob in Ihrem Repository verwandte Felder mit Daten enthalten sein könnten, 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 aufgelistet, die für alle Attribute gelten, unabhängig vom Datentyp.

  • 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 Properties können für die Suche oder das Ranking von Ergebnissen verwendet werden, ohne dass sie an den Nutzer zurückgegeben werden.
  • isRepeatable: Gibt an, ob mehrere Werte für das Attribut zulässig sind. Beispielsweise hat ein Film nur ein Veröffentlichungsdatum, es können aber mehrere Schauspieler mitspielen.
  • isSortable: Gibt an, dass das Attribut zum Sortieren verwendet werden kann. Dies kann nicht für Attribute gelten, die wiederholbar sind. Beispielsweise können Filmergebnisse nach Veröffentlichungsdatum oder Zuschauerbewertung sortiert werden.
  • isFacetable: Gibt an, dass das Attribut zum Generieren von facets verwendet werden kann. Ein Attribut wird verwendet, um Suchergebnisse zu verfeinern. Dabei sieht der Nutzer die ersten Ergebnisse und fügt dann Kriterien oder Attribute hinzu, um diese Ergebnisse weiter zu verfeinern. Diese Option kann für Attribute des Typs „Objekt“ nicht auf „true“ gesetzt sein. Damit diese Option festgelegt werden kann, muss isReturnable auf „true“ gesetzt sein. Diese Option wird nur für Attribute vom Typ „enum“, „Boolesch“ und „Text“ unterstützt. In unserem Beispielschema könnten Sie beispielsweise genre, actorName, userRating und mpaaRating als facettierbar festlegen, damit sie zur interaktiven Verfeinerung von Suchergebnissen verwendet werden können.
  • isWildcardSearchable gibt an, dass Nutzer für dieses Attribut eine Platzhaltersuche 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. Wenn der Textwert beispielsweise science-fiction ist, wird er von der Platzhalterabfrage science-* abgeglichen. Wenn exactMatchWithOperator auf false gesetzt ist, wird der Textwert tokenisiert und für jedes Token eine Platzhaltersuche ausgeführt. Wenn der Textwert beispielsweise "Science-Fiction" lautet, stimmt die Platzhalterabfrage sci* oder fi* mit dem Element überein, science-* jedoch nicht.

Diese allgemeinen Suchfunktionsparameter sind alle boolesche Werte. Sie haben den Standardwert false und müssen auf true festgelegt werden, damit sie verwendet werden können.

In der folgenden Tabelle sehen Sie die booleschen Parameter, die für alle Attribute des movie-Objekts auf true festgelegt sind:

Attribut 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

Sowohl für genre als auch für actorName ist isRepeatable auf true gesetzt, da ein Film zu mehr als einem Genre gehören und normalerweise mehr als einen Schauspieler hat. Ein Attribut kann nicht sortiert werden, wenn es wiederholbar ist oder in einem wiederholbaren Unterobjekt enthalten ist.

Typ definieren

Im Referenzabschnitt PropertyDefinition sind mehrere xxPropertyOptions aufgelistet, bei denen xx ein bestimmter Typ ist, z. B. boolean. Um den Datentyp der Eigenschaft festzulegen, müssen Sie das entsprechende Datentypobjekt definieren. Durch das Definieren eines Datentypobjekts für ein Attribut wird der Datentyp dieses Attributs festgelegt. Wenn Sie beispielsweise textPropertyOptions für das Attribut movieTitle definieren, bedeutet dies, dass der Filmtitel vom Typ Text ist. Das folgende Snippet zeigt das Attribut movieTitle, wobei textPropertyOptions den Datentyp festlegt.

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

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

Hier sehen Sie die Datentypobjekte, die zum Angeben der Datentypen für die Attribute im Beispielschema verwendet werden:

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

Der Datentyp, den Sie für das Attribut auswählen, hängt von den erwarteten Anwendungsfällen ab. Im erfundenen Szenario dieses Filmschemas sollen Nutzer die Ergebnisse chronologisch sortieren, also ist releaseDate ein Datumsobjekt. Wenn es beispielsweise erwartet wird, dass Dezember-Releases aus verschiedenen Jahren mit Januar-Releases verglichen werden, könnte ein Stringformat nützlich sein.

Typspezifische Optionen konfigurieren

Im Abschnitt PropertyDefinition finden Sie Links zu den Optionen für jeden Typ. Mit Ausnahme der Liste von possibleValues in enumPropertyOptions sind die meisten typspezifischen Optionen optional. Außerdem können Sie mit der Option orderedRanking Werte relativ zueinander ordnen. Das folgende Snippet zeigt das Attribut movieTitle. Dabei legt textPropertyOptions den Datentyp fest und hat die typspezifische Option retrievalImportance.

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

Im Folgenden sind die zusätzlichen typspezifischen Optionen aufgeführt, die im Beispielschema verwendet werden:

Attribut 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 enthält.

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

Jeder operatorOptions hat ein operatorName, z. B. title für eine movieTitle. Der Operatorname ist der Suchoperator für das Attribut. Ein Suchoperator ist der tatsächliche Parameter, den Nutzer voraussichtlich verwenden werden, um eine Suche einzugrenzen. Um beispielsweise Filme anhand ihres Titels zu suchen, gibt der Nutzer title:movieName ein, wobei movieName der Name eines Films ist.

Operatornamen müssen nicht mit dem Namen der Eigenschaft übereinstimmen. Verwenden Sie stattdessen Operatornamen, die die gebräuchlichsten Wörter widerspiegeln, die von Nutzern in Ihrer Organisation verwendet werden. Wenn Ihre Nutzer beispielsweise für einen Filmtitel den Begriff "name" statt "title" 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 während einer Abfrage ein gemeinsamer Operatorname verwendet wird, werden alle Attribute abgerufen, für die dieser Operatorname verwendet wird. Angenommen, das Filmobjekt hat die Attribute plotSummary und plotSynopsis und für jedes dieser Attribute ist als operatorName der Wert plot festgelegt. Wenn beide dieser Attribute Text sind (textPropertyOptions), werden sie bei einer einzelnen Abfrage mit dem Suchoperator plot abgerufen.

Zusätzlich zu operatorName können Attribute, die sortierbar sind, in operatorOptions die Felder lessThanOperatorName und greaterThanOperatorName haben. Nutzer können diese Optionen verwenden, um Abfragen basierend auf Vergleichen mit einem gesendeten Wert zu erstellen.

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

Betrachten Sie beispielsweise die Indexierung von Book- oder Movie-Objekten mit Genreeigenschaften. Zu den Genres könnten „Science-Fiction“, „Science“ und „Fiction“ gehören. Wenn exactMatchWithOperator auf false gesetzt oder weggelassen wird, werden bei der Suche nach einem Genre oder bei der Auswahl der Facette „Science-Fiction“ auch Ergebnisse für „Science-Fiction“ zurückgegeben, da der Text tokenisiert ist und die Tokens „Science“ und „Fiction“ in „Science-Fiction“ vorhanden sind. Wenn exactMatchWithOperator auf true gesetzt ist, 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. Ist die Anzeige eines Attributs mit ObjectDisplayOptions konfiguriert, wird dieses Label vor dem Attribut angezeigt. Wenn das Attribut für die 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 „Title“ festgelegt ist.

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

Im Folgenden finden Sie die displayLabel-Werte für alle Attribute des movie-Objekts im Beispielschema:

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

Optional: Bereich „suggestionFilteringOperators[]“ hinzufügen

Am Ende jedes propertyDefinition-Abschnitts befindet sich der optionale Abschnitt suggestionFilteringOperators[]. In diesem Abschnitt können Sie ein Attribut definieren, mit dem automatisch vervollständigte Vorschläge gefiltert werden. Sie können beispielsweise den Operator genre definieren, um Vorschläge nach dem vom Nutzer bevorzugten Filmgenre zu filtern. Wenn der Nutzer dann eine Suchanfrage eingibt, werden nur die Filme, die seinem bevorzugten Genre entsprechen, als Teil der automatischen Vervollständigungsvorschläge angezeigt.

Schema registrieren

Damit bei Cloud Search-Abfragen strukturierte Daten zurückgegeben werden, müssen Sie Ihr Schema beim Cloud Search-Schemadienst registrieren. Für die Registrierung eines Schemas benötigen Sie die Datenquellen-ID, die Sie im Schritt Datenquelle initialisieren erhalten haben.

Mithilfe der Datenquellen-ID können Sie eine UpdateSchema-Anfrage ausgeben, um das Schema zu registrieren.

Geben Sie wie auf der Referenzseite UpdateSchema beschrieben die folgende 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, können Sie die Datenquelle mithilfe von Index-Aufrufen befüllen. Die Indexierung erfolgt normalerweise über Ihren Inhalts-Connector.

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"
}

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

Beachten Sie auch, wie bei der Indexierung des Schemaattributs releaseDate die untergeordneten Attribute year, month und day verwendet werden. Diese werden übernommen, da sie mithilfe von datePropertyOptions als date-Datentyp definiert werden. Da year, month und day jedoch nicht im Schema definiert sind, können Sie eines dieser Attribute (z.B. year) einzeln.

Außerdem wird das wiederholbare Attribut actorName mithilfe einer Liste von Werten indexiert.

Mögliche Indexierungsprobleme erkennen

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

  • Ihre Indexierungsanforderung enthält ein Schemaobjekt oder einen Attributnamen, der nicht beim Schemadienst registriert wurde. Dieses Problem führt dazu, dass die Eigenschaft oder das Objekt ignoriert wird.

  • Ihre Indexierungsanforderung enthält ein Attribut mit einem Typwert, der sich von dem im Schema registrierten unterscheidet. Dadurch gibt Cloud Search bei der Indexierung einen Fehler zurück.

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. Beim Testen mit einem kleineren Test-Repository 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, damit andere Nutzer diese Daten nicht in den Suchergebnissen sehen.

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

Dieser Abschnitt enthält mehrere verschiedene Beispielabfragen, die Sie zum Testen eines Filmschemas verwenden können.

Mit einer generischen Abfrage testen

Eine generische Abfrage gibt alle Elemente in der Datenquelle zurück, die einen bestimmten String enthalten. Mit einer Suchoberfläche können Sie eine generische Abfrage für eine Filmdatenquelle ausführen, indem Sie das Wort "titanic" eingeben und die "titanic" drücken. 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 eingeschränkt, die diesem Operatorwert entsprechen. So können Sie 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 durchführen, indem Sie einfach ein Operator=Wert-Paar eingeben, z. B. "actor:Zane", und dann die "actor:Zane" drücken. Alle Filme, in denen Zane mitspielt, sollten in den Suchergebnissen angezeigt werden.

Schema optimieren

Nachdem das Schema und die Daten verwendet wurden, sollten Sie weiterhin beobachten, was für Ihre Nutzer funktioniert und was nicht. Sie sollten Ihr Schema für die folgenden Situationen anpassen:

  • Indexieren eines Felds, das 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.
  • Ändern der Namen von Suchoperatoren basierend auf dem Feedback von Nutzern. Operatornamen sollen nutzerfreundlich sein. Wenn sich Ihre Nutzer ständig an den falschen Operatornamen „erinnern“, kann es sinnvoll sein, 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-Anforderung absenden und Ihr Index funktioniert weiterhin:

  • Operatornamen.
  • Ganzzahlige Mindest- und Höchstwerte.
  • Nach Ganzzahl und Enum geordnetes Ranking.
  • Optionen für Aktualität.
  • Anzeigeoptionen

Bei den folgenden Änderungen funktionieren zuvor indexierte Daten weiterhin gemäß dem zuvor registrierten Schema. Vorhandene Einträge müssen jedoch neu indexiert werden, damit Änderungen auf Grundlage des aktualisierten Schemas angezeigt werden, wenn folgende Änderungen enthalten sind:

  • Neue Eigenschaft oder neues Objekt hinzufügen oder entfernen
  • isReturnable, isFacetable oder isSortable von false in true ändern.

Sie sollten isFacetable oder isSortable nur dann auf true setzen, wenn es einen eindeutigen Anwendungsfall gibt und es erforderlich ist.

Wenn Sie Ihr Schema durch Markieren eines Attributs mit 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 erzeugen. Dazu gehören Änderungen an:

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

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

Komplexe Schemaänderung vornehmen

Um Änderungen zu vermeiden, die schlechte Suchergebnisse oder einen fehlerhaften Suchindex generieren, verhindert Cloud Search bestimmte Änderungen in UpdateSchema-Anfragen, nachdem das Repository indexiert wurde. Beispielsweise können der Datentyp oder der Name einer Eigenschaft nicht mehr geändert werden, nachdem sie festgelegt wurden. Diese Änderungen können nicht mit einer einfachen UpdateSchema-Anfrage vorgenommen werden, selbst wenn Sie Ihre Daten neu indexieren.

In Situationen, in denen Sie eine ansonsten zulässige Änderung an Ihrem Schema vornehmen müssen, können Sie häufig eine Reihe zulässiger Änderungen vornehmen, die denselben Effekt erzielen. Dazu müssen Sie im Allgemeinen zuerst indexierte Attribute von einer älteren Objektdefinition in eine neuere Property migrieren und dann eine Indexierungsanfrage senden, bei der nur das neuere Attribut verwendet wird.

Die folgenden Schritte zeigen, wie Sie den Datentyp oder den Namen einer Property ä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 eine UpdateSchema-Anforderung aus. Denken Sie daran, das gesamte Schema, einschließlich des neuen und des alten Attributs, in der Anfrage zu senden.
  3. Backfill für den Index aus dem Daten-Repository ausführen. Senden Sie dazu alle Indexierungsanfragen mit dem neuen Attribut, aber 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 Indexierungs-Backfills, ob das neue Attribut vorhanden ist und verwenden Sie standardmäßig das alte, um inkonsistentes Verhalten zu vermeiden.
    2. Führen Sie nach Abschluss des Backfills Testabfragen aus, um dies zu überprüfen.
  4. Löschen Sie die alte Property. Senden Sie eine weitere UpdateSchema-Anfrage ohne den alten Attributnamen und verwenden Sie ihn in zukünftigen Indexierungsanfragen nicht mehr.

  5. Migrieren Sie jede Verwendung der alten Property zur neuen. Wenn Sie beispielsweise den Attributnamen von „creator“ zu „author“ ändern, müssen Sie Ihren Abfragecode so aktualisieren, dass „author“ dort verwendet wird, wo zuvor auf „creator“ verwiesen wurde.

In Cloud Search werden gelöschte Attribute oder Objekte 30 Tage lang gespeichert, um sie vor Wiederverwendung zu schützen, die zu unerwarteten Indexierungsergebnissen führen würde. Innerhalb dieser 30 Tage sollten Sie das gelöschte Objekt oder die gelöschte Property vollständig verwenden und von zukünftigen Indexanfragen ausschließen. Dadurch wird sichergestellt, dass Sie das Attribut oder Objekt später auf eine Weise wiederherstellen können, die die Richtigkeit Ihres Index aufrechterhalten.

Größenbeschränkungen kennen

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

  • Die maximale Anzahl von Objekten der obersten Ebene beträgt 10 Objekte.
  • Die maximale Tiefe einer strukturierten Datenhierarchie beträgt zehn Ebenen.
  • Die Gesamtzahl der Felder in einem Objekt ist auf 1.000 begrenzt, was die Anzahl der einfachen Felder plus die Summe der Felder in jedem verschachtelten Objekt umfasst.

Nächste Schritte

Als Nächstes könnten Sie Folgendes tun:

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

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

  3. Schema für eine optimale Abfrageinterpretation strukturieren

  4. Hier erfahren Sie, wie Sie mit dem _dictionaryEntry-Schema Synonyme für Begriffe definieren, die in Ihrem Unternehmen häufig verwendet werden. Informationen zur Verwendung des _dictionaryEntry-Schemas finden Sie unter Synonyme definieren.

  5. Erstellen Sie einen Connector.