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. 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 der API ein JSON-Schemaobjekt zur Verfügung stellen 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 ein 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 abstimmen
.

Erwartetes Nutzerverhalten ermitteln

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

Wenn Sie beispielsweise Abfragen für eine Filmdatenbank senden, 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.

Sie können die folgenden Aufgaben ausführen, um Ihr Schema so zu definieren, dass es die Verhaltensmuster Ihrer 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, beispielsweise 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 (z. B. Darsteller) mit eigenen Attributen wie Name oder Rolle enthalten.
  4. Gültige Beispielwerte für Attribute ermitteln Werte sind die tatsächlichen Daten, die für ein Attribut indexiert wurden. Ein Filmtitel in Ihrer Datenbank könnte beispielsweise „Die Räuber des verlorenen Schatzes“ lauten.
  5. Legen Sie die Sortier- und Rankingoptionen fest, die Ihre Nutzer wünschen. Wenn Nutzer beispielsweise Filme abfragen, möchten sie möglicherweise eine chronologische Sortierung und ein Ranking nach Zuschauerbewertung vornehmen. Eine alphabetische Sortierung nach Titel ist nicht erforderlich.
  6. Optional: Überlegen Sie, ob eine Ihrer Properties einen spezifischeren 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 auf Grundlage des Kontexts bereitgestellt werden können. Wenn Nutzer beispielsweise in einer Filmdatenbank suchen, interessieren sie sich möglicherweise nur für ein bestimmtes Filmgenre. Nutzer legen möglicherweise im Rahmen ihres Nutzerprofils fest, welches Genre bei ihren Suchanfragen zurückgegeben werden soll. Wenn ein Nutzer dann beginnt, eine Filmabfrage einzugeben, werden nur Filme in seinem bevorzugten 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 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. Klickt ein Nutzer auf ein Suchergebnis, wird er von Cloud Search über die in der Indexierungsanfrage angegebene URL zum eigentlichen Element weitergeleitet.

Objekte definieren

Die Grundeinheit von Daten in einem Schema ist das Objekt, auch als Schemaobjekt bezeichnet. Das Objekt ist eine logische Datenstruktur. Eine logische Datenstruktur in einer Filmdatenbank ist „Film“. Ein weiteres Objekt ist eine Person, die die Darsteller und die Crew repräsentiert.

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

In Abbildung 1 sehen Sie die Film- und Personenobjekte ("movie" und "person") mit zugehörigen Eigenschaften.

Zeichnung von Schemaverbindungen zwischen Entitäten
Abbildung 1. Ein Beispielschema, das zwei Objekte und ein Unterobjekt zeigt.

Ein Cloud Search-Schema besteht im Wesentlichen aus einer Liste von Objektdefinitionsanweisungen, die im objectDefinitions-Tag definiert werden. 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, wird auf den Objektnamen ein Satz von options und eine Liste von propertyDefinitions folgen. Der options kann weiter aus freshnessOptions und displayOptions bestehen. freshnessOptions werden verwendet, um das Suchranking basierend auf der Aktualität eines Elements anzupassen. Mit displayOptions wird definiert, ob in den Suchergebnissen für ein Objekt bestimmte Labels und Attribute 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 zugehörigen Objekts eindeutig sein. Derselbe Name kann jedoch in anderen Objekten und Unterobjekten verwendet werden. In Abbildung 1 wurden der Filmtitel und das Veröffentlichungsdatum 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:

  • 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

Auf ähnliche 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, ob Ihr Repository verwandte Felder mit Daten haben könnte, die Sie in Ihrem Schema mehrmals deklarieren möchten.

Typunabhängige Optionen hinzufügen

In der PropertyDefinition sind allgemeine Optionen für Suchfunktionen aufgeführt, 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 Beispieleigenschaften für Filme 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. 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. Die Filmergebnisse können z. B. nach dem Veröffentlichungsdatum oder der Altersfreigabe sortiert werden.
  • isFacetable gibt an, dass das Attribut zum Generieren von facets verwendet werden kann. Ein Attribut wird zum Verfeinern der Suchergebnisse verwendet, wobei der Nutzer die ursprünglichen Ergebnisse sieht und dann Kriterien oder Facetten hinzufügt, um die Ergebnisse weiter zu verfeinern. Diese Option kann für Attribute vom Typ "Objekt" nicht auf "true" festgelegt werden. Für isReturnable muss "true" festgelegt sein, damit diese Option festgelegt werden kann. Diese Option wird nur für Enum-, boolesche und Textattribute unterstützt. In unserem Beispielschema könnten wir genre, actorName, userRating und mpaaRating als facettierbar festlegen, damit sie zur interaktiven Verfeinerung der Suchergebnisse verwendet werden können.
  • isWildcardSearchable gibt an, dass Nutzer für diese Property eine Platzhaltersuche ausfü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 ausgeführt. Lautet der Textwert beispielsweise science-fiction, wird die Platzhalterabfrage science-* damit abgeglichen. Wenn exactMatchWithOperator auf false gesetzt ist, wird der Textwert tokenisiert und für jedes Token wird eine Platzhaltersuche ausgeführt. Lautet der Textwert beispielsweise "Science-Fiction", stimmt der Platzhalter sci* oder fi* mit dem Element überein, aber science-* stimmt nicht mit dem Element überein.

Diese Parameter der allgemeinen Suchfunktion sind alle boolesche Werte. Sie haben alle den Standardwert false und müssen auf true gesetzt werden, damit sie verwendet werden 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 ein Schauspieler mitspielt. Attribute können nicht sortierbar sein, wenn sie wiederholbar sind oder in einem wiederholbaren Unterobjekt enthalten sind.

Typ definieren

In der PropertyDefinition sind mehrere xxPropertyOptions aufgeführt, bei denen xx ein bestimmter Typ ist, z. B. boolean. Um den Datentyp der Eigenschaft festzulegen, müssen Sie das entsprechende Datentypobjekt definieren. Wenn Sie ein Datentypobjekt für eine Eigenschaft definieren, wird der Datentyp dieser Eigenschaft festgelegt. Wenn du beispielsweise textPropertyOptions für das Attribut movieTitle definierst, zeigt das an, dass der Filmtitel den Typ Text hat. Das folgende Snippet zeigt das Attribut movieTitle, wobei der Datentyp von 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. Bei diesem Filmschema wird erwartet, dass Nutzer Ergebnisse chronologisch sortieren möchten, sodass releaseDate ein Datumsobjekt ist. Wenn beispielsweise ein erwarteter Anwendungsfall für den Vergleich von Dezember-Versionen über die Jahre mit denen im Januar vorgesehen war, könnte ein String-Format nützlich sein.

Typspezifische Optionen konfigurieren

Im Abschnitt PropertyDefinition finden Sie Informationen 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. Das folgende Snippet zeigt das Attribut movieTitle, wobei textPropertyOptions den Datentyp festlegt und die typspezifische Option retrievalImportance verwendet.

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

Im Folgenden finden Sie 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 werden.

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

Jeder operatorOptions hat ein operatorName, z. B. title für ein 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 beispielsweise Filme anhand ihres Titels gesucht werden sollen, gibt der Nutzer title:movieName ein, wobei movieName der Name eines Films ist.

Operatornamen müssen nicht mit dem Namen des Attributs übereinstimmen. Stattdessen sollten Sie Operatornamen verwenden, die die am häufigsten von Nutzern in Ihrer Organisation verwendeten Wörter widerspiegeln. Wenn Ihre Nutzer beispielsweise den Begriff "name" anstelle von "title" für einen Filmtitel bevorzugen, sollte der Operatorname auf "name" festgelegt werden.

Sie können für mehrere Attribute denselben Operatornamen verwenden, solange alle Attribute in denselben Typ aufgelöst werden. Wenn Sie während 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 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, die Felder lessThanOperatorName und greaterThanOperatorName in operatorOptions haben. Nutzer können diese Optionen verwenden, um Abfragen zu 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.

Sie können beispielsweise Book- oder Movie-Objekte mit Genre-Eigenschaften indexieren. Genres können beispielsweise "Science-Fiction", "Science" und "Fiction" sein. 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 den optionalen Abschnitt displayOptions. Dieser Abschnitt enthält einen displayLabel-String. Das displayLabel ist ein empfohlenes und nutzerfreundliches Textlabel für das Attribut. Wenn die Anzeige des Attributs mithilfe von ObjectDisplayOptions konfiguriert ist, 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, wobei displayLabel auf „Titel“ festgelegt ist.

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

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

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 gibt es einen optionalen 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 eine 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 bei Cloud Search-Abfragen strukturierte Daten zurückgegeben werden, müssen Sie Ihr Schema beim Cloud Search-Schemadienst registrieren. Dafür benötigen Sie die Datenquellen-ID, die Sie im Schritt Datenquelle initialisieren erhalten haben.

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

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

Mit dem Filmschema 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 während der Indexierung verwendet werden soll.

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

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

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, der nicht beim Schemadienst registriert wurde. Dies führt dazu, dass das Attribut oder das Objekt ignoriert wird.

  • Ihre Indexierungsanforderung hat ein Attribut mit einem Typwert, der sich von dem im Schema registrierten Typ unterscheidet. Dies 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, damit andere Nutzer diese Daten nicht in den Suchergebnissen sehen.

Informationen zum Erstellen einer Suchoberfläche, mit der Sie Suchanfragen validieren können, finden Sie unter Die Suchoberfläche.

Dieser Abschnitt enthält mehrere 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 allgemeine Abfrage für eine Filmdatenquelle ausführen. Geben Sie dazu das Wort "titanic" ein und drücken Sie die "titanic". 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 dann die "actor:Zane" drücken. Alle Filme, in denen Zane mitspielt, sollten in den Suchergebnissen angezeigt werden.

Schema abstimmen

Nachdem Ihr Schema und Ihre Daten verwendet werden, beobachten Sie weiter, was bei Ihren Nutzern funktioniert und was nicht. Sie sollten das Schema an die folgenden Situationen anpassen:

  • Indexieren eines Felds, das zuvor noch nicht indexiert wurde. Wenn Ihre Nutzer beispielsweise wiederholt anhand des Regisseurnamens nach Filmen suchen, können Sie das Schema so anpassen, dass der Regisseurname als Operator unterstützt wird.
  • Namen von Suchoperatoren auf Grundlage von Nutzerfeedback ändern Operatornamen sind nutzerfreundlich. 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.
  • Aktualitätsoptionen.
  • Anzeigeoptionen

Bei den folgenden Änderungen funktionieren zuvor indexierte Daten weiterhin gemäß dem zuvor registrierten Schema. Sie müssen vorhandene Einträge jedoch neu indexieren, damit Änderungen basierend auf dem aktualisierten Schema angezeigt werden, wenn es die folgenden Änderungen enthält:

  • 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 festlegen, wenn es für einen eindeutigen Anwendungsfall erforderlich ist.

Wenn Sie schließlich Ihr Schema aktualisieren, indem Sie ein Attribut mit isSuggestable markieren, müssen Sie Ihre Daten neu indexieren. Dadurch kommt es bei der Verwendung der automatischen Vervollständigung für dieses Attribut zu einer Verzögerung.

Unzulässige Property-Änderungen

Einige Schemaänderungen sind nicht zulässig, auch wenn Sie Ihre Daten neu indexieren, da sie den Index zerstören oder zu schlechten oder inkonsistenten Suchergebnissen führen. 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, um Änderungen zu vermeiden, die zu schlechten Suchergebnissen oder einem fehlerhaften Suchindex führen würden. Beispielsweise kann 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.

Wenn 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 Objektdefinition in eine neuere und das Senden einer Indexierungsanfrage, die nur das neuere Attribut verwendet.

So ändern Sie den Datentyp oder den Namen einer Eigenschaft:

  1. Fügen Sie der Objektdefinition in Ihrem Schema ein neues Attribut 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, das gesamte Schema, einschließlich des neuen und alten Attributs, in der Anfrage zu senden.
  3. Backfill des Index aus dem Daten-Repository. Senden Sie zum Backfill des Index alle Indexierungsanfragen mit dem neuen Attribut, nicht jedoch 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 aus, um dies zu überprüfen.
  4. Löschen Sie die alte Property. Senden Sie eine weitere UpdateSchema-Anforderung ohne den alten Attributnamen und verwenden Sie ihn bei zukünftigen Indexierungsanfragen nicht mehr.

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

Gelöschte Attribute und Objekte werden 30 Tage lang in Cloud Search gespeichert, um zu verhindern, dass sie wiederverwendet werden, die zu unerwarteten Indexierungsergebnissen führen. Innerhalb dieser 30 Tage sollten Sie die gelöschten Objekte oder Attribute nicht mehr verwenden und auch bei zukünftigen Indexanfragen weglassen. So sorgen Sie dafür, dass die Richtigkeit Ihres Index gewahrt bleibt, falls Sie sich später dazu entschließen, dieses Attribut oder dieses Objekt wieder zu aktivieren.

Größenbeschränkungen kennen

Bei Cloud Search gelten Einschrä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.
  • 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 das 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 das _dictionaryEntry-Schema nutzen können, um Synonyme für Begriffe zu 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.