Schema erstellen und registrieren

Ein Google Cloud Search-Schema ist eine JSON-Struktur, die die Objekte, Attribute und Optionen für die Indexierung und Abfrage Ihrer Daten definiert. Der Inhaltsconnector liest Daten aus Ihrem Repository und strukturiert und indexiert auf der Grundlage Ihres registrierten Schemas die Daten.

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

In diesem Dokument werden die Grundlagen der Schemaerstellung behandelt. Informationen zur Optimierung des Schemas zur Verbesserung der Sucherfahrung findest du unter Suchqualität verbessern.

Schema erstellen

Führen Sie die folgenden Schritte aus, um Ihr Cloud Search-Schema zu 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 identifizieren

Wenn Sie wissen, welche Arten von Abfragen Ihre Nutzer stellen werden, können Sie Ihre Strategie für das Erstellen des Schemas besser planen.

Wenn Sie beispielsweise Abfragen an eine Filmdatenbank senden, können Sie davon ausgehen, dass der Nutzer eine Anfrage stellt, z. B. „Zeig mir alle Filme mit Robert Redford“. Ihr Schema muss daher Abfrageergebnisse basierend auf „Alle Filme mit einem bestimmten Schauspieler“ unterstützen.

Wenn Sie das Schema so definieren möchten, dass es den Verhaltensmustern Ihrer Nutzer entspricht, können Sie folgende Aufgaben ausführen:

  1. Unterschiedliche Suchanfragen von verschiedenen Nutzern auswerten
  2. Identifizieren Sie die Objekte, die in Abfragen verwendet werden können. Objekte sind logische Sätze zusammengehöriger Daten, z. B. ein Film in einer Filmdatenbank.
  3. Identifizieren Sie die Attribute und Werte, aus denen sich das Objekt zusammensetzt und die in Abfragen verwendet werden können. Attribute sind die indexierbaren Attribute des Objekts. Sie können einfache Werte oder andere Objekte enthalten. Beispielsweise kann ein Filmobjekt Eigenschaften wie den Titel und das Veröffentlichungsdatum als einfache Werte haben. Das Filmobjekt kann auch andere Objekte wie Mitwirkende enthalten, die eigene Eigenschaften wie ihren Namen oder ihre Rolle haben.
  4. Bestimmen Sie gültige Beispielwerte für Attribute. Werte sind die tatsächlichen Daten, die für ein Attribut indexiert wurden. Der Titel eines Films in deiner Datenbank könnte beispielsweise „Raiders of the Lost Ark“ sein.
  5. Legen Sie die gewünschten Sortier- und Rankingoptionen fest. Bei der Abfrage von Filmen möchten Nutzer z. B. chronologisch sortieren und ein Ranking nach Zuschauerbewertung vornehmen, ohne alphabetisch nach Titel sortieren zu müssen.
  6. Optional: Überlegen Sie, ob eine Ihrer Properties einen spezifischeren Kontext darstellt, in dem Suchen ausgeführt werden können, z. B. die Jobrolle oder Abteilung des Nutzers, damit Vorschläge zur automatischen Vervollständigung basierend auf dem Kontext bereitgestellt werden können. Für Nutzer, die in einer Filmdatenbank suchen, sind Nutzer möglicherweise nur an einem bestimmten Genre interessiert. Nutzer würden festlegen, welches Genre sie zurückgeben möchten, z. B. im Rahmen ihres Nutzerprofils. Wenn ein Nutzer dann mit der Eingabe von Filmen beginnt, werden im Rahmen der automatischen Vervollständigung nur Filme in seinem bevorzugten Genre vorgeschlagen, z. B. „Actionfilme“.
  7. Erstellen Sie eine Liste dieser Objekte, Attribute und Beispielwerte, die in Suchen verwendet werden können. Weitere Informationen zur Verwendung dieser Liste finden Sie im Abschnitt Operatoroptionen festlegen.

Datenquelle initialisieren

Eine Datenquelle stellt die Daten aus einem Repository dar, die in Google Cloud indexiert und gespeichert wurden. Eine Anleitung, wie Sie eine Datenquelle initialisieren, finden Sie unter Integration von Drittanbietern.

Die Suchergebnisse eines Nutzers werden aus der Datenquelle zurückgegeben. Wenn ein Nutzer auf ein Suchergebnis klickt, wird er von Cloud Search über die URL, die in der Indexierungsanfrage angegeben ist, zum eigentlichen Element weitergeleitet.

Objekte definieren

Die grundlegende Dateneinheit in einem Schema ist das Objekt. Dies wird als Schemaobjekt bezeichnet und ist eine logische Struktur von Daten. Eine logische Datenstruktur in einer Filmdatenbank ist "Movie". Ein weiteres Objekt könnte „Person“ sein, um die Darsteller und die Crew im Film darzustellen.

Jedes Objekt in einem Schema hat eine Reihe von Eigenschaften 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 einfache Werte oder andere Objekte enthalten.

In Abbildung 1 sehen Sie die Objekte für Filme und Personen sowie die zugehörigen Attribute.

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

Ein Cloud Search-Schema ist im Wesentlichen eine Liste von Objektdefinitionsanweisungen, die im Tag objectDefinitions definiert sind. Das folgende Schema-Snippet zeigt die objectDefinitions-Anweisungen für die Schemaobjekte für Filme und Personen.

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

Wenn Sie ein Schemaobjekt definieren, geben Sie eine name für das Objekt 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, folgt auf den Objektnamen eine Reihe von options und eine Liste von propertyDefinitions. Der options kann zusätzlich aus freshnessOptions und displayOptions bestehen. freshnessOptions wird verwendet, um das Ranking von Suchergebnissen auf der Grundlage 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 Bereich 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"
          }
      ...
      ]
    }
  ]
}

Die PropertyDefinition besteht aus den folgenden Elementen:

  • einen 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 die Property als Suchoperator verwendet wird.
  • Eine oder mehrere displayOptions, z. B. displayLabel im vorherigen Snippet.

Die name eines Attributs muss innerhalb des Objekts, in dem es sich befindet, einmalig sein. Derselbe Name kann jedoch in anderen Objekten und untergeordneten Objekten verwendet werden. In Abbildung 1 wurden der Titel und das Veröffentlichungsdatum des Films zweimal definiert: einmal im movie-Objekt und noch einmal im Unterobjekt filmography des person-Objekts. In diesem Schema wird das Feld movieTitle wiederverwendet, damit 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

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

Berücksichtigen Sie beim Entwickeln eines eigenen Schemas, wie Ihr Repository möglicherweise ähnliche Felder mit Daten enthält, die Sie mehrmals in Ihrem Schema deklarieren möchten.

Typunabhängige Optionen hinzufügen

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

  • isReturnable: Gibt an, ob die Property Daten identifiziert, die über die Query API in den Suchergebnissen zurückgegeben werden sollen. Alle Beispiele für Filmeigenschaften können zurückgegeben werden. Nicht zurückgegebene Properties können für die Suche oder das Ranking von Ergebnissen verwendet werden, ohne dass der Nutzer zurückgegeben wird.
  • isRepeatable: Gibt an, ob für die Property mehrere Werte zulässig sind. Ein Film hat beispielsweise nur ein Veröffentlichungsdatum, kann aber auch mehrere Schauspieler haben.
  • isSortable: Gibt an, dass das Attribut für die Sortierung verwendet werden kann. Dies gilt nicht für Attribute, die wiederholbar sind. Filmergebnisse können beispielsweise 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, bei denen der Nutzer die anfänglichen Ergebnisse sieht und dann Kriterien oder Facets hinzufügt, um diese Ergebnisse weiter zu verfeinern. Diese Option kann für Attribute des Typs „Objekt“ nicht auf „true“ gesetzt werden. Für isReturnable muss jedoch „true“ festgelegt sein. Diese Option wird nur für Aufzählungs-, boolesche und Text-Properties unterstützt. In unserem Beispielschema könnten wir genre, actorName, userRating und mpaaRating für die interaktive Verfeinerung der Suchergebnisse verwenden.
  • isWildcardSearchable gibt an, dass Nutzer eine Platzhaltersuche für diese Property ausführen können. Diese Option ist nur für Texteigenschaften verfügbar. Wie die Platzhaltersuche im Textfeld funktioniert, hängt vom Wert im Feld exactMatchWithOperator ab. Wenn exactMatchWithOperator auf true gesetzt ist, wird der Textwert als ein atomarer Wert tokenisiert und eine Platzhaltersuche wird für ihn ausgeführt. Wenn der Textwert beispielsweise science-fiction lautet, entspricht eine Platzhalterabfrage science-* ihm. Wenn exactMatchWithOperator auf false gesetzt ist, wird der Textwert in Token umgewandelt und eine Platzhaltersuche wird für jedes Token durchgeführt. Wenn der Textwert beispielsweise „Science-Fiction“ lautet, entspricht der Platzhalter sci* oder fi* dem Element, aber science-* nicht.

Diese allgemeinen Suchfunktionsparameter sind boolesche Werte. Sie haben den Standardwert false und müssen auf true gesetzt 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 gesetzt sind:

Attribut isReturnable isRepeatable isSortable isFacetable isWildcardSearchable
movieTitle wahr wahr
releaseDate wahr wahr
genre wahr wahr wahr
duration wahr
actorName wahr wahr wahr wahr
userRating wahr wahr
mpaaRating wahr wahr

Für genre und actorName ist isRepeatable auf true festgelegt, da ein Film zu mehreren Genres gehören kann und darin normalerweise auch mehr als ein Schauspieler mitspielt. Ein Attribut kann nicht sortierbar sein, wenn es wiederholbar ist oder in einem wiederholbaren Unterobjekt enthalten ist.

Typ definieren

Im Abschnitt PropertyDefinition sind mehrere xxPropertyOptions aufgeführt, wobei xx einem bestimmten Typ entspricht, z. B. boolean. Wenn Sie den Datentyp der Property festlegen möchten, müssen Sie das entsprechende Datentypobjekt definieren. Wenn Sie ein Datentypobjekt für ein Attribut definieren, wird der Datentyp für dieses Attribut festgelegt. Wenn Sie beispielsweise textPropertyOptions für das Attribut movieTitle definieren, ist der Filmtitel vom Typ „Text“. Das folgende Snippet zeigt das Attribut movieTitle, wobei textPropertyOptions den Datentyp festlegt.

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

Mit einer Property kann nur ein Datentyp verknüpft sein. In unserem Filmschema kann beispielsweise 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 Beispielfilmschema angegeben werden:

Attribut 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 fiktiven Szenario dieses Filmschemas wird davon ausgegangen, dass Nutzer die Ergebnisse chronologisch sortieren möchten, sodass releaseDate ein Datumsobjekt ist. Wenn es beispielsweise einen erwarteten Anwendungsfall für den Vergleich der Versionen im Dezember mit den Versionen im Januar gab, könnte ein Stringformat hilfreich sein.

Typspezifische Optionen konfigurieren

Im Abschnitt PropertyDefinition finden Sie Links zu den Optionen der einzelnen Typen. Die meisten typspezifischen Optionen sind optional, außer der Liste von possibleValues in der enumPropertyOptions. Außerdem können Sie mit der Option orderedRanking Werte relativ zueinander ranken. Das folgende Snippet zeigt die Eigenschaft movieTitle mit textPropertyOptions, mit der der Datentyp festgelegt wird, und mit der typspezifischen Option retrievalImportance.

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

Hier sehen Sie die zusätzlichen typspezifischen Optionen, 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 typspezifischen Optionen hat jeder Typ eine Reihe optionaler operatorOptions. Diese Optionen beschreiben, wie die Property als Suchoperator verwendet wird. Das folgende Snippet zeigt das Attribut movieTitle, bei dem textPropertyOptions den Datentyp festlegt und die typspezifischen Optionen retrievalImportance und operatorOptions aufweist.

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

Jeder operatorOptions hat einen operatorName, z. B. title für einen movieTitle. Der Operatorname ist der Suchoperator für die Property. Ein Suchoperator ist der tatsächliche Parameter, den Nutzer verwenden sollen, um eine Suche einzugrenzen. Wenn ein Nutzer beispielsweise Filme anhand seines Titels suchen möchte, gibt er title:movieName ein, wobei movieName der Name eines Films ist.

Die Namen der Operatoren müssen nicht mit dem Namen der Property übereinstimmen. Verwenden Sie stattdessen Operatornamen, die die gängigsten 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 Operator auf „Name“ festgelegt werden.

Sie können für mehrere Attribute denselben Operatornamen verwenden, sofern alle Attribute in denselben Typ aufgelöst werden. Wenn Sie während einer Abfrage einen freigegebenen Operatornamen verwenden, werden alle Attribute mit diesem Operator abgerufen. Angenommen, das Filmobjekt hatte die Attribute plotSummary und plotSynopsis und jedes dieser Attribute hatte ein operatorName von plot. Solange beide Attribute Text (textPropertyOptions) sind, werden sie von einer einzelnen Abfrage mit dem Suchoperator plot abgerufen.

Neben operatorName können Attribute, die sortiert werden können, die Felder lessThanOperatorName und greaterThanOperatorName in operatorOptions haben. Mit diesen Optionen können Nutzer Abfragen anhand von Vergleichen mit einem eingereichten Wert erstellen.

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

Beispielsweise könnten Sie Buch- oder Filmobjekte mit Genreeigenschaften indexieren. Zu den Genres können „Science-Fiction“, „Science“ und „Fiction“ gehören. Wenn exactMatchWithOperator auf false gesetzt oder weggelassen wird, werden bei der Suche nach einem Genre oder der Auswahl des Attributs „Science“ (Science) oder „Fiction“ auch Ergebnisse für „Science-Fiction“ zurückgegeben, da der Text tokenisiert ist und die Tokens für Science-Fiction und Fiction in „Science-Fiction“ vorkommen. Wenn exactMatchWithOperator den Wert true hat, wird der Text als einzelnes Token behandelt, sodass weder „Science“ noch „Fiction“ mit „Science-Fiction“ übereinstimmt.

Optional: Fügen Sie den Abschnitt displayOptions hinzu.

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 eines Attributs mithilfe von ObjectDisplayOptions konfiguriert wird, wird dieses Label vor dem Attribut angezeigt. Wenn das Attribut für die Anzeige konfiguriert und displayLabel nicht definiert ist, wird nur der Attributwert angezeigt.

Im folgenden Snippet sehen Sie das Attribut movieTitle, wobei für displayLabel der Wert „Titel“ 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 Objekts movie im Beispielschema:

Attribut 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 eine Property zum Filtern von Vorschlägen für die automatische Vervollständigung definieren. Sie können beispielsweise den Operator genre definieren, um Vorschläge nach dem bevorzugten Filmgenre des Nutzers zu filtern. Wenn der Nutzer dann seine Suchanfrage eingibt, werden nur Vorschläge für Filme angezeigt, die dem bevorzugten Genre entsprechen.

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 Datenquellen-ID erforderlich, die Sie im Schritt Datenquelle initialisieren erhalten haben.

Mithilfe der Datenquellen-ID senden Sie eine UpdateSchema-Anfrage, um Ihr Schema zu registrieren.

Wie auf der Referenzseite UpdateSchema beschrieben, geben Sie die folgende HTTP-Anfrage zum Registrieren des Schemas aus:

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

Verwenden Sie die Option validateOnly, um die Gültigkeit Ihres Schemas zu testen, ohne es tatsächlich zu registrieren.

Daten indexieren

Sobald Ihr Schema registriert ist, können Sie die Datenquelle mithilfe von Index-Aufrufen befüllen. Die Indexierung wird normalerweise im Content-Connector durchgeführt.

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

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

Beachten Sie auch, wie bei der Indexierung der Schema-Property releaseDate untergeordnete Properties von year, month und day verwendet werden, die sie übernehmen, da sie mithilfe von datePropertyOptions als Datentyp date definiert werden. Da year, month und day jedoch nicht im Schema definiert sind, können Sie keine dieser Properties abfragen (z.B. year) einzeln eingeben.

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

Mögliche Indexierungsprobleme identifizieren

Die zwei 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 das Attribut oder Objekt ignoriert wird.

  • Ihre Indexierungsanforderung hat eine Eigenschaft mit einem anderen Typwert als dem im Schema registrierten. 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 Repository für Produktionsdaten registrieren, sollten Sie Tests mit einem kleineren Repository für Testdaten durchführen. Mit einem kleineren Test-Repository können Sie schnell Änderungen an Ihrem Schema vornehmen und die indexierten Daten löschen, ohne dass ein größerer Index oder ein vorhandener Produktionsindex beeinträchtigt wird. Erstellen Sie für ein Testdaten-Repository eine ACL, mit der nur ein Testnutzer autorisiert wird, sodass diese anderen Nutzern nicht in den Suchergebnissen angezeigt werden.

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

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

Mit einer generischen Abfrage testen

Eine allgemeine Abfrage gibt alle Elemente in der Datenquelle zurück, die einen bestimmten String enthalten. Mithilfe einer Suchoberfläche können Sie eine generische Abfrage für eine Filmdatenquelle ausführen, indem Sie das Wort "Titanic" eingeben und die Eingabetaste drücken. Alle Filme, die das Wort „Titan“ enthalten, sollten in den Suchergebnissen angezeigt werden.

Mit Operator testen

Wenn Sie der Abfrage einen Operator hinzufügen, werden die Ergebnisse auf die Elemente beschränkt, die diesem Operatorwert entsprechen. Mit dem Operator actor kannst du beispielsweise nach allen Filmen mit einem bestimmten Schauspieler suchen. Ü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 Eingabetaste drücken. Alle Filme, in denen Zane spielt, sollten in den Suchergebnissen angezeigt werden.

Schema abstimmen

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

  • Indexierung eines Felds, das zuvor nicht indexiert wurde Wenn Nutzer beispielsweise anhand des Regisseurnamens wiederholt 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 den falschen Operatornamen merken, sollten Sie ihn ändern.

Neuindexierung nach einer Schemaänderung

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

  • Namen von Operatoren.
  • Ganzzahlige Minimal- und Maximalwerte.
  • Ranking nach Ganzzahl oder Aufzählung
  • Aktualitätsoptionen.
  • Anzeigeoptionen

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

  • Neue Property oder neues Objekt hinzufügen oder entfernen
  • isReturnable, isFacetable oder isSortable wird von false in true geändert.

Sie sollten isFacetable oder isSortable nur auf true setzen, wenn Sie einen klaren Anwendungsfall benötigen.

Wenn Sie schließlich Ihr Schema durch Markieren eines Attributs isSuggestable aktualisieren, müssen Sie Ihre Daten neu indexieren, was die Verwendung der automatischen Vervollständigung für dieses Attribut verzögert.

Unzulässige Änderungen an Properties

Einige Schemaänderungen sind nicht zulässig, auch wenn Sie Ihre Daten neu indexieren, da dadurch der Index beschädigt wird oder schlechte oder inkonsistente Suchergebnisse erzeugt werden. Dazu gehören Änderungen an:

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

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

Komplexe Schemaänderung vornehmen

Cloud Search verhindert bestimmte Arten von Änderungen in UpdateSchema-Anfragen nach der Indexierung des Repositorys, um Änderungen zu vermeiden, die zu schlechten Suchergebnissen oder einem fehlerhaften Suchindex führen würden. Der Datentyp oder der Name einer Property kann beispielsweise nicht mehr geändert werden, nachdem sie festgelegt wurden. Diese Änderungen können nicht über eine einfache UpdateSchema-Anfrage erreicht werden, selbst wenn Sie Ihre Daten neu indexieren.

In Situationen, in denen Sie eine ansonsten nicht zulässige Änderung an Ihrem Schema vornehmen müssen, können Sie oft eine Reihe von zulässigen Änderungen vornehmen, die denselben Effekt haben. Im Allgemeinen umfasst dies zuerst die Indexierung indexierter Attribute von einer älteren Objektdefinition zu einer neueren und dann das Senden einer Indexierungsanfrage, die nur die neuere Property verwendet.

In den folgenden Schritten wird gezeigt, wie Sie den Datentyp oder -namen einer Property ändern:

  1. Fügen Sie der Objektdefinition in Ihrem Schema eine neue Property hinzu. Verwenden Sie einen anderen Namen als die Property, die Sie ändern möchten.
  2. Senden Sie die UpdateSchema-Anfrage mit der neuen Definition. Denken Sie daran, das gesamte Schema, einschließlich der neuen und der alten Property, in der Anfrage zu senden.
  3. Backfill des Index aus dem Daten-Repository. 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. Suchen Sie beim Indexieren von Backfills nach der neuen Property und verwenden Sie standardmäßig die alte Property, um inkonsistentes Verhalten zu vermeiden.
    2. Führen Sie nach Abschluss des Backfills Testabfragen zur Überprüfung aus.
  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 die Nutzung der alten Property zur neuen. Wenn Sie beispielsweise den Attributnamen von „Ersteller“ zu „Autor“ ändern, müssen Sie Ihren Abfragecode so aktualisieren, dass „Autor“ an der Stelle verwendet wird, an der er zuvor auf „Ersteller“ verwiesen hat.

Cloud Search speichert gelöschte Attribute oder Objekte 30 Tage lang, um unerwartete Indexierungsergebnisse zu vermeiden. Innerhalb dieses 30-Tage-Zeitraums sollten Sie die Nutzung des gelöschten Objekts oder der gelöschten Property entfernen und sie auch in zukünftigen Indexanfragen weglassen. Dadurch wird sichergestellt, dass Sie die Korrektheit Ihres Index wahren können, wenn Sie sich später dazu entschließen, dieses Attribut oder Objekt wieder wiederherzustellen.

Größenbeschränkungen

In 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 Objekte.
  • Die maximale Tiefe einer strukturierten Datenhierarchie beträgt 10 Ebenen.
  • Die Gesamtzahl der Felder in einem Objekt ist auf 1.000 begrenzt. Dies umfasst die Anzahl der primitiven 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 die optimale Abfrageinterpretation

  4. Hier erfahren Sie, wie Sie das _dictionaryEntry-Schema verwenden, 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.