Schema erstellen und registrieren

Ein Google Cloud Search-Schema ist eine JSON-Struktur, die die Objekte, Properties und Optionen definiert, die beim Indexieren und Abfragen Ihrer Daten verwendet werden. Der Content-Connector liest Daten aus Ihrem Repository und strukturiert und indexiert die Daten auf der Grundlage des registrierten Schemas.

Zum Erstellen eines Schemas können Sie ein JSON-Schemaobjekt für die API bereitstellen und 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 erläutert. Informationen zur Verbesserung des Schemas zur Verbesserung der Suche 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 identifizieren
  2. Datenquelle initialisieren
  3. Schema erstellen
  4. Vollständiges Beispielschema
  5. Schema registrieren
  6. Daten indexieren
  7. Schema testen
  8. Schema anpassen

Erwartetes Nutzerverhalten ermitteln

Wenn du die Art der von deinen Nutzern durchgeführten Abfragen kennst, kannst du deine Strategie zum Erstellen des Schemas leichter umsetzen.

Wenn du beispielsweise Anfragen an eine Filmdatenbank stellst, kannst du von Suchanfragen wie „Alle Filme mit Robert Redford“ profitieren. Ihr Schema muss also Abfrageergebnisse auf Basis aller Filme mit einem bestimmten Akteur unterstützen.

Wenn Sie Ihr Schema so definieren möchten, dass es das Verhaltensmuster Ihres Nutzers widerspiegelt, können Sie diese Aufgaben ausführen:

  1. Verschiedene verschiedene Anfragen von verschiedenen Nutzern auswerten
  2. Identifizieren Sie die Objekte, die in Abfragen verwendet werden können. Objekte sind logische Sätze zusammengehöriger Daten, beispielsweise ein Film in einer Datenbank mit Filmen.
  3. Identifizieren Sie die Attribute und Werte, aus denen das Objekt besteht, und verwenden Sie es für Abfragen. Attribute sind indexierbare Attribute des Objekts. Sie können einfache Werte oder andere Objekte enthalten. Ein Filmobjekt kann beispielsweise Eigenschaften wie den Titel und das Veröffentlichungsdatum des Films als einfache Werte haben. Das Filmobjekt kann auch andere Objekte enthalten, z. B. Stammmitglieder mit eigenen Eigenschaften, z. B. der Name oder die Rolle.
  4. Beispiele für gültige Werte für Unterkünfte. Werte sind die tatsächlichen Daten, die für ein Attribut indexiert wurden. Zum Beispiel könnte ein Titel in deiner Datenbank der Titel „Raiders of the Lost Ark“ sein.
  5. Bestimmen Sie die Sortier- und Rankingoptionen, die Ihre Nutzer erwarten. Wenn Nutzer z. B. Filme abfragen, können sie chronologisch sortiert und nach Bewertung sortiert werden, ohne sie alphabetisch sortieren zu müssen.
  6. Optional: Überlegen Sie, ob eine Ihrer Properties einen spezifischeren Kontext darstellt, in dem Suchanfragen ausgeführt werden können, z. B. die Nutzerrolle oder -abteilung, damit Vorschläge zur automatischen Vervollständigung auf der Grundlage des Kontexts bereitgestellt werden können. Für Nutzer, die in einer Datenbank mit Filmen suchen, sind Nutzer möglicherweise nur an einem bestimmten Genre der Filme interessiert. Die Nutzer definieren, welches Genre sie zurückgeben möchten, möglicherweise als Teil des Nutzerprofils. Wenn ein Nutzer dann beginnt, eine Suchanfrage nach einem Film einzugeben, werden nur Vorschläge in Filme aus seinem bevorzugten Genre, z. B. Actionfilme, als Vorschläge zur automatischen Vervollständigung vorgeschlagen.
  7. Erstelle eine Liste dieser Objekte, Properties und Beispielwerte, die bei der Suche verwendet werden können. Ausführliche Informationen zur Verwendung dieser Liste findest du im Abschnitt Operatoroptionen definieren.

Datenquelle initialisieren

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

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

Objekte definieren

Die Grundeinheit der Daten in einem Schema ist das Objekt, das als „Schemaobjekt“ bezeichnet wird und eine logische Struktur von Daten ist. In einer Datenbank mit Filmen ist eine logische Struktur aus Daten „&movie“. Es ist auch möglich, den Darsteller und die Crew zu repräsentieren, die an dem Film beteiligt sind.

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 Geburtsdatum einer Person. Die Eigenschaften eines Objekts können Primitive oder andere Objekte enthalten.

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

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

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, das unter allen anderen Objekten im Schema eindeutig sein muss. Normalerweise verwendest du 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 findest du in der Objektdefinition.

Objektattribute definieren

Wie in der Referenz für ObjectDefinition angegeben, folgt auf den Objektnamen eine Gruppe von options und eine Liste von propertyDefinitions. Der options kann weiter aus freshnessOptions und displayOptions bestehen. Mit freshnessOptions wird das Suchranking anhand der Aktualität eines Elements angepasst. Mit displayOptions wird festgelegt, ob bestimmte Labels und Properties in den Suchergebnissen für ein Objekt angezeigt werden.

Im Abschnitt propertyDefinitions definieren Sie die Eigenschaften eines Objekts, z. B. den Filmtitel und das Veröffentlichungsdatum.

Das folgende Snippet zeigt das movie-Objekt mit zwei Properties: 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:

  • Ein name-String.
  • Eine Liste mit typunabhängigen Optionen, wie isReturnable im vorherigen Snippet.
  • Ein Typ und die dazugehö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

Das Attribut name einer Property muss im zugehörigen Objekt eindeutig sein. Der 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 filmography-Unterobjekt des person-Objekts. Bei diesem Schema wird das Feld movieTitle wiederverwendet, sodass das Schema zwei Arten von Suchverhalten unterstützt:

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

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

Bevor Sie ein eigenes Schema erstellen, sollten Sie sich überlegen, wie die Felder im Zusammenhang mit Ihrem Repository Daten enthalten können, die Sie mehr als einmal im Schema angeben möchten.

Typunabhängige Optionen hinzufügen

Unter PropertyDefinition werden allgemeine Optionen für die Suche angezeigt, die für alle Properties gelten (unabhängig vom Datentyp).

  • isReturnable: Gibt an, ob die Property Daten angibt, die in den Suchergebnissen über die Query API zurückgegeben werden sollen. Alle Beispiel-Properties für Filme können zurückgegeben werden. Nicht zurückgegebene 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 für die Property mehrere Werte zulässig sind. Zum Beispiel hat ein Film nur ein Veröffentlichungsdatum, kann aber mehrere Schauspieler haben.
  • isSortable: Gibt an, dass die Property für die Sortierung verwendet werden kann. Dies gilt nicht für Attribute, die wiederholbar sind. Zum Beispiel können Filmergebnisse nach dem Veröffentlichungsdatum oder der Zielgruppenbewertung sortiert werden.
  • isFacetable: Gibt an, dass die Property zum Generieren von Facets verwendet werden kann. Eine Facette wird verwendet, um die Suchergebnisse zu verfeinern. Dabei sieht der Nutzer die anfänglichen Ergebnisse und fügt dann Kriterien oder Attribute hinzu, um die Ergebnisse weiter zu verfeinern. Diese Option kann für Properties, deren Typ „object“ ist, nicht auf „true“ gesetzt sein. Außerdem muss isReturnable auf „true“ gesetzt sein, um diese Option festlegen zu können. Diese Option wird nur für Enum-, boolesche Werte und Textattribute unterstützt. In unserem Beispielschema könnten wir genre, actorName, userRating und mpaaRating versehen, damit sie interaktiv für die 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 Text-Properties verfügbar.

Diese allgemeinen Suchfunktionen-Parameter sind alle booleschen Werte. Sie haben den Standardwert false und müssen auf true gesetzt werden.

In der folgenden Tabelle sehen Sie alle booleschen Parameter, die für alle Properties des Objekts movie auf true gesetzt 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 festgelegt, da ein Film zu mehr als einem Genre gehören kann und in der Regel 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 Abschnitt PropertyDefinition sind mehrere xxPropertyOptions aufgeführt, wobei xx einen bestimmten Typ hat, z. B. boolean. Zum Festlegen des Datentyps der Eigenschaft müssen Sie das entsprechende Datentypobjekt definieren. Wenn Sie ein Datentyp für eine Property definieren, wird der Datentyp dieser Property festgelegt. Wenn du beispielsweise für die Property movieTitle textPropertyOptions angibst, bedeutet dies, dass der Filmtitel den Typ „Text“ hat. Das folgende Snippet zeigt das Attribut movieTitle mit dem Datentyp textPropertyOptions.

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

Jeder Property kann nur ein Datentyp zugewiesen 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.

Dies sind die Datentypobjekte, mit denen die Datentypen für die Properties im Beispielfilmschema angegeben werden:

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

Der Datentyp, den Sie für die Property auswählen, hängt von Ihren erwarteten Anwendungsfällen ab. Im fiktiven Szenario dieses Filmschemas werden Nutzer davon ausgegangen, dass sie die Ergebnisse chronologisch sortieren möchten, sodass das releaseDate ein Datumsobjekt ist. Wenn es beispielsweise einen erwarteten Anwendungsfall gibt, bei dem Releases im Dezember mit den Releases im Januar verglichen werden, könnte ein Stringformat nützlich sein.

Typspezifische Optionen konfigurieren

Der Referenzabschnitt PropertyDefinition enthält Links zu Optionen für jeden Typ. Die meisten typspezifischen Optionen sind optional, mit Ausnahme der Liste von possibleValues in der enumPropertyOptions. Mit der Option orderedRanking können Sie außerdem Werte relativ zueinander bewerten. Das folgende Snippet zeigt das Attribut movieTitle, bei dem der Datentyp textPropertyOptions und die typspezifische Option retrievalImportance festgelegt wird.

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

Dies sind 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

Operatoren-Optionen definieren

Zusätzlich zu den 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 mit dem Datentyp textPropertyOptions und mit den typspezifischen Optionen retrievalImportance und operatorOptions.

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

Jede operatorOptions hat eine operatorName wie title für eine movieTitle. Der Operatorname ist der Suchoperator für die Property. Ein Suchoperatoren ist der tatsächliche Parameter, den Nutzer bei der Eingrenzung einer Suche verwenden sollen. Wenn ein Nutzer beispielsweise anhand seines Titels nach Filmen sucht, 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 Operatorennamen, die die von Nutzern in Ihrer Organisation am häufigsten verwendeten Wörter enthalten. Wenn Ihre Nutzer beispielsweise den Begriff „"“ anstelle von „title“ für einen Filmtitel bevorzugen, sollte der Operatorname auf „Name“ gesetzt werden.

Du kannst denselben Operator für mehrere Properties verwenden, sofern alle Properties in den gleichen Typ aufgelöst werden. Wenn Sie während einer Abfrage den Namen eines freigegebenen Operators verwenden, werden alle Properties abgerufen, die diesen Operatornamen verwenden. Angenommen, das Filmobjekt hatte die Properties plotSummary und plotSynopsis und jede dieser Properties hatte ein operatorName von plot. Solange beide Properties Text (textPropertyOptions) sind, ruft eine einzelne Abfrage mit dem Suchoperator plot beide ab.

Zusätzlich zu operatorName können Properties, die sortiert werden können, die Felder lessThanOperatorName und greaterThanOperatorName in operatorOptions haben. Nutzer können diese Optionen verwenden, um Abfragen anhand von Vergleichen mit einem eingereichten Wert zu erstellen.

Schließlich hat textOperatorOptions ein Feld exactMatchWithOperator in operatorOptions. Wenn Sie exactMatchWithOperator auf true setzen, muss der Abfragestring mit dem gesamten Property-Wert übereinstimmen und darf nicht nur im Text enthalten sein. Der Textwert wird in Suchabfragen und Facettenabgleichen als ein atomarer Wert behandelt.

Beispielsweise kannst du Buch- oder Filmobjekte mit Eigenschaften des Genres indexieren. Genres können „& Science-Fiction“, „Science“ und „Belletristik“ und „Belletristik“ sein. Wenn exactMatchWithOperator auf false gesetzt oder weggelassen ist, wird bei der Suche nach einem Genre oder der Auswahl von „"Science“- und „Belletristik“ auch die Statistik für „Science-Fiction“ zurückgegeben. Dies liegt daran, dass der Text Tokens enthält und die Tokens in „"Science-Fiction“ vorhanden sind. Wenn exactMatchWithOperator den Wert true hat, wird der Text als einzelnes Token behandelt, sodass weder "&" 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. Das displayLabel ist ein empfohlenes, nutzerfreundliches Textlabel für die Unterkunft. Wenn die Anzeige mithilfe der Methode ObjectDisplayOptions konfiguriert wird, wird dieses Label vor der Property angezeigt. Wenn die Property für die Anzeige konfiguriert und displayLabel nicht definiert ist, wird nur der Attributwert angezeigt.

Das folgende Snippet zeigt das Attribut movieTitle, bei dem ein displayLabel 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 Properties 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 kannst du eine Property zum Filtern von Vorschlägen für die automatische Vervollständigung definieren. Du kannst beispielsweise den Operator genre definieren, um Vorschläge basierend auf dem bevorzugten Filmgenre des Nutzers zu filtern. Wenn der Nutzer dann seine Suchanfrage eingibt, werden im Rahmen der automatischen Vervollständigung nur die Filme angezeigt, die dem bevorzugten Genre entsprechen.

Schema registrieren

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

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

Senden Sie die folgende HTTP-Anfrage zum Registrieren des Schemas wie auf der Referenzseite für UpdateSchema beschrieben:

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

Der Text deiner 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 Ihr Schema registriert ist, können Sie die Datenquelle mithilfe von Index-Aufrufen befüllen. Die Indexierung erfolgt normalerweise innerhalb Ihres Content-Connectors.

Mit dem Filmschema sieht eine REST API-Indexierungsanforderung für einen einzelnen Film so aus:

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

Beachten Sie, wie der Wert von movie im Feld objectType mit dem Namen der Objektdefinition im Schema übereinstimmt. Durch Abgleichen dieser beiden Werte weiß Cloud Search, welches Schemaobjekt bei der Indexierung verwendet werden soll.

Beachten Sie auch, wie bei der Indexierung der Schema-Property releaseDate die untergeordneten Properties year, month und day verwendet werden, die sie übernehmen, weil sie als date-Datentyp mit datePropertyOptions definiert werden. Weil year, month und day jedoch nicht im Schema definiert sind, können Sie keine Abfrage für eine dieser Properties erstellen (z.B. year) einzeln ein.

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

Mögliche Indexierungsprobleme erkennen

Die beiden häufigsten Probleme in Bezug auf Schemas und Indexierung sind folgende:

  • Ihre Indexierungsanfrage enthält ein Schemaobjekt oder einen Property-Namen, die nicht beim Schemadienst registriert wurden. Dieses Problem führt dazu, dass die Property oder das Objekt ignoriert wird.

  • Ihre Indexierungsanforderung hat eine Eigenschaft mit einem anderen Typwert als der im Schema registrierte Typ. 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 Repository für Produktionsdaten registrieren, sollten Sie einen Test mit einem kleineren Repository für Testdaten in Betracht ziehen. Mit einem kleineren Test-Repository können Sie schnell Änderungen an Ihrem Schema vornehmen und die indexierten Daten löschen, ohne dass sich ein größerer Index oder ein vorhandener Produktionsindex auswirkt. Erstellen Sie für ein Testdaten-Repository eine ACL, durch die nur ein Testnutzer autorisiert wird, damit andere Nutzer diese Daten in den Suchergebnissen nicht sehen können.

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

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

Mit einer allgemeinen Abfrage testen

Bei einer allgemeinen Abfrage werden alle Elemente in der Datenquelle zurückgegeben, die einen bestimmten String enthalten. Wenn Sie eine Suchoberfläche verwenden, können Sie eine allgemeine Abfrage für eine Filmdatenquelle ausführen, indem Sie das Wort "titanic&quot eingeben und die Eingabetaste drücken. Alle Filme mit dem Wort „itat“ sollten in den Suchergebnissen angezeigt werden.

Mit einem Operator testen

Wenn Sie der Abfrage einen Operator hinzufügen, werden die Ergebnisse auf die Elemente beschränkt, die mit diesem Operatorwert übereinstimmen. Beispielsweise kannst du den Operator actor verwenden, um alle Filme mit einem bestimmten Schauspieler zu finden. Mit einer Suchoperatoren können Sie diese Abfrage einfach ausführen, indem Sie ein operator=value-Paar eingeben, z. B. "actor:Zane&quot, und dann die Eingabetaste drücken. Alle Filme mit Zane als Schauspieler sollten in den Suchergebnissen angezeigt werden.

Schema anpassen

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

  • Indexierung eines Felds, das noch nicht indexiert wurde Beispielsweise können Nutzer wiederholt anhand des Regisseur-Namens nach Filmen suchen. Sie können dann Ihr Schema so anpassen, dass der Regisseur-Name als Operator unterstützt wird.
  • Namen von Suchoperatoren auf Grundlage von Nutzerfeedback ändern Operatorennamen sollten nutzerfreundlich sein. Wenn Ihre Nutzer ständig den falschen Operatornamen verwenden, sollten Sie ihn ändern.

Neuindexierung nach einer Schemaänderung

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

  • Namen der Operatoren
  • Ganzzahlige/maximale Ganzzahl.
  • Ranking einer Ganzzahl und einer Aufzählung.
  • Aktualitätsoptionen.
  • Anzeigeoptionen

Für die folgenden Änderungen funktionieren zuvor indexierte Daten weiterhin gemäß dem zuvor registrierten Schema. Sie müssen jedoch vorhandene Einträge neu indexieren, um Änderungen basierend auf dem aktualisierten Schema zu sehen, wenn sie diese Änderungen haben:

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

Für isFacetable oder isSortable true sollten Sie nur empfehlen, wenn Sie einen eindeutigen Anwendungsfall haben oder diesen nicht benötigen.

Wenn Sie Ihr Schema aktualisieren, indem Sie eine Property isSuggestable markieren, müssen Sie Ihre Daten neu indexieren. Dadurch kommt es zu einer Verzögerung bei der Verwendung der automatischen Vervollständigung für diese Property.

Unzulässige Property-Änderungen

Einige Schemaänderungen sind nicht zulässig, selbst wenn Sie Ihre Daten neu indexieren, weil sie den Index beeinträchtigen oder schlechte oder inkonsistente Suchergebnisse liefern. Hier einige Änderungen:

  • Property-Datentyp
  • Attributnamen
  • Einstellung für exactMatchWithOperator.
  • Einstellung für retrievalImportance.

Es gibt jedoch eine Möglichkeit, dies zu vermeiden.

Komplexe Schemaänderung vornehmen

Damit Änderungen, die zu schlechten Suchergebnissen oder einem fehlerhaften Suchindex führen würden, von Cloud Search vermieden werden, werden nach der Indexierung des Repositorys bestimmte Arten von Änderungen in UpdateSchema-Anfragen verhindert. Beispielsweise können der Datentyp oder der Name einer Unterkunft nicht mehr geändert werden, nachdem sie festgelegt wurde. Diese Änderungen können nicht über eine einfache UpdateSchema-Anfrage ausgeführt werden, auch wenn Sie Ihre Daten neu indexieren.

Wenn Sie eine nicht zulässige Änderung an Ihrem Schema vornehmen müssen, können Sie oft mehrere zulässige Änderungen vornehmen, die denselben Effekt erzielen. Im Allgemeinen umfasst das zuerst die Indexierung indexierter Properties von einer älteren Objektdefinition zu einer neueren und sendet dann eine Indexierungsanfrage, bei der nur die neuere Property verwendet wird.

In den folgenden Schritten wird erläutert, wie Sie den Datentyp oder den Namen einer Property ändern:

  1. Fügen Sie der Objektdefinition in Ihrem Schema eine neue Property hinzu. Verwende einen anderen Namen als die Eigenschaft, die du ändern möchtest.
  2. Führen Sie die UpdateSchema-Anfrage mit der neuen Definition aus. Denken Sie daran, in der Anfrage das gesamte Schema, einschließlich der neuen und der alten Property, zu senden.
  3. Backfill des Index aus dem Daten-Repository. Wenn Sie den Index auf ein Backfill anwenden möchten, senden Sie alle Indexierungsanfragen mit der neuen Property, aber nicht mit der alten Property, da dies zu einer doppelten Zählung von Abfragen führen würde.

    1. Überprüfe beim Indexieren des Backfills nach der neuen Property und verwende standardmäßig die alte Property, um ein inkonsistentes Verhalten zu vermeiden.
    2. Nach Abschluss des Backfills können Sie Testabfragen ausführen, um sie zu verifizieren.
  4. Alte Property löschen Senden Sie eine weitere UpdateSchema-Anfrage ohne den alten Property-Namen und verwenden Sie den alten Property-Namen in zukünftigen Indexierungsanfragen nicht mehr.

  5. Migrieren Sie jede Nutzung der alten Property zur neuen. Wenn du beispielsweise den Property-Namen von „Ersteller“ in „Autor“ änderst, musst du deinen Abfragecode so aktualisieren, dass der Autor dort verwendet wird, wo er zuvor referenziert wurde.

In Cloud Search werden alle gelöschten Attribute oder Objekte 30 Tage lang gespeichert, um eine erneute Verwendung zu verhindern, die zu unerwarteten Indexierungsergebnissen führen würde. Innerhalb dieser 30 Tage sollten Sie die gesamte Nutzung des gelöschten Objekts oder der gelöschten Property entfernen. Dies gilt auch für zukünftige Indexierungsanfragen. Dadurch wird gewährleistet, dass Sie die Property oder das Objekt später so ändern können, dass Ihr Index korrekt bleibt.

Beschränkungen der Größe

Für Cloud Search gelten Einschränkungen in Bezug auf die Größe der strukturierten Datenobjekte und Schemas. Es gibt folgende Einschränkungen:

  • Auf oberster Ebene sind maximal 10 Objekte zulässig.
  • Die maximale Tiefe einer strukturierten Datenhierarchie beträgt zehn Ebenen.
  • Die Gesamtzahl der Felder in einem Objekt ist auf 1.000 begrenzt. Diese beinhaltet die Anzahl der ursprünglichen 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. Tun Sie Ihr Schema, um die Suchqualität zu verbessern.

  3. Strukturieren Sie ein Schema für eine optimale Interpretation der Abfrage.

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

  5. Erstellen Sie einen Connector.