Ein Google Cloud Search-Schema ist eine JSON-Struktur, die die Objekte, Attribute und Optionen definiert, die bei der Indexierung und Abfrage Ihrer Daten verwendet werden sollen. Der Inhaltsconnector liest Daten aus Ihrem Repository und strukturiert und indexiert die Daten anhand des registrierten Schemas.
Sie können ein Schema erstellen, indem Sie ein JSON-Schemaobjekt für die API bereitstellen und es dann registrieren. Sie müssen für jedes Ihrer Repositories ein Schemaobjekt registrieren, bevor Sie Ihre Daten indexieren können.
In diesem Dokument werden die Grundlagen der Schemaerstellung behandelt. Informationen zum Optimieren des Schemas für eine bessere Suche finden Sie unter Suchqualität verbessern.
Schema erstellen
So erstellen Sie Ihr Cloud Search-Schema:
- Erwartetes Nutzerverhalten ermitteln
- Datenquelle initialisieren
- Schema erstellen
- Vollständiges Beispielschema
- Schema registrieren
- Daten indexieren
- Schema testen
- Schema optimieren
Erwartetes Nutzerverhalten ermitteln
Wenn Sie vorhersehen, welche Arten von Abfragen Ihre Nutzer stellen, können Sie Ihre Strategie für die Erstellung Ihres Schemas festlegen.
Wenn Sie beispielsweise Abfragen für eine Filmdatenbank ausführen, könnten Sie davon ausgehen, dass der Nutzer eine Abfrage wie „Zeig mir alle Filme mit Robert Redford“ stellt. Ihr Schema muss daher Abfrageergebnisse unterstützen, die auf „alle Filme mit einem bestimmten Schauspieler“ basieren.
Führen Sie die folgenden Aufgaben aus, um Ihr Schema so zu definieren, dass es die Verhaltensmuster der Nutzer widerspiegelt:
- Evaluieren Sie verschiedene gewünschte Suchanfragen von verschiedenen Nutzern.
- Objekte identifizieren, die in Abfragen verwendet werden können Objekte sind logische Sätze verwandter Daten, wie z. B. ein Film in einer Filmdatenbank.
- Identifizieren Sie die Attribute und Werte, aus denen das Objekt besteht und die in Abfragen verwendet werden können. Attribute sind die indexierbaren Attribute des Objekts. Sie können primitive Werte oder andere Objekte enthalten. Ein Filmobjekt kann beispielsweise Eigenschaften wie den Filmtitel und das Veröffentlichungsdatum als primitive Werte haben. Das Filmobjekt kann auch andere Objekte mit eigenen Attributen wie Name oder Rolle enthalten, z. B. Mitwirkende.
- Ermitteln Sie gültige Beispielwerte für Attribute. Werte sind die tatsächlichen Daten, die für ein Attribut indexiert sind. Beispiel: Der Titel eines Films in Ihrer Datenbank könnte „Raiders of the Lost Ark“ lauten.
- Legen Sie die Sortier- und Rankingoptionen fest, die von den Nutzenden gewünscht werden. Wenn Nutzer beispielsweise Filme abfragen möchten, können sie eine chronologische Sortierung und ein Ranking nach Zuschauerbewertung vornehmen und nicht alphabetisch nach Titel sortieren.
- (Optional) Überlegen Sie, ob eines Ihrer Attribute einen genaueren Kontext darstellt, in dem Suchanfragen ausgeführt werden können, z. B. die Jobrolle oder Abteilung des Nutzers, damit Vorschläge für die automatische Vervollständigung basierend auf dem Kontext bereitgestellt werden können. Beispielsweise könnten Nutzer, die in einer Datenbank mit Filmen suchen, nur an einem bestimmten Filmgenre interessiert sein. Nutzer definieren, welches Genre bei ihren Suchanfragen zurückgegeben werden soll, möglicherweise im Rahmen ihres Nutzerprofils. Wenn ein Nutzer dann beginnt, eine Filmabfrage einzugeben, werden nur Filme in seinem bevorzugten Genre als Teil der Vorschläge für die automatische Vervollständigung vorgeschlagen, z. B. "Actionfilme".
- Erstellen Sie eine Liste dieser Objekte, Attribute und Beispielwerte, die in Suchvorgängen verwendet werden können. Weitere Informationen zur Verwendung dieser Liste finden Sie im Abschnitt Operatoroptionen definieren.
Datenquelle initialisieren
Eine Datenquelle stellt die Daten aus einem Repository dar, die in Google Cloud indexiert und gespeichert wurden. Eine Anleitung zum Initialisieren einer Datenquelle finden Sie unter Datenquellen von Drittanbietern verwalten.
Die Suchergebnisse eines Nutzers werden von der Datenquelle zurückgegeben. Wenn ein Nutzer auf ein Suchergebnis klickt, wird er von Cloud Search über die in der Indexierungsanfrage angegebene URL zum tatsächlichen Element weitergeleitet.
Objekte definieren
Die grundlegende Dateneinheit in einem Schema ist das Objekt, auch als Schemaobjekt bezeichnet. Bei diesem Objekt handelt es sich um eine logische Datenstruktur. Eine logische Datenstruktur in einer Filmdatenbank ist „Film“. Ein weiteres Objekt könnte eine Person sein, die die Darsteller und die Crew repräsentiert.
Jedes Objekt in einem Schema hat eine Reihe von Attributen 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 primitive Werte oder andere Objekte enthalten.
Abbildung 1 zeigt die Film- und Personenobjekte sowie die zugehörigen Eigenschaften.

Ein Cloud Search-Schema besteht im Wesentlichen aus einer Liste von Objektdefinitionsanweisungen, die im objectDefinitions
-Tag definiert sind. Das folgende Schema-Snippet zeigt die objectDefinitions
-Anweisungen für die Schemaobjekte „movie“ und „person“.
{
"objectDefinitions": [
{
"name": "movie",
...
},
{
"name": "person",
...
}
]
}
Wenn Sie ein Schemaobjekt definieren, geben Sie einen name
für das Objekt an, der unter allen anderen Objekten im Schema eindeutig sein muss. Normalerweise verwenden Sie einen name
-Wert, der das Objekt beschreibt, z. B. movie
für ein Filmobjekt. Der Schemadienst verwendet das Feld name
als Schlüsselkennung für indexierbare Objekte. Weitere Informationen zum Feld name
finden Sie unter Objektdefinition.
Objektattribute definieren
Wie in der Referenz zu ObjectDefinition angegeben, folgt auf den Objektnamen ein Satz von options
und eine Liste von propertyDefinitions
.
Die options
kann außerdem aus freshnessOptions
und displayOptions
bestehen.
freshnessOptions
wird verwendet, um das Suchranking basierend auf 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 Abschnitt propertyDefinitions
definieren Sie die Attribute für ein Objekt, z. B. den Filmtitel und das Veröffentlichungsdatum.
Das folgende Snippet zeigt das movie
-Objekt mit zwei Attributen: movieTitle
und releaseDate
.
{
"objectDefinitions": [
{
"name": "movie",
"propertyDefinitions": [
{
"name": "movieTitle",
"isReturnable": true,
"isWildcardSearchable": true,
"textPropertyOptions": {
"retrievalImportance": { "importance": "HIGHEST" },
"operatorOptions": {
"operatorName": "title"
}
},
"displayOptions": {
"displayLabel": "Title"
}
},
{
"name": "releaseDate",
"isReturnable": true,
"isSortable": true,
"datePropertyOptions": {
"operatorOptions": {
"operatorName": "released",
"lessThanOperatorName": "releasedbefore",
"greaterThanOperatorName": "releasedafter"
}
},
"displayOptions": {
"displayLabel": "Release date"
}
...
]
}
]
}
Eine PropertyDefinition besteht aus den folgenden Elementen:
- Ein
name
-String. - Eine Liste mit typunabhängigen Optionen, z. B.
isReturnable
im vorherigen Snippet. - Ein Typ und die zugehörigen typspezifischen Optionen, z. B.
textPropertyOptions
undretrievalImportance
im vorherigen Snippet - Ein
operatorOptions
, das beschreibt, wie das Attribut als Suchoperator verwendet wird. - Eine oder mehrere
displayOptions
, z. B.displayLabel
im vorherigen Snippet
Der name
eines Attributs muss innerhalb des Objekts, in dem es enthalten ist, eindeutig sein. Derselbe Name kann jedoch auch in anderen Objekten und Unterobjekten verwendet werden.
In Abbildung 1 wurden der Titel und das Veröffentlichungsdatum des Films zweimal definiert: einmal im movie
-Objekt und einmal im filmography
-Unterobjekt des person
-Objekts. Für dieses Schema wird das Feld movieTitle
wiederverwendet, sodass das Schema zwei Arten von Suchverhalten unterstützen kann:
- Ergebnisse für Filme anzeigen, wenn Nutzer nach dem Titel eines Films suchen
- Suchergebnisse für Personen anzeigen, wenn Nutzer nach dem Titel eines Films suchen, in dem ein Schauspieler mitgespielt hat
In ähnlicher Weise verwendet das Schema das Feld releaseDate
, da es für die beiden movieTitle
-Felder dieselbe Bedeutung hat.
Überlegen Sie bei der Entwicklung Ihres eigenen Schemas, wie Ihr Repository verwandte Felder haben könnte, die Daten enthalten, die Sie mehr als einmal in Ihrem Schema deklarieren möchten.
Typunabhängige Optionen hinzufügen
In der PropertyDefinition sind allgemeine Optionen für Suchfunktionen aufgeführt, die unabhängig vom Datentyp für alle Properties gelten.
isReturnable
: Gibt an, ob das Attribut Daten identifiziert, die in Suchergebnissen über die Query API zurückgegeben werden sollen. Alle Eigenschaften des Beispielfilms können zurückgegeben werden. Nicht rückgabefähige Attribute können für die Suche oder das Ranking von Ergebnissen verwendet werden, ohne an den Nutzer zurückgegeben zu werden.isRepeatable
: Gibt an, ob für das Attribut mehrere Werte zulässig sind. Ein Film hat beispielsweise nur ein Veröffentlichungsdatum, kann aber mehrere Schauspieler haben.isSortable
: Gibt an, dass das Attribut zum Sortieren verwendet werden kann. Dies kann nicht für Attribute gelten, die wiederholbar sind. Filmergebnisse können beispielsweise nach Veröffentlichungsdatum oder Zuschauerbewertung sortiert werden.isFacetable
: Gibt an, dass das Attribut zum Generieren von Attributen verwendet werden kann. Ein Attribut wird zum Verfeinern der Suchergebnisse verwendet, wobei der Nutzer die ersten Ergebnisse sieht und dann Kriterien oder Attribute hinzufügt, um die Ergebnisse weiter zu verfeinern. Diese Option kann für Properties vom Typ "Objekt" nicht auf "true" gesetzt sein.isReturnable
muss "true" sein, um diese Option festzulegen. Diese Option wird nur für Attribute vom Typ „enum“, „Boolesch“ und „Text“ unterstützt. In unserem Beispielschema könnten wirgenre
,actorName
,userRating
undmpaaRating
als facettierbar festlegen, damit sie zur interaktiven Verfeinerung von Suchergebnissen verwendet werden können.isWildcardSearchable
gibt an, dass Nutzer die Platzhaltersuche für dieses Attribut durchführen können. Diese Option ist nur für Texteigenschaften verfügbar. Wie die Platzhaltersuche im Textfeld funktioniert, hängt vom Wert ab, der im Feld exactMatchWithOperator festgelegt wurde. WennexactMatchWithOperator
auftrue
gesetzt ist, wird der Textwert als ein atomarer Wert tokenisiert und eine Platzhaltersuche wird ausgeführt. Lautet der Textwert beispielsweisescience-fiction
, wird eine Platzhalterabfragescience-*
damit abgeglichen. WennexactMatchWithOperator
auffalse
gesetzt ist, wird der Textwert tokenisiert und eine Platzhaltersuche für jedes Token durchgeführt. Wenn der Textwert beispielsweise "Science-Fiction" lautet, stimmt der Platzhaltersci*
oderfi*
mit dem Element überein, aberscience-*
stimmt nicht mit dem Element überein.
Diese Parameter der allgemeinen Suchfunktion sind allesamt boolesche Werte. Sie haben alle den Standardwert false
und müssen auf true
gesetzt werden, um verwendet werden zu können.
Die folgende Tabelle zeigt die booleschen Parameter, die für alle Attribute des movie
-Objekts auf true
festgelegt sind:
Property | isReturnable |
isRepeatable |
isSortable |
isFacetable |
isWildcardSearchable |
---|---|---|---|---|---|
movieTitle |
true | true | |||
releaseDate |
true | true | |||
genre |
true | true | true | ||
duration |
true | ||||
actorName |
true | true | true | true | |
userRating |
true | true | |||
mpaaRating |
true | true |
Für genre
und actorName
ist isRepeatable
auf true
festgelegt, da ein Film zu mehreren Genres gehören kann und in der Regel mehr als einen Schauspieler hat. Attribute können nicht sortiert werden, wenn sie wiederholbar sind oder in einem wiederholbaren Unterobjekt enthalten sind.
Typ definieren
In der PropertyDefinition sind mehrere xxPropertyOptions
aufgelistet, bei denen xx
ein bestimmter Typ ist, z. B. boolean
. Um den Datentyp des Attributs festzulegen, müssen Sie das entsprechende Datentypobjekt definieren. Das Definieren eines Datentypobjekts für eine Eigenschaft bestimmt den Datentyp dieser Eigenschaft. Wenn Sie beispielsweise textPropertyOptions
für das Attribut movieTitle
definieren, weist dies darauf hin, dass der Filmtitel den Typ „Text“ hat. Im folgenden Snippet sehen Sie das Attribut movieTitle
, wobei der Datentyp durch textPropertyOptions
festgelegt wird.
{
"name": "movieTitle",
"isReturnable": true,
"isWildcardSearchable": true,
"textPropertyOptions": {
...
},
...
},
Einer Property kann nur ein Datentyp zugeordnet sein. Beispielsweise kann in unserem Filmschema releaseDate
nur ein Datum sein (z.B. 2016-01-13
) oder einen String (z.B. January 13, 2016
), aber nicht beides.
Hier sind die Datentypobjekte, mit denen die Datentypen für die Attribute im Beispielschema für Filme angegeben werden:
Property | Datentypobjekt |
---|---|
movieTitle |
textPropertyOptions |
releaseDate |
datePropertyOptions |
genre |
enumPropertyOptions |
duration |
textPropertyOptions |
actorName |
textPropertyOptions |
userRating |
integerPropertyOptions |
mpaaRating |
textPropertyOptions |
Welchen Datentyp Sie für die Property auswählen, hängt von den erwarteten Anwendungsfällen ab.
Im Szenario dieses Filmschemas wird erwartet, dass Nutzer die Ergebnisse chronologisch sortieren möchten, sodass releaseDate
ein Datumsobjekt ist.
Wenn beispielsweise ein erwarteter Anwendungsfall für den Vergleich von Dezember-Releases im Laufe der Jahre mit Januar-Releases vorgesehen war, könnte ein String-Format nützlich sein.
Typspezifische Optionen konfigurieren
Im Abschnitt PropertyDefinition finden Sie Links zu den Optionen für die einzelnen Typen. Die meisten typspezifischen Optionen sind optional, mit Ausnahme der Liste von possibleValues
im enumPropertyOptions
. Außerdem können Sie mit der Option orderedRanking
Werte relativ zueinander ranken. Im folgenden Snippet sehen Sie das Attribut movieTitle
, wobei textPropertyOptions
den Datentyp festlegt und die typspezifische Option retrievalImportance
verwendet.
{
"name": "movieTitle",
"isReturnable": true,
"isWildcardSearchable": true,
"textPropertyOptions": {
"retrievalImportance": { "importance": "HIGHEST" },
...
},
...
}
Hier sind die zusätzlichen typspezifischen Optionen, die im Beispielschema verwendet werden:
Property | Typ | Typspezifische Optionen |
---|---|---|
movieTitle |
textPropertyOptions |
retrievalImportance |
releaseDate |
datePropertyOptions |
|
genre |
enumPropertyOptions |
|
duration |
textPropertyOptions |
|
actorName |
textPropertyOptions |
|
userRating |
integerPropertyOptions |
orderedRanking , maximumValue |
mpaaRating |
textPropertyOptions |
Operatoroptionen definieren
Zusätzlich zu den typspezifischen Optionen verfügt jeder Typ über eine Reihe optionaler operatorOptions
. Diese Optionen beschreiben, wie das Attribut als Suchoperator verwendet wird. Das folgende Snippet zeigt das Attribut movieTitle
, wobei textPropertyOptions
den Datentyp festlegt und die typspezifischen Optionen retrievalImportance
und operatorOptions
verwendet.
{
"name": "movieTitle",
"isReturnable": true,
"isWildcardSearchable": true,
"textPropertyOptions": {
"retrievalImportance": { "importance": "HIGHEST" },
"operatorOptions": {
"operatorName": "title"
}
},
...
}
Jedes operatorOptions
hat ein 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 verwenden sollen, um eine Suche einzugrenzen. Wenn Sie beispielsweise Filme anhand ihres Titels suchen möchten, gibt der Nutzer title:movieName
ein, wobei movieName
der Name eines Films ist.
Operatornamen müssen nicht mit dem Namen des Attributs übereinstimmen. Verwenden Sie stattdessen Operatornamen, die die gebräuchlichsten 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 Operatorname auf „Name“ festgelegt werden.
Sie können denselben Operatornamen für mehrere Attribute verwenden, solange alle Attribute in denselben Typ aufgelöst werden. Wenn Sie in einer Abfrage einen gemeinsamen Operatornamen verwenden, werden alle Attribute abgerufen, die diesen Operatornamen verwenden. Angenommen, das Filmobjekt hätte die Attribute plotSummary
und plotSynopsis
und jedes dieser Attribute hätte den Wert plot
für operatorName
. Solange beide Attribute Text sind (textPropertyOptions
), werden bei einer einzelnen Abfrage mit dem Suchoperator plot
beide abgerufen.
Neben operatorName
können Attribute, die sortierbar sind, auch die Felder lessThanOperatorName
und greaterThanOperatorName
in operatorOptions
haben.
Mit diesen Optionen können Nutzer Abfragen erstellen, die auf Vergleichen mit einem übergebenen Wert basieren.
Schließlich hat textOperatorOptions
das Feld exactMatchWithOperator
in operatorOptions
. Wenn Sie exactMatchWithOperator
auf true
setzen, muss der Abfragestring mit dem gesamten Attributwert übereinstimmen und nicht nur im Text enthalten sein.
Der Textwert wird in Operatorsuchen und Attributübereinstimmungen als ein atomarer Wert behandelt.
Erwägen Sie beispielsweise die Indexierung von Buch- oder Filmobjekten mit Genre-Eigenschaften.
Zu den Genres könnten "Science-Fiction", "Science" und "Fiction" gehören. Wenn exactMatchWithOperator
auf false
gesetzt oder weggelassen wird, würde eine Suche nach einem Genre oder die Auswahl des Attributs „Science“ oder „Fiction“ auch Ergebnisse für „Science-Fiction“ zurückgeben, da der Text tokenisiert ist und die Tokens „Science“ und „Fiction“ in „Science-Fiction“ vorhanden sind.
Wenn exactMatchWithOperator
den Wert true
hat, wird der Text als einzelnes Token behandelt, sodass weder „Science“ noch „Fiction“ mit „Science-Fiction“ übereinstimmt.
Optional: Abschnitt displayOptions
hinzufügen
Am Ende jedes propertyDefinition
-Abschnitts gibt es einen optionalen displayOptions
-Abschnitt. Dieser Abschnitt enthält einen displayLabel
-String.
displayLabel
ist ein empfohlenes, nutzerfreundliches Textlabel für das Attribut. Wenn die Anzeige des Attributs mit ObjectDisplayOptions konfiguriert ist, wird dieses Label vor dem Attribut angezeigt. Wenn das Attribut zur Anzeige konfiguriert ist und displayLabel
nicht definiert ist, wird nur der Attributwert angezeigt.
Im folgenden Snippet sehen Sie das Attribut movieTitle
mit einem displayLabel
, der auf „Titel“ festgelegt ist.
{
"name": "movieTitle",
"isReturnable": true,
"isWildcardSearchable": true,
"textPropertyOptions": {
"retrievalImportance": { "importance": "HIGHEST" },
"operatorOptions": {
"operatorName": "title"
}
},
"displayOptions": {
"displayLabel": "Title"
}
},
Im Folgenden sind die displayLabel
-Werte für alle Attribute des movie
-Objekts im Beispielschema aufgeführt:
Property | displayLabel |
---|---|
movieTitle |
Title |
releaseDate |
Release date |
genre |
Genre |
duration |
Run length |
actorName |
Actor |
userRating |
Audience score |
mpaaRating |
MPAA rating |
Optional: Abschnitt „suggestionFilteringOperators[]
“ hinzufügen
Am Ende jedes propertyDefinition
-Abschnitts befindet sich ein optionaler suggestionFilteringOperators[]
-Abschnitt. In diesem Abschnitt können Sie ein Attribut zum Filtern von Vorschlägen für die automatische Vervollständigung definieren. Sie können beispielsweise den Operator genre
definieren, um Vorschläge basierend auf dem bevorzugten Filmgenre des Nutzers zu filtern. Wenn der Nutzer dann seine Suchanfrage eingibt, werden nur die Filme, die dem bevorzugten Genre entsprechen, als Teil der Vorschläge für die automatische Vervollständigung angezeigt.
Schema registrieren
Damit 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 ID der Datenquelle erforderlich, die Sie im Schritt Datenquelle initialisieren erhalten haben.
Senden Sie mithilfe der Datenquellen-ID eine UpdateSchema-Anfrage, um Ihr Schema zu registrieren.
Führen Sie die auf der Referenzseite UpdateSchema beschriebene HTTP-Anfrage aus, um Ihr Schema zu registrieren:
PUT https://cloudsearch.googleapis.com/v1/indexing/{name=datasources/*}/schema
Der Text Ihrer Anfrage sollte Folgendes enthalten:
{ "validateOnly": // true or false, "schema": { // ... Your complete schema object ... } }
Mit der Option validateOnly
können Sie die Gültigkeit Ihres Schemas testen, ohne es tatsächlich zu registrieren.
Daten indexieren
Sobald das Schema registriert ist, befüllen Sie die Datenquelle mit Indexaufrufen. Die Indexierung erfolgt normalerweise über Ihren Inhaltsconnector.
Bei Verwendung des Filmschemas würde eine REST API-Indexierungsanfrage für einen einzelnen Film so aussehen:
{
"name": "datasource/<data_source_id>/items/titanic",
"acl": {
"readers": [
{
"gsuitePrincipal": {
"gsuiteDomain": true
}
}
]
},
"metadata": {
"title": "Titanic",
"sourceRepositoryUrl": "http://www.imdb.com/title/tt2234155/?ref_=nv_sr_1",
"objectType": "movie"
},
"structuredData": {
"object": {
"properties": [
{
"name": "movieTitle",
"textValues": {
"values": [
"Titanic"
]
}
},
{
"name": "releaseDate",
"dateValues": {
"values": [
{
"year": 1997,
"month": 12,
"day": 19
}
]
}
},
{
"name": "actorName",
"textValues": {
"values": [
"Leonardo DiCaprio",
"Kate Winslet",
"Billy Zane"
]
}
},
{
"name": "genre",
"enumValues": {
"values": [
"Drama",
"Action"
]
}
},
{
"name": "userRating",
"integerValues": {
"values": [
8
]
}
},
{
"name": "mpaaRating",
"textValues": {
"values": [
"PG-13"
]
}
},
{
"name": "duration",
"textValues": {
"values": [
"3 h 14 min"
]
}
}
]
}
},
"content": {
"inlineContent": "A seventeen-year-old aristocrat falls in love with a kind but poor artist aboard the luxurious, ill-fated R.M.S. Titanic.",
"contentFormat": "TEXT"
},
"version": "01",
"itemType": "CONTENT_ITEM"
}
Der Wert von movie
im Feld objectType
stimmt mit dem Namen der Objektdefinition im Schema überein. Durch den Abgleich dieser beiden Werte weiß Cloud Search, welches Schemaobjekt während der Indexierung verwendet werden soll.
Beachten Sie auch, wie bei der Indexierung des Schemaattributs releaseDate
die untergeordneten Attribute year
, month
und day
verwendet werden, die übernommen werden, da es als Datentyp date
definiert wird, indem datePropertyOptions
zur Definition verwendet wird.
Da year
, month
und day
jedoch nicht im Schema definiert sind, können Sie keine dieser Attribute abfragen (z.B. year
).
Beachten Sie auch, wie das wiederholbare Attribut actorName
mithilfe einer Liste von Werten indexiert wird.
Mögliche Indexierungsprobleme identifizieren
Die beiden häufigsten Probleme im Zusammenhang mit Schemas und Indexierung sind:
Ihre Indexierungsanfrage enthält ein Schemaobjekt oder einen Attributnamen, das nicht beim Schemadienst registriert wurde. Dies führt dazu, dass das Attribut oder das Objekt ignoriert wird.
Ihre Indexierungsanfrage enthält ein Attribut mit einem Typwert, der von dem im Schema registrierten Typ abweicht. 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 Produktionsdaten-Repository registrieren, sollten Sie es mit einem kleineren Testdaten-Repository testen. Wenn Sie mit einem kleineren Test-Repository testen, können Sie schnell Anpassungen an Ihrem Schema vornehmen und die indexierten Daten löschen, ohne dass sich dies auf einen größeren Index oder einen vorhandenen Produktionsindex auswirkt. Erstellen Sie für ein Testdaten-Repository eine ACL, die nur einen Testnutzer autorisiert, sodass andere Nutzer diese Daten nicht in den Suchergebnissen sehen können.
Informationen zum Erstellen einer Suchoberfläche zum Validieren von Suchanfragen finden Sie unter Die Suchoberfläche.
Dieser Abschnitt enthält verschiedene Beispielabfragen, mit denen Sie ein Filmschema testen können.
Mit einer generischen Abfrage testen
Bei einer generischen Abfrage werden alle Elemente in der Datenquelle zurückgegeben, die einen bestimmten String enthalten. Mithilfe einer Suchoberfläche können Sie eine generische Abfrage für eine Filmdatenquelle ausführen. Geben Sie dazu das Wort "Titanic" ein und drücken Sie die Eingabetaste. Alle Filme mit dem Wort „Titanic“ sollten in den Suchergebnissen zurückgegeben werden.
Mit einem Operator testen
Wenn Sie der Abfrage einen Operator hinzufügen, werden die Ergebnisse auf die Elemente beschränkt, die diesem Operatorwert entsprechen. Sie können beispielsweise den Operator actor
verwenden, um alle Filme zu finden, in denen ein bestimmter Schauspieler mitspielt. Über eine Suchoberfläche können Sie diese Operatorabfrage ausführen, indem Sie einfach ein Operator=Wert-Paar eingeben, z. B. "actor:Zane", und die Eingabetaste drücken. Alle Filme, in denen Zane mitspielt,
sollten in den Suchergebnissen zurückgegeben werden.
Schema anpassen
Nachdem das Schema und die Daten verwendet wurden, sollten Sie weiterhin im Blick behalten, was bei Ihren Nutzern funktioniert und was nicht. Sie sollten Ihr Schema für die folgenden Situationen anpassen:
- Indexierung eines Feldes, das zuvor noch nicht indexiert wurde. Wenn Ihre Nutzer beispielsweise wiederholt anhand des Regisseurnamens nach Filmen suchen, können Sie Ihr Schema so anpassen, dass der Regisseurname als Operator unterstützt wird.
- Namen von Suchoperatoren basierend auf Nutzerfeedback ändern Operatornamen sollten nutzerfreundlich sein. Wenn sich Ihre Nutzer ständig an den falschen Operatornamen „erinnern“, sollten Sie erwägen, ihn zu ändern.
Neuindexierung nach einer Schemaänderung
Wenn Sie einen der folgenden Werte in Ihrem Schema ändern, müssen Sie die Daten nicht noch einmal indexieren. Sie können einfach eine neue UpdateSchema-Anfrage senden und der Index funktioniert weiterhin:
- Operatornamen
- Ganzzahlige Mindest- und Höchstwerte.
- Ranking nach Ganzzahl und Aufzählung.
- Aktualisierungsoptionen.
- Anzeigeoptionen
In den 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 dieses folgende Änderungen enthält:
- Neue Eigenschaften oder Objekte hinzufügen oder entfernen
isReturnable
,isFacetable
oderisSortable
vonfalse
intrue
ändern.
Sie sollten isFacetable
oder isSortable
nur dann auf true
festlegen, wenn Sie einen eindeutigen Anwendungsfall haben und dies unbedingt erforderlich ist.
Wenn Sie schließlich das Schema durch Markieren eines Attributs isSuggestable
aktualisieren, müssen Sie Ihre Daten neu indexieren. Dies führt zu einer Verzögerung bei der Verwendung der automatischen Vervollständigung für dieses Attribut.
Unzulässige Property-Änderungen
Einige Schemaänderungen sind nicht zulässig, selbst wenn Sie Ihre Daten neu indexieren, da sie den Index beschädigen oder schlechte oder inkonsistente Suchergebnisse liefern. Dazu gehören Änderungen an:
- Property-Datentyp.
- Attributnamen
exactMatchWithOperator
-Einstellung.retrievalImportance
-Einstellung.
Es gibt jedoch eine Möglichkeit, diese Einschränkung zu umgehen.
Komplexe Schemaänderungen vornehmen
Nach der Indexierung des Repositorys werden in Cloud Search bestimmte Änderungen in UpdateSchema-Anfragen verhindert. So vermeiden Sie Änderungen, die schlechte Suchergebnisse oder einen fehlerhaften Suchindex generieren. Beispielsweise können der Datentyp oder der Name eines Attributs nicht mehr geändert werden, nachdem sie festgelegt wurden. Diese Änderungen können nicht über eine einfache UpdateSchema-Anforderung vorgenommen werden, selbst wenn Sie Ihre Daten neu indexieren.
In Situationen, in denen Sie eine ansonsten nicht zugelassene Änderung an Ihrem Schema vornehmen müssen, können Sie häufig eine Reihe zulässiger Änderungen vornehmen, die dieselbe Wirkung erzielen. Im Allgemeinen umfasst dies zuerst die Migration indexierter Attribute von einer älteren zu einer neueren Objektdefinition und das Senden einer Indexierungsanfrage, die nur das neuere Attribut verwendet.
Die folgenden Schritte zeigen, wie Sie den Datentyp oder den Namen einer Eigenschaft ändern:
- Fügen Sie der Objektdefinition in Ihrem Schema eine neue Eigenschaft hinzu. Verwenden Sie einen anderen Namen als das Attribut, das Sie ändern möchten.
- Führen Sie mit der neuen Definition die Anforderung UpdateSchema aus. Denken Sie daran, in der Anfrage das gesamte Schema zu senden, einschließlich des neuen und alten Attributs.
Backfill des Index aus dem Daten-Repository. Senden Sie zum Backfill des Index alle Indexierungsanfragen mit dem neuen Attribut, jedoch nicht mit dem alten Attribut, da dies dazu führen würde, dass Abfrageübereinstimmungen doppelt gezählt werden.
- Prüfen Sie während des Index-Backfills, ob das neue Attribut vorhanden ist, und verwenden Sie standardmäßig das alte, um ein inkonsistentes Verhalten zu vermeiden.
- Führen Sie nach Abschluss des Backfills Testabfragen zur Überprüfung aus.
Löschen Sie das alte Attribut. Senden Sie eine weitere UpdateSchema-Anfrage ohne den alten Attributnamen und verwenden Sie ihn bei zukünftigen Indexierungsanfragen nicht mehr.
Migrieren Sie sämtliche Nutzungen der alten Property in die neue Property. Wenn Sie beispielsweise den Attributnamen von „creator“ zu „author“ ändern, müssen Sie den Abfragecode so aktualisieren, dass „author“ verwendet wird, wo zuvor auf „creator“ verwiesen wurde.
Gelöschte Properties oder Objekte werden in Cloud Search 30 Tage lang gespeichert, um zu verhindern, dass sie wiederverwendet werden, die zu unerwarteten Indexierungsergebnissen führen. Innerhalb dieser 30 Tage sollten Sie das gelöschte Objekt oder Attribut nicht mehr verwenden und auch in zukünftigen Indexanfragen auslassen. So können Sie die Richtigkeit des Index beibehalten, falls Sie sich später dazu entschließen, dieses Attribut oder Objekt wieder zu aktivieren.
Größenbeschränkungen kennen
Bei Cloud Search gelten Beschränkungen für die Größe von strukturierten Datenobjekten und Schemas. Diese Limits sind:
- Es sind maximal 10 Objekte der obersten Ebene zulässig.
- Die maximale Tiefe einer strukturierten Datenhierarchie beträgt 10 Ebenen.
- Die Gesamtzahl der Felder in einem Objekt ist auf 1.000 begrenzt. Dazu gehören die Anzahl der einfachen Felder plus die Summe der Felder in jedem verschachtelten Objekt.
Nächste Schritte
Als Nächstes könnten Sie Folgendes tun:
Erstellen Sie eine Suchoberfläche, um Ihr Schema zu testen.
Passen Sie Ihr Schema an, um die Suchqualität zu verbessern.
Schema für eine optimale Abfrageinterpretation strukturieren
Mit dem
_dictionaryEntry
-Schema können Sie Synonyme für Begriffe definieren, die in Ihrem Unternehmen häufig verwendet werden. Informationen zur Verwendung des Schemas_dictionaryEntry
finden Sie unter Synonyme definieren.Erstellen Sie einen Connector.