Schema erstellen und registrieren

Ein Google Cloud Search-Schema ist eine JSON-Struktur, in der die Objekte, Attribute und Optionen definiert sind, die beim Indexieren und Abfragen Ihrer Daten verwendet werden. Daten aus Ihrem Repository werden mithilfe eines Inhaltsconnectors gelesen und basierend auf Ihrem registrierten Schema strukturiert und indexiert.

Ein Schema erstellen Sie, indem Sie in der API ein JSON-Schemaobjekt bereitstellen und es anschließend registrieren. Ein Schemaobjekt muss für jedes Ihrer Repositories registriert werden, bevor Ihre Daten indexiert werden können.

Schema erstellen

Führen Sie die folgenden Schritte aus, um ein Schema für Cloud Search zu erstellen:

  1. Zu erwartendes Nutzerverhalten bestimmen
  2. Datenquelle initialisieren
  3. Schema erstellen
  4. Beispielschema vervollständigen
  5. Schema registrieren
  6. Daten indexieren
  7. Schema testen
  8. Schema anpassen

Zu erwartendes Nutzerverhalten bestimmen

Wenn Sie antizipieren, welche Art von Abfragen Ihre Nutzer stellen werden, können Sie auf dieser Grundlage die Strategie für Ihr Schema festlegen.

Bei einer Filmdatenbank könnten Nutzer z. B. die Abfrage "Zeige mir alle Filme, in denen Robert Redford mitspielt" eingeben. Das heißt, Ihr Schema sollte Suchergebnisse des Musters "Alle Filme, in denen ein bestimmter Schauspieler mitspielt" unterstützen.

So definieren Sie Ihr Schema so, dass es den Verhaltensmustern Ihrer Nutzer entspricht:

  1. Analysieren Sie unterschiedliche Suchabfragen von verschiedenen Nutzern.
  2. Bestimmen Sie Attribut- und Wertmuster, die für Abfragen verwendet werden könnten. Mit Attributen eines Objekts sind die indexierbaren Attribute eines Objekts gemeint. In ihnen können primitive Werte oder andere Objekte enthalten sein. Eine Filmdatenbank könnte beispielsweise ein Filmobjekt enthalten, das Attribute wie den Titel und das Veröffentlichungsdatum des Films als primitive Werte und andere Objekte wie "Darsteller" mit wiederum eigenen Attributen wie "Name" oder "Rolle" enthalten würde.
  3. Bestimmen Sie die Sortier- und Rankingoptionen, die Ihre Nutzer gerne verwenden. Wenn Nutzer Filme abfragen, möchten Sie diese möglicherweise chronologisch sortieren und ein Ranking nach Zuschauerbewertung vornehmen, anstatt sie alphabetisch nach Titel zu sortieren.
  4. Erstellen Sie eine Liste der Attribute und Werte, die bei der Suche verwendet werden. Einzelheiten 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 auf der Hilfeseite zum Thema Integration von Drittanbietern.

Der Nutzer erhält die Suchergebnisse von der Datenquelle. Wenn er auf ein Suchergebnis klickt, wird er von Cloud Search über die URL, die in der Indexierungsanforderung bereitgestellt wird, zum tatsächlichen Element weitergeleitet.

Objekte definieren

Die Grundeinheit für Daten in einem Schema ist das Objekt, d. h. eine logische Datenstruktur. In einer Filmdatenbank ist "Film" eine logische Datenstruktur. Ein anderes Objekt könnte "Person" sein, für die am Film beteiligten Darsteller und Crew-Mitglieder.

Jedes Objekt in einem Schema verfügt über eine Reihe von Attributen, die das Objekt beschreiben, z. B. "Titel" und "Dauer" für einen Film oder "Name" und "Geburtsdatum" für eine Person. Attribute eines Objekts können primitive Werte oder andere Objekte enthalten.

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

Grafik von Schemaverbindungen zwischen Entitäten
Abbildung 1: Beispielschema mit zwei Objekten und einem Unterobjekt

Ein Cloud Search-Schema besteht im Wesentlichen aus einer Liste von Angaben zu Objektdefinitionen, die im Tag objectDefinitions angegeben werden. Im folgenden Schema-Snippet sehen Sie solche Angaben im Tag objectDefinitions für die Schemaobjekte "Film" ("movie") und "Person" ("person").

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

Wenn Sie ein Schemaobjekt definieren, geben Sie ihm einen Namen (name), der noch nicht für andere Objekte im Schema verwendet wird. Normalerweise verwenden Sie für name einen Wert, der das Objekt beschreibt, z. B. movie für ein Filmobjekt. Das Feld name wird im Schema als Hauptkennung für indexierbare Objekte verwendet. Weitere Informationen zum Feld name finden Sie in der Referenzdokumentation ObjectDefinition.

Objekt-Attribute definieren

Wie Sie der Referenzdokumentation zu ObjectDefinition entnehmen können, folgen auf den Objektnamen eine Reihe von options und eine Liste von propertyDefinitions. Die options können selbst weiter aus freshnessOptions und displayOptions aufgebaut sein. freshnessOptions werden verwendet, um ein Ranking nach Aktualität eines Elements vorzunehmen. In den displayOptions legen Sie fest, ob in den Suchergebnissen für ein Objekt bestimmte Label und Attribute angezeigt werden.

Im Abschnitt propertyDefinitions geben Sie die Attribute für ein Objekt an, z. B. den Filmtitel ("movie title") und das Veröffentlichungsdatum ("release date").

Im folgenden Snippet sehen Sie das Objekt movie mit zwei Attributen: movieTitle und releaseDate.

{
  "objectDefinitions": [
    {
      "name": "movie",
      "propertyDefinitions": [
        {
          "name": "movieTitle",
          "isReturnable": 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 String name
  • Eine Liste mit typunabhängigen Optionen, z. B. isReturnable im vorherigen Snippet
  • Ein Typ und die dazugehörigen typspezifischen Optionen, z. B. textPropertyOptions und retrievalImportance im vorherigen Snippet
  • Ein operatorOptions, um zu beschreiben, wie das Attribut als Suchoperator verwendet wird
  • Eine oder mehrere displayOptions, z. B. displayLabel im vorherigen Snippet

Der name eines Attributs muss innerhalb des Objekts, in dem es sich befindet, einmalig sein. Derselbe Name kann jedoch in anderen Objekten und Unterobjekten verwendet werden. In Abbildung 1 wurden der Filmtitel und das Veröffentlichungsdatum zweimal angegeben: einmal im Objekt movie und noch einmal im Unterobjekt filmography des Objekts person. Für dieses Schema wird das Feld movieTitle so verwendet, dass zwei Arten von Suchverhalten vom Schema unterstützt werden:

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

Auf ähnliche Weise wird im Schema das Feld releaseDate verwendet, da es für die beiden Felder movieTitle dieselbe Bedeutung hat.

Berücksichtigen Sie beim Entwickeln Ihres eigenen Schemas, inwiefern in Ihrem Repository verwandte Felder mit Daten enthalten sein könnten, die Sie mehr als einmal deklarieren möchten.

Typunabhängige Optionen hinzufügen

In der propertyDefinition sind allgemeine Optionen für Suchfunktionen aufgelistet, die für alle Attribute gelten, unabhängig vom Datentyp.

  • Durch isReturnable wird angegeben, ob mit dem jeweiligen Attribut Daten identifiziert werden, die in Suchergebnissen über die Query API zurückgegeben werden sollten. Alle Attribute im Filmbeispiel können zurückgegeben werden. Nicht rückgabefähige Attribute können für die Suche oder das Ranking von Ergebnissen verwendet werden, ohne dass Sie an den Nutzer zurückgegeben werden.
  • Durch isRepeatable wird angegeben, ob für ein Attribut mehrere Werte zulässig sind. Beispielsweise hat ein Film nur ein Veröffentlichungsdatum, es können jedoch mehrere Schauspieler in ihm mitspielen.
  • Durch isSortable wird angegeben, dass das Attribut als Kriterium für die Sortierung verwenden kann. Dies kann nicht für Attribute gelten, die wiederholbar sind. Beispielsweise können Filme in einer Ergebnisliste nach dem Veröffentlichungsdatum oder der Zuschauerbewertung sortiert werden.
  • Durch "isFacetable" wird angegeben, dass das Attribut verwendet werden kann, um Facets zu generieren. Diese werden zum Verfeinern der Suchergebnisse verwendet. Dabei werden die Ergebnisse der ersten Suche angezeigt und Nutzer können dann Kriterien, d. h. Facets hinzufügen, um die Ergebnisse weiter zu verfeinern. Diese Option kann für Attribute des Typs "Objekt" nicht auf "true" festgelegt werden. Für isReturnable muss jedoch "true" angegeben sein, damit diese Option verwendet werden kann. Generell wird diese Option nur für Attribute vom Typ "Aufzählung", "Bool" und "Text" unterstützt. Im Beispielschema könnten Sie genre, actorName, userRating und mpaaRating als facettierbar festlegen, um eine interaktive Verfeinerung der Suchergebnisse zu ermöglichen.

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

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

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

isRepeatable ist sowohl für genre als auch für actorName 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

In der propertyDefinition sind mehrere xxPropertyOptions aufgelistet, bei denen xx für einen bestimmten Typ steht, z. B. boolean. Wenn Sie den Datentyp für ein Attribut festlegen möchten, müssen Sie das entsprechende Datentypobjekt definieren. Wenn Sie z. B. textPropertyOptions für das Attribut movieTitle festlegen, bedeutet dies, dass der Filmtitel den Typ "Text" hat. Im folgenden Snippet sehen Sie das Attribut movieTitle. Sein Datentyp wird von textPropertyOptions bestimmt.

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

Jedes Attribut kann nur einen Datentyp haben. Für das Filmschema heißt das beispielsweise, dass releaseDate nur aus einem Datum (z. B. 2016-01-13) oder aus einem String (z. B. January 13, 2016) bestehen kann, aber nicht aus beidem.

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

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

Welchen Datentyp Sie für ein Attribut auswählen, hängt vom Nutzerverhalten ab, das Sie erwarten. Für das Filmschema gehen Sie z. B. davon aus, dass Nutzer Ergebnisse chronologisch sortieren möchten, releaseDate ist also ein Datenobjekt. Wenn Sie aber zum Beispiel erwarten, dass Nutzer Veröffentlichungen von Filmen im Dezember der letzten Jahre mit denen vergleichen möchten, die in einem Januar stattgefunden haben, könnte ein String-Format nützlich sein.

Typspezifische Optionen konfigurieren

Im Abschnitt propertyDefinition finden Sie Informationen zu den Optionen der einzelnen Typen. Die meisten typspezifischen Optionen sind optional, außer der Liste mit possibleValues in den enumPropertyOptions. Außerdem können Sie mit der Option orderedRanking Werte relativ zueinander ranken. Im folgenden Snippet sehen Sie das Attribut movieTitle. Sein Datentyp wird dabei von textPropertyOptions festgelegt. Außerdem wird die typspezifische Option retrievalImportance verwendet.

{
  "name": "movieTitle",
  "isReturnable": 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 festlegen

Zusätzlich zu typspezifischen Optionen verfügt jeder Typ über eine Reihe optionaler operatorOptions. Diese Optionen beschreiben, wie das Attribut als Suchoperator verwendet wird. Im folgenden Snippet sehen Sie das Attribut movieTitle. Sein Datentyp wird dabei von textPropertyOptions festgelegt. Außerdem werden die typspezifischen Optionen retrievalImportance und operatorOptions verwendet.

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

Für jede der operatorOptions gibt es einen operatorName, z. B. title für movieTitle. Der Operatorname ist der Suchoperator für das Attribut. Ein Suchoperator ist der tatsächliche Parameter, den Nutzer vermutlich verwenden werden, um eine Suche einzugrenzen. Wenn beispielsweise Filme über ihren Titel gesucht werden sollen, gibt der Nutzer title:movieName ein. Dabei ist movieName der Name eines Films.

Namen von Operatoren müssen nicht mit dem von Attributen übereinstimmen. Verwenden Sie stattdessen Operatornamen, die die gebräuchlichsten Wörter widerspiegeln, die von Nutzern in Ihrer Organisation verwendet werden. Wenn die Nutzer beispielsweise für Filmtitel eher den Begriff "Name" anstelle von "Titel" verwenden, sollte "Name" als Name für den Operator gewählt werden.

Sie können denselben Operatornamen für mehrere Attribute verwenden, solange diese alle denselben Typ haben. Wenn Sie eine Abfrage mit einem gemeinsam genutzten Operatornamen durchführen, werden alle Attribute abgerufen, für die er verwendet wird. Gehen Sie z. B. davon aus, das Objekt "Film" hätte die Attribute plotSummary und plotSynopsis und für jedes dieser Attribute würde plot als operatornName verwendet. Wenn beide dieser Attribute den Typ "Text" haben (textPropertyOptions), werden auch beide abgefragt, wenn eine einzelne Abfrage den Suchoperator plot verwendet.

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

Außerdem gibt es für textOperatorOptions in operatorOptions das Feld exactMatchWithOperator. Wenn Sie exactMatchWithOperator auf true festlegen, muss der Abfragestring mit dem Attributwert vollständig übereinstimmen, also nicht nur innerhalb des Texts gefunden werden können. Der Textwert wird in Operatorsuchen und Facet-Treffern als ein atomarer Wert behandelt.

Stellen Sie sich z. B. vor, dass Buch- oder Filmobjekte mit Genre-Attributen indexiert werden sollen. Zu den Genres könnten "Science-Fiction", "Science" und "Fiction" gehören. Wenn exactMatchWithOperator auf false festgelegt oder nicht bestimmt wurde, würden Sie auch Ergebnisse für "Science-Fiction" erhalten, wenn Sie nach einem Genre suchen oder eine der Facets "Science" oder "Fiction" auswählen, da der Text in Tokens unterteilt wird und "Science-Fiction" aus den Tokens "Science" und "Fiction" besteht. Wenn exactMatchWithOperator auf true festgelegt wurde, wird der Text wie ein einzelnes Token behandelt. Das bedeutet, Sie erhalten keine Suchergebnisse für "Science-Fiction", wenn Sie nur nach "Science" oder nur nach "Fiction" suchen.

Den Abschnitt displayOptions hinzufügen

Am Ende jedes propertyDefinition-Abschnitts gibt es den optionalen Abschnitt displayOptions. Darin ist der String displayLabel enthalten. displayLabel ist ein empfohlenes und nutzerfreundliches Textlabel für das Attribut. Wenn die Anzeige eines Attributs mithilfe von ObjectDisplayOptions konfiguriert wird, wird dieses Label vor dem Attribut angezeigt. Ist die Anzeige des Attributs konfiguriert und displayLabel wurde nicht festgelegt, wird nur der Attributwert angezeigt.

Im folgenden Snippet sehen Sie das Attribut movieTitle. Als displayLabel wurde "Title" ("Titel") festgelegt.

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

Die folgende Liste enthält die displayLabel-Werte aller 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

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 während des Schritts Datenquelle initialisieren erhalten haben.

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

Verwenden Sie die im Artikel zu UpdateSchema erläuterte HTTP-Anforderung, um Ihr Schema zu registrieren:

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

Der Body Ihrer Anforderung 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. Dies erfolgt in der Regel über Ihren Inhaltsconnector.

Unter Verwendung des Filmschemas würde eine Anforderung über eine REST API, einen einzelnen Film zu indexieren, folgendermaßen aussehen:

{
  "name": "datasource/<data_source_id>/items/titanic",
  "acl": {
    "readers": [
      {
        "gsuitePrincipal": {
          "gsuiteDomain": true
        }
      }
    ]
  },
  "metadata": {
    "title": "Titanic",
    "viewUrl": "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 können, stimmt der Wert von movie im Feld objectType mit dem Namen der Objektdefinition im Schema überein. Dadurch ist festgelegt, welche Schemaobjekte von Cloud Search während der Indexierung verwendet werden müssen.

Außerdem sehen Sie, dass bei der Indexierung des Schemaattributs releaseDate die Unterattribute year, month und day verwendet werden, die geerbt wurden, weil der Datentyp des Attributs "releaseDate" über dateProperyOptions als date festgelegt wurde. Da year, month und day jedoch nicht im Schema definiert sind, können Sie diese Attribute (z. B. year) nicht einzeln abfragen.

Außerdem wird das wiederholbare Attribut actorName über eine Liste von Werten indexiert.

Mögliche Indexierungsprobleme erkennen

Die zwei häufigsten Probleme im Zusammenhang mit "Schema" und "Indexierung" sind die folgenden:

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

  • Der Typ des Attributs in Ihrer Indexierungsanforderung stimmt nicht mit dem für das Schema registrierten überein. Dies führt dazu, dass von Cloud Search bei der Indexierung ein Fehler zurückgegeben wird.

Schema mithilfe von mehreren Abfragetypen testen

Bevor Sie Ihr Schema für ein großes Produktionsdatenrepository registrieren, sollten Sie es zunächst mit einem kleineren Testdatenrepository verwenden. So können Sie schnell Änderungen an Ihrem Schema vornehmen und die indexierten Daten löschen, ohne dass dies Auswirkungen auf einen größeren Index oder einen vorhandenen Produktionsindex hat. Erstellen Sie für ein Testdatenrepository eine ACL, über die nur ein Testnutzer autorisiert wird. So werden diese Daten nicht in den Suchergebnissen anderer Nutzer angezeigt.

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

In diesem Abschnitt finden Sie verschiedene Beispielabfragen, mit denen das Filmschema getestet werden kann.

Mit einer generischen Abfrage testen

Eine generische Abfrage gibt alle Elemente in der Datenquelle zurück, die einen bestimmten String enthalten. Mithilfe einer Suchoberfläche können Sie solche Abfragen für die Filmdatenquelle ausführen, indem Sie den Begriff "Titanic" eingeben und die Eingabetaste drücken. Als Suchergebnis sollten alle Filme mit dem Begriff "Titanic" zurückgegeben werden.

Mit einem Operator testen

Durch das Hinzufügen eines Operators zur Abfrage 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. Mithilfe einer Suchoberfläche können Sie eine solche Operatorabfrage durchführen, indem Sie einfach ein Operator=Wert-Paar eingeben, z. B. "actor:Zane", und dann auf die Eingabetaste drücken. Alle Filme, in denen Zane mitspielt, sollten in den Suchergebnissen angezeigt werden.

Schema anpassen

Auch nachdem ein Schema produktiv verwendet wird, müssen Sie weiterhin prüfen, ob es für Ihre Nutzer hilfreich ist oder Verbesserungspotenzial besteht. Sie können Ihr Schema an die folgenden Szenarien anpassen:

  • Indexieren eines Felds, das noch nicht indexiert wurde: Möglicherweise suchen Ihre Nutzer wiederholt über den Namen eines Regisseurs nach Filmen. Dann sollten Sie Ihr Schema so anpassen, dass "Name des Regisseurs" als Operator unterstützt wird.
  • Ändern der Namen von Suchoperatoren auf Grundlagen von Nutzerfeedback: Operatornamen sollten nutzerfreundlich sein. Wenn Ihre Nutzer ständig den falschen Operatornamen verwenden, sollten Sie ihn möglicherweise ändern.

Neuindexierung nach einer Schemaänderung

Wenn Sie einen der folgenden Werte in Ihrem Schema geändert haben, müssen Sie Ihre Daten nicht noch einmal indexieren. Sie können einfach eine neue UpdateSchema-Anforderung absenden und Ihr Index funktioniert weiterhin:

  • Operatornamen
  • Ganzzahlige Minimal- und Maximalwerte
  • Ranking nach Ganzzahl oder Aufzählungstyp
  • Aktualitätsoptionen
  • Anzeigeoptionen

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

  • Ein neues Attribut oder ein Objekt hinzufügen oder entfernen
  • isReturnable, isFacetable oder isSortable von false zu true ändern

Die Optionen isFacetable oder isSortable sollten Sie nur auf true festlegen, wenn es für die Verwendung wirklich erforderlich ist.

Nicht zugelassene Attributänderungen

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

  • Attributdatentypen
  • Attributnamen

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

Komplexe Schemaänderungen vornehmen

Sobald ein Repository indexiert wurde, werden bestimmte Änderungen über UpdateSchema-Anforderungen in Cloud Search verhindert, um schlechte Suchergebnissen oder einen fehlerhaften Suchindex zu vermeiden. Beispielsweise können der Datentyp und der Name eines Attributs nicht mehr geändert werden, nachdem sie festgelegt wurden. Es ist nicht möglich, diese Änderungen über eine UpdateSchema-Anforderung vorzunehmen, selbst wenn Sie Ihre Daten neu indexieren.

Sollte eine solche nicht zugelassene Änderung an Ihrem Schema notwendig sein, können Sie oft dasselbe Ergebnis erzielen, indem Sie mehrere zulässige Änderungen vornehmen. Im Allgemeinen umfasst dies zunächst die Migration indexierter Attribute von einer älteren Objektdefinition in eine neuere und das Senden einer Indexierungsanforderung, die nur das neuere Attribut verwendet.

So ändern Sie den Datentyp oder den Namen eines Objekts:

  1. Fügen Sie der Objektdefinition in Ihrem Schema ein neues Attribut hinzu. Verwenden Sie einen anderen Namen als den des Attributs, das Sie ändern möchten.
  2. Führen Sie mit der neuen Definition eine UpdateSchema-Anforderung aus. Denken Sie daran, das gesamte Schema, einschließlich des neuen und des alten Attributs, in der Anforderung zu senden.
  3. Füllen Sie den Index wieder aus dem Datenrepository auf. Senden Sie dazu alle Indexierungsanforderungen 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. Stellen Sie während des Auffüllens des Index sicher, dass das neue Attribut den Wert des alten erhält, um inkonsistentes Verhalten zu vermeiden.
    2. Führen Sie nach erfolgtem Auffüllen Testabfragen zur Überprüfung aus.
  4. Löschen Sie das alte Attribut. Senden Sie eine weitere UpdateSchema-Anforderung ohne den alten Attributnamen und verwenden Sie ihn in zukünftigen Indexierungsanforderungen nicht mehr.

  5. Übertragen Sie alles, worin das alte Attribut verwendet wird, in das neue. Wenn Sie beispielsweise den Attributnamen von "Urheber" zu "Autor" ändern, müssen Sie Ihren Abfragecode so aktualisieren, dass "Autor" verwendet wird, wo bisher "Urheber" verwendet wurde.

In Cloud Search werden alle gelöschten Attribute oder Objekte 30 Tage lang gespeichert, um zu verhindern, dass sie wieder verwendet werden, was unerwartete Indexierungsergebnisse verursachen würde. Innerhalb dieses Zeitraums sollten die gelöschten Objekte oder Attribute nicht mehr verwendet werden und sollten auch von zukünftigen Indexabfragen ausgeschlossen werden. Dadurch wird sichergestellt, dass Sie das Attribut oder Objekt später wieder instanziieren können, ohne die Korrektheit des Index zu gefährden.

Übersicht über Größenbeschränkungen

Bei Cloud Search gibt es die folgenden Größenbeschränkungen für strukturierte Datenobjekte und Schemas:

  • Die oberste Ebene kann maximal 10 Objekte haben.
  • Die maximale Tiefe einer strukturierten Datenhierarchie beträgt 10 Ebenen.
  • Die Gesamtzahl der Felder in einem Objekt ist auf 1000 begrenzt. Dies umfasst die Anzahl der primitiven Felder plus die Summe der Felder in jedem verschachtelten Objekt.

Weitere Informationen

Bei Bedarf können Sie mit den folgenden Schritten fortfahren:

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

  2. Informieren Sie sich, wie Sie das Schema _dictionaryEntry nutzen können, um Synonyme für Begriffe zu bestimmen, die in Ihrem Unternehmen häufig verwendet werden. Weitere Informationen zur Verwendung des Schemas _dictionaryEntry finden Sie im Artikel Synonyme definieren.

  3. Erstellen Sie einen Connector.