Ein Google Cloud Search-Schema ist eine JSON-Struktur, die die Objekte, Attribute und Optionen definiert, die bei der Indexierung und Abfrage Ihrer Daten verwendet werden. Der Inhaltsconnector liest Daten aus Ihrem Repository und strukturiert und indexiert die Daten anhand des registrierten Schemas.
Sie können ein Schema erstellen, indem Sie der API ein JSON-Schemaobjekt zur Verfügung stellen und es dann registrieren. Sie müssen für jedes Ihrer Repositories ein Schemaobjekt registrieren, bevor Sie Ihre Daten indexieren können.
In diesem Dokument werden die Grundlagen der Schemaerstellung behandelt. Informationen zum Optimieren des Schemas für eine bessere Suche finden Sie unter Suchqualität verbessern.
Schema erstellen
So erstellen Sie ein Cloud Search-Schema:
- Erwartetes Nutzerverhalten ermitteln
- Datenquelle initialisieren
- Schema erstellen
- Vollständiges Beispielschema
- Schema registrieren
- Daten indexieren
- Schema testen
- Schema abstimmen
Erwartetes Nutzerverhalten ermitteln
Wenn Sie vorhersehen, welche Abfragetypen Ihre Nutzer stellen, können Sie Ihre Strategie für die Erstellung Ihres Schemas festlegen.
Wenn Sie beispielsweise Abfragen für eine Filmdatenbank senden, könnten Sie davon ausgehen, dass der Nutzer eine Abfrage wie „Zeig mir alle Filme mit Robert Redford“ stellt. Ihr Schema muss daher Abfrageergebnisse unterstützen, die auf „alle Filme mit einem bestimmten Schauspieler“ basieren.
Sie können die folgenden Aufgaben ausführen, um Ihr Schema so zu definieren, dass es die Verhaltensmuster Ihrer Nutzer widerspiegelt:
- 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, beispielsweise 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 (z. B. Darsteller) mit eigenen Attributen wie Name oder Rolle enthalten.
- Gültige Beispielwerte für Attribute ermitteln Werte sind die tatsächlichen Daten, die für ein Attribut indexiert wurden. Ein Filmtitel in Ihrer Datenbank könnte beispielsweise „Die Räuber des verlorenen Schatzes“ lauten.
- Legen Sie die Sortier- und Rankingoptionen fest, die Ihre Nutzer wünschen. Wenn Nutzer beispielsweise Filme abfragen, möchten sie möglicherweise eine chronologische Sortierung und ein Ranking nach Zuschauerbewertung vornehmen. Eine alphabetische Sortierung nach Titel ist nicht erforderlich.
- Optional: Überlegen Sie, ob eine Ihrer Properties einen spezifischeren Kontext darstellt, in dem Suchanfragen ausgeführt werden können, z. B. die Jobrolle oder Abteilung des Nutzers, damit Vorschläge für die automatische Vervollständigung auf Grundlage des Kontexts bereitgestellt werden können. Wenn Nutzer beispielsweise in einer Filmdatenbank suchen, interessieren sie sich möglicherweise nur für ein bestimmtes Filmgenre. Nutzer legen möglicherweise im Rahmen ihres Nutzerprofils fest, welches Genre bei ihren Suchanfragen zurückgegeben werden soll. Wenn ein Nutzer dann beginnt, eine Filmabfrage einzugeben, werden nur Filme in seinem bevorzugten Genre, z. B. "Actionfilme", als Teil der Vorschläge für die automatische Vervollständigung vorgeschlagen.
- Erstellen Sie eine Liste dieser Objekte, Attribute und Beispielwerte, die bei Suchvorgängen verwendet werden können. Weitere Informationen zur Verwendung dieser Liste finden Sie im Abschnitt Operatoroptionen definieren.
Datenquelle initialisieren
Eine Datenquelle stellt die Daten aus einem Repository dar, die in Google Cloud indexiert und gespeichert wurden. Eine Anleitung zum Initialisieren einer Datenquelle finden Sie unter Datenquellen von Drittanbietern verwalten.
Die Suchergebnisse eines Nutzers werden von der Datenquelle zurückgegeben. Klickt ein Nutzer auf ein Suchergebnis, wird er von Cloud Search über die in der Indexierungsanfrage angegebene URL zum eigentlichen Element weitergeleitet.
Objekte definieren
Die Grundeinheit von Daten in einem Schema ist das Objekt, auch als Schemaobjekt bezeichnet. Das Objekt ist eine logische Datenstruktur. Eine logische Datenstruktur in einer Filmdatenbank ist „Film“. Ein weiteres Objekt ist eine Person, die die Darsteller und die Crew repräsentiert.
Jedes Objekt in einem Schema hat eine Reihe von Eigenschaften oder Attribute, die das Objekt beschreiben, z. B. den Titel und die Dauer eines Films oder den Namen und das Geburtsdatum für eine Person. Die Eigenschaften eines Objekts können primitive Werte oder andere Objekte enthalten.
In Abbildung 1 sehen Sie die Film- und Personenobjekte ("movie" und "person") mit zugehörigen Eigenschaften.
Ein Cloud Search-Schema besteht im Wesentlichen aus einer Liste von Objektdefinitionsanweisungen, die im objectDefinitions
-Tag definiert werden. Das folgende Schema-Snippet zeigt die objectDefinitions
-Anweisungen für die Schemaobjekte „movie“ und „person“.
{
"objectDefinitions": [
{
"name": "movie",
...
},
{
"name": "person",
...
}
]
}
Wenn Sie ein Schemaobjekt definieren, geben Sie einen name
für das Objekt an, der unter allen anderen Objekten im Schema eindeutig sein muss. Normalerweise verwenden Sie einen name
-Wert, der das Objekt beschreibt, z. B. movie
für ein Filmobjekt. Der Schemadienst verwendet das Feld name
als Schlüsselkennung für indexierbare Objekte. Weitere Informationen zum Feld name
finden Sie unter Objektdefinition.
Objektattribute definieren
Wie in der Referenz zu ObjectDefinition angegeben, wird auf den Objektnamen ein Satz von options
und eine Liste von propertyDefinitions
folgen.
Der options
kann weiter aus freshnessOptions
und displayOptions
bestehen.
freshnessOptions
werden verwendet, um das Suchranking basierend auf der Aktualität eines Elements anzupassen. Mit displayOptions
wird definiert, ob in den Suchergebnissen für ein Objekt bestimmte Labels und Attribute angezeigt werden.
Im Abschnitt propertyDefinitions
definieren Sie die Attribute für ein Objekt, z. B. den Filmtitel und das Veröffentlichungsdatum.
Das folgende Snippet zeigt das movie
-Objekt mit zwei Attributen: movieTitle
und releaseDate
.
{
"objectDefinitions": [
{
"name": "movie",
"propertyDefinitions": [
{
"name": "movieTitle",
"isReturnable": true,
"isWildcardSearchable": true,
"textPropertyOptions": {
"retrievalImportance": { "importance": "HIGHEST" },
"operatorOptions": {
"operatorName": "title"
}
},
"displayOptions": {
"displayLabel": "Title"
}
},
{
"name": "releaseDate",
"isReturnable": true,
"isSortable": true,
"datePropertyOptions": {
"operatorOptions": {
"operatorName": "released",
"lessThanOperatorName": "releasedbefore",
"greaterThanOperatorName": "releasedafter"
}
},
"displayOptions": {
"displayLabel": "Release date"
}
...
]
}
]
}
Eine PropertyDefinition besteht aus den folgenden Elementen:
- Ein
name
-String. - Eine Liste mit typunabhängigen Optionen, z. B.
isReturnable
im vorherigen Snippet - Ein Typ und die zugehörigen typspezifischen Optionen, z. B.
textPropertyOptions
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 zugehörigen Objekts eindeutig sein. Derselbe Name kann jedoch in anderen Objekten und Unterobjekten verwendet werden.
In Abbildung 1 wurden der Filmtitel und das Veröffentlichungsdatum zweimal definiert: einmal im movie
-Objekt und einmal im filmography
-Unterobjekt des person
-Objekts. Für dieses Schema wird das Feld movieTitle
wiederverwendet, sodass das Schema zwei Arten von Suchverhalten unterstützen kann:
- Suchergebnisse für Filme anzeigen, wenn Nutzer nach dem Titel eines Films suchen
- Suchergebnisse für Personen anzeigen, wenn Nutzer nach dem Titel eines Films suchen, in dem ein Schauspieler mitgespielt hat
Auf ähnliche Weise verwendet das Schema das Feld releaseDate
, da es für die beiden movieTitle
-Felder dieselbe Bedeutung hat.
Überlegen Sie bei der Entwicklung Ihres eigenen Schemas, ob Ihr Repository verwandte Felder mit Daten haben könnte, die Sie in Ihrem Schema mehrmals deklarieren möchten.
Typunabhängige Optionen hinzufügen
In der PropertyDefinition sind allgemeine Optionen für Suchfunktionen aufgeführt, die für alle Attribute gelten, unabhängig vom Datentyp.
isReturnable
gibt an, ob das Attribut Daten identifiziert, die in Suchergebnissen über die Query API zurückgegeben werden sollen. Alle Beispieleigenschaften für Filme können zurückgegeben werden. Nicht rückgabefähige Properties können für die Suche oder das Ranking von Ergebnissen verwendet werden, ohne dass sie an den Nutzer zurückgegeben werden.isRepeatable
gibt an, ob mehrere Werte für das Attribut zulässig sind. Ein Film hat beispielsweise nur ein Veröffentlichungsdatum, kann aber mehrere Schauspieler haben.isSortable
gibt an, dass das Attribut zum Sortieren verwendet werden kann. Dies kann nicht für Attribute gelten, die wiederholbar sind. Die Filmergebnisse können z. B. nach dem Veröffentlichungsdatum oder der Altersfreigabe sortiert werden.isFacetable
gibt an, dass das Attribut zum Generieren von facets verwendet werden kann. Ein Attribut wird zum Verfeinern der Suchergebnisse verwendet, wobei der Nutzer die ursprünglichen Ergebnisse sieht und dann Kriterien oder Facetten hinzufügt, um die Ergebnisse weiter zu verfeinern. Diese Option kann für Attribute vom Typ "Objekt" nicht auf "true" festgelegt werden. FürisReturnable
muss "true" festgelegt sein, damit diese Option festgelegt werden kann. Diese Option wird nur für Enum-, boolesche und Textattribute unterstützt. In unserem Beispielschema könnten wirgenre
,actorName
,userRating
undmpaaRating
als facettierbar festlegen, damit sie zur interaktiven Verfeinerung der Suchergebnisse verwendet werden können.isWildcardSearchable
gibt an, dass Nutzer für diese Property eine Platzhaltersuche ausführen können. Diese Option ist nur für Texteigenschaften verfügbar. Wie die Platzhaltersuche im Textfeld funktioniert, hängt vom Wert ab, der im Feld exactMatchWithOperator festgelegt wurde. WennexactMatchWithOperator
auftrue
gesetzt ist, wird der Textwert als ein atomarer Wert tokenisiert und eine Platzhaltersuche ausgeführt. Lautet der Textwert beispielsweisescience-fiction
, wird die Platzhalterabfragescience-*
damit abgeglichen. WennexactMatchWithOperator
auffalse
gesetzt ist, wird der Textwert tokenisiert und für jedes Token wird eine Platzhaltersuche ausgeführt. Lautet der Textwert beispielsweise "Science-Fiction", stimmt der Platzhaltersci*
oderfi*
mit dem Element überein, aberscience-*
stimmt nicht mit dem Element überein.
Diese Parameter der allgemeinen Suchfunktion sind alle boolesche Werte. Sie haben alle den Standardwert false
und müssen auf true
gesetzt werden, damit sie verwendet werden können.
Die folgende Tabelle zeigt die booleschen Parameter, die für alle Attribute des movie
-Objekts auf true
festgelegt sind:
Property | isReturnable |
isRepeatable |
isSortable |
isFacetable |
isWildcardSearchable |
---|---|---|---|---|---|
movieTitle |
true | true | |||
releaseDate |
true | true | |||
genre |
true | true | true | ||
duration |
true | ||||
actorName |
true | true | true | true | |
userRating |
true | true | |||
mpaaRating |
true | true |
Für genre
und actorName
ist isRepeatable
auf true
festgelegt, da ein Film zu mehreren Genres gehören kann und in der Regel mehr als ein Schauspieler mitspielt. Attribute können nicht sortierbar sein, wenn sie wiederholbar sind oder in einem wiederholbaren Unterobjekt enthalten sind.
Typ definieren
In der PropertyDefinition sind mehrere xxPropertyOptions
aufgeführt, bei denen xx
ein bestimmter Typ ist, z. B. boolean
. Um den Datentyp der Eigenschaft festzulegen, müssen Sie das entsprechende Datentypobjekt definieren. Wenn Sie ein Datentypobjekt für eine Eigenschaft definieren, wird der Datentyp dieser Eigenschaft festgelegt. Wenn du beispielsweise textPropertyOptions
für das Attribut movieTitle
definierst, zeigt das an, dass der Filmtitel den Typ Text hat. Das folgende Snippet zeigt das Attribut movieTitle
, wobei der Datentyp von textPropertyOptions
festgelegt wird.
{
"name": "movieTitle",
"isReturnable": true,
"isWildcardSearchable": true,
"textPropertyOptions": {
...
},
...
},
Einer Property kann nur ein Datentyp zugeordnet sein. Beispielsweise kann in unserem Filmschema releaseDate
nur ein Datum sein (z.B. 2016-01-13
) oder einen String (z.B. January 13, 2016
), aber nicht beides.
Hier sind die Datentypobjekte, mit denen die Datentypen für die Attribute im Beispielschema für Filme angegeben werden:
Property | Datentypobjekt |
---|---|
movieTitle |
textPropertyOptions |
releaseDate |
datePropertyOptions |
genre |
enumPropertyOptions |
duration |
textPropertyOptions |
actorName |
textPropertyOptions |
userRating |
integerPropertyOptions |
mpaaRating |
textPropertyOptions |
Welchen Datentyp Sie für die Property auswählen, hängt von den erwarteten Anwendungsfällen ab.
Bei diesem Filmschema wird erwartet, dass Nutzer Ergebnisse chronologisch sortieren möchten, sodass releaseDate
ein Datumsobjekt ist.
Wenn beispielsweise ein erwarteter Anwendungsfall für den Vergleich von Dezember-Versionen über die Jahre mit denen im Januar vorgesehen war, könnte ein String-Format nützlich sein.
Typspezifische Optionen konfigurieren
Im Abschnitt PropertyDefinition finden Sie Informationen zu den Optionen für die einzelnen Typen. Die meisten typspezifischen Optionen sind optional, mit Ausnahme der Liste von possibleValues
im enumPropertyOptions
. Außerdem können Sie mit der Option orderedRanking
Werte relativ zueinander ranken. Das folgende Snippet zeigt das Attribut movieTitle
, wobei textPropertyOptions
den Datentyp festlegt und die typspezifische Option retrievalImportance
verwendet.
{
"name": "movieTitle",
"isReturnable": true,
"isWildcardSearchable": true,
"textPropertyOptions": {
"retrievalImportance": { "importance": "HIGHEST" },
...
},
...
}
Im Folgenden finden Sie die zusätzlichen typspezifischen Optionen, die im Beispielschema verwendet werden:
Property | Typ | Typspezifische Optionen |
---|---|---|
movieTitle |
textPropertyOptions |
retrievalImportance |
releaseDate |
datePropertyOptions |
|
genre |
enumPropertyOptions |
|
duration |
textPropertyOptions |
|
actorName |
textPropertyOptions |
|
userRating |
integerPropertyOptions |
orderedRanking , maximumValue |
mpaaRating |
textPropertyOptions |
Operatoroptionen definieren
Zusätzlich zu den typspezifischen Optionen verfügt jeder Typ über eine Reihe optionaler operatorOptions
. Diese Optionen beschreiben, wie das Attribut als Suchoperator verwendet wird. Das folgende Snippet zeigt das Attribut movieTitle
, wobei textPropertyOptions
den Datentyp festlegt und die typspezifischen Optionen retrievalImportance
und operatorOptions
verwendet werden.
{
"name": "movieTitle",
"isReturnable": true,
"isWildcardSearchable": true,
"textPropertyOptions": {
"retrievalImportance": { "importance": "HIGHEST" },
"operatorOptions": {
"operatorName": "title"
}
},
...
}
Jeder operatorOptions
hat ein operatorName
, z. B. title
für ein movieTitle
. Der Operatorname ist der Suchoperator für das Attribut. Ein Suchoperator ist der tatsächliche Parameter, den Nutzer verwenden sollen, um eine Suche einzugrenzen. Wenn beispielsweise Filme anhand ihres Titels gesucht werden sollen, gibt der Nutzer title:movieName
ein, wobei movieName
der Name eines Films ist.
Operatornamen müssen nicht mit dem Namen des Attributs übereinstimmen. Stattdessen sollten Sie Operatornamen verwenden, die die am häufigsten von Nutzern in Ihrer Organisation verwendeten Wörter widerspiegeln. Wenn Ihre Nutzer beispielsweise den Begriff "name" anstelle von "title" für einen Filmtitel bevorzugen, sollte der Operatorname auf "name" festgelegt werden.
Sie können für mehrere Attribute denselben Operatornamen verwenden, solange alle Attribute in denselben Typ aufgelöst werden. Wenn Sie während einer Abfrage einen gemeinsamen Operatornamen verwenden, werden alle Attribute abgerufen, die diesen Operatornamen verwenden. Angenommen, das Filmobjekt hätte die Attribute plotSummary
und plotSynopsis
und jedes dieser Attribute hätte den Wert plot
für operatorName
. Solange beide dieser Attribute Text sind (textPropertyOptions
), werden sie bei einer einzelnen Abfrage mit dem Suchoperator plot
abgerufen.
Zusätzlich zu operatorName
können Attribute, die sortierbar sind, die Felder lessThanOperatorName
und greaterThanOperatorName
in operatorOptions
haben.
Nutzer können diese Optionen verwenden, um Abfragen zu erstellen, die auf Vergleichen mit einem übergebenen Wert basieren.
Schließlich hat textOperatorOptions
das Feld exactMatchWithOperator
in operatorOptions
. Wenn Sie exactMatchWithOperator
auf true
setzen, muss der Abfragestring mit dem gesamten Attributwert übereinstimmen und nicht nur im Text enthalten sein.
Der Textwert wird in Operatorsuchen und Attributübereinstimmungen als ein atomarer Wert behandelt.
Sie können beispielsweise Book- oder Movie-Objekte mit Genre-Eigenschaften indexieren.
Genres können beispielsweise "Science-Fiction", "Science" und "Fiction" sein. Wenn exactMatchWithOperator
auf false
gesetzt oder weggelassen wird, würde eine Suche nach einem Genre oder die Auswahl des Attributs „Science“ oder „Fiction“ auch Ergebnisse für „Science-Fiction“ zurückgeben, da der Text tokenisiert ist und die Tokens „Science“ und „Fiction“ in „Science-Fiction“ vorhanden sind.
Wenn exactMatchWithOperator
den Wert true
hat, wird der Text als einzelnes Token behandelt, sodass weder „Science“ noch „Fiction“ mit „Science-Fiction“ übereinstimmt.
Optional: Abschnitt displayOptions
hinzufügen
Am Ende jedes propertyDefinition
-Abschnitts gibt es den optionalen Abschnitt displayOptions
. Dieser Abschnitt enthält einen displayLabel
-String.
Das displayLabel
ist ein empfohlenes und nutzerfreundliches Textlabel für das Attribut. Wenn die Anzeige des Attributs mithilfe von ObjectDisplayOptions konfiguriert ist, wird dieses Label vor dem Attribut angezeigt. Wenn das Attribut für die Anzeige konfiguriert ist und displayLabel
nicht definiert ist, wird nur der Attributwert angezeigt.
Im folgenden Snippet sehen Sie das Attribut movieTitle
, wobei displayLabel
auf „Titel“ festgelegt ist.
{
"name": "movieTitle",
"isReturnable": true,
"isWildcardSearchable": true,
"textPropertyOptions": {
"retrievalImportance": { "importance": "HIGHEST" },
"operatorOptions": {
"operatorName": "title"
}
},
"displayOptions": {
"displayLabel": "Title"
}
},
Im Folgenden sehen Sie die displayLabel
-Werte für alle Attribute des movie
-Objekts im Beispielschema:
Property | displayLabel |
---|---|
movieTitle |
Title |
releaseDate |
Release date |
genre |
Genre |
duration |
Run length |
actorName |
Actor |
userRating |
Audience score |
mpaaRating |
MPAA rating |
Optional: Abschnitt suggestionFilteringOperators[]
hinzufügen
Am Ende jedes propertyDefinition
-Abschnitts gibt es einen optionalen suggestionFilteringOperators[]
-Abschnitt. In diesem Abschnitt können Sie ein Attribut zum Filtern von Vorschlägen für die automatische Vervollständigung definieren. Sie können beispielsweise den Operator genre
definieren, um Vorschläge basierend auf dem bevorzugten Filmgenre des Nutzers zu filtern. Wenn der Nutzer dann eine Suchanfrage eingibt, werden nur die Filme, die dem bevorzugten Genre entsprechen, als Teil der Vorschläge für die automatische Vervollständigung angezeigt.
Schema registrieren
Damit bei Cloud Search-Abfragen strukturierte Daten zurückgegeben werden, müssen Sie Ihr Schema beim Cloud Search-Schemadienst registrieren. Dafür benötigen Sie die Datenquellen-ID, die Sie im Schritt Datenquelle initialisieren erhalten haben.
Mithilfe der Datenquellen-ID können Sie eine UpdateSchema-Anforderung ausgeben, um Ihr Schema zu registrieren.
Geben Sie die auf der Referenzseite UpdateSchema beschriebene HTTP-Anfrage aus, um Ihr Schema zu registrieren:
PUT https://cloudsearch.googleapis.com/v1/indexing/{name=datasources/*}/schema
Der Text Ihrer Anfrage sollte Folgendes enthalten:
{ "validateOnly": // true or false, "schema": { // ... Your complete schema object ... } }
Mit der Option validateOnly
können Sie die Gültigkeit Ihres Schemas testen, ohne es tatsächlich zu registrieren.
Daten indexieren
Sobald das Schema registriert ist, können Sie die Datenquelle mithilfe von Index-Aufrufen befüllen. Die Indexierung erfolgt normalerweise über Ihren Inhalts-Connector.
Mit dem Filmschema würde eine REST API-Indexierungsanfrage für einen einzelnen Film so aussehen:
{
"name": "datasource/<data_source_id>/items/titanic",
"acl": {
"readers": [
{
"gsuitePrincipal": {
"gsuiteDomain": true
}
}
]
},
"metadata": {
"title": "Titanic",
"sourceRepositoryUrl": "http://www.imdb.com/title/tt2234155/?ref_=nv_sr_1",
"objectType": "movie"
},
"structuredData": {
"object": {
"properties": [
{
"name": "movieTitle",
"textValues": {
"values": [
"Titanic"
]
}
},
{
"name": "releaseDate",
"dateValues": {
"values": [
{
"year": 1997,
"month": 12,
"day": 19
}
]
}
},
{
"name": "actorName",
"textValues": {
"values": [
"Leonardo DiCaprio",
"Kate Winslet",
"Billy Zane"
]
}
},
{
"name": "genre",
"enumValues": {
"values": [
"Drama",
"Action"
]
}
},
{
"name": "userRating",
"integerValues": {
"values": [
8
]
}
},
{
"name": "mpaaRating",
"textValues": {
"values": [
"PG-13"
]
}
},
{
"name": "duration",
"textValues": {
"values": [
"3 h 14 min"
]
}
}
]
}
},
"content": {
"inlineContent": "A seventeen-year-old aristocrat falls in love with a kind but poor artist aboard the luxurious, ill-fated R.M.S. Titanic.",
"contentFormat": "TEXT"
},
"version": "01",
"itemType": "CONTENT_ITEM"
}
Wie Sie sehen, stimmt der Wert von movie
im Feld objectType
mit dem Namen der Objektdefinition im Schema überein. Durch den Abgleich dieser beiden Werte weiß Cloud Search, welches Schemaobjekt während der Indexierung verwendet werden soll.
Beachten Sie auch, dass bei der Indexierung des Schemaattributs releaseDate
die untergeordneten Attribute year
, month
und day
verwendet werden, die es übernimmt, weil es mit datePropertyOptions
als Datentyp date
definiert wird.
Da year
, month
und day
jedoch nicht im Schema definiert sind, können Sie keine dieser Attribute abfragen (z.B. year
).
Außerdem wird das wiederholbare Attribut actorName
mithilfe einer Liste von Werten indexiert.
Mögliche Indexierungsprobleme identifizieren
Die beiden häufigsten Probleme im Zusammenhang mit Schemas und Indexierung sind:
Ihre Indexierungsanfrage enthält ein Schemaobjekt oder einen Attributnamen, der nicht beim Schemadienst registriert wurde. Dies führt dazu, dass das Attribut oder das Objekt ignoriert wird.
Ihre Indexierungsanforderung hat ein Attribut mit einem Typwert, der sich von dem im Schema registrierten Typ unterscheidet. Dies führt dazu, dass Cloud Search bei der Indexierung einen Fehler zurückgibt.
Schema mit mehreren Abfragetypen testen
Bevor Sie Ihr Schema für ein großes Produktionsdaten-Repository registrieren, sollten Sie es mit einem kleineren Testdaten-Repository testen. Wenn Sie mit einem kleineren Test-Repository testen, können Sie schnell Anpassungen an Ihrem Schema vornehmen und die indexierten Daten löschen, ohne dass sich dies auf einen größeren Index oder einen vorhandenen Produktionsindex auswirkt. Erstellen Sie für ein Testdaten-Repository eine ACL, die nur einen Testnutzer autorisiert, damit andere Nutzer diese Daten nicht in den Suchergebnissen sehen.
Informationen zum Erstellen einer Suchoberfläche, mit der Sie Suchanfragen validieren können, finden Sie unter Die Suchoberfläche.
Dieser Abschnitt enthält mehrere verschiedene Beispielabfragen, mit denen Sie ein Filmschema testen können.
Mit einer generischen Abfrage testen
Bei einer generischen Abfrage werden alle Elemente in der Datenquelle zurückgegeben, die einen bestimmten String enthalten. Mithilfe einer Suchoberfläche können Sie eine allgemeine Abfrage für eine Filmdatenquelle ausführen. Geben Sie dazu das Wort "titanic" ein und drücken Sie die "titanic". Alle Filme mit dem Wort „Titanic“ sollten in den Suchergebnissen zurückgegeben werden.
Mit einem Operator testen
Wenn Sie der Abfrage einen Operator hinzufügen, werden die Ergebnisse auf die Elemente beschränkt, die diesem Operatorwert entsprechen. Sie können beispielsweise den Operator actor
verwenden, um alle Filme zu finden, in denen ein bestimmter Schauspieler mitspielt. Über eine Suchoberfläche können Sie diese Operatorabfrage ausführen, indem Sie einfach ein Operator=Wert-Paar eingeben, z. B. "actor:Zane", und dann die "actor:Zane" drücken. Alle Filme, in denen Zane mitspielt,
sollten in den Suchergebnissen angezeigt werden.
Schema abstimmen
Nachdem Ihr Schema und Ihre Daten verwendet werden, beobachten Sie weiter, was bei Ihren Nutzern funktioniert und was nicht. Sie sollten das Schema an die folgenden Situationen anpassen:
- Indexieren eines Felds, das zuvor noch nicht indexiert wurde. Wenn Ihre Nutzer beispielsweise wiederholt anhand des Regisseurnamens nach Filmen suchen, können Sie das Schema so anpassen, dass der Regisseurname als Operator unterstützt wird.
- Namen von Suchoperatoren auf Grundlage von Nutzerfeedback ändern Operatornamen sind nutzerfreundlich. Wenn sich Ihre Nutzer ständig an den falschen Operatornamen „erinnern“, sollten Sie erwägen, ihn zu ändern.
Neuindexierung nach einer Schemaänderung
Wenn Sie einen der folgenden Werte in Ihrem Schema ändern, müssen Sie die Daten nicht noch einmal indexieren. Sie können einfach eine neue UpdateSchema-Anfrage senden und der Index funktioniert weiterhin:
- Operatornamen
- Ganzzahlige Mindest- und Höchstwerte.
- Ranking nach Ganzzahl und Aufzählung.
- Aktualitätsoptionen.
- Anzeigeoptionen
Bei den folgenden Änderungen funktionieren zuvor indexierte Daten weiterhin gemäß dem zuvor registrierten Schema. Sie müssen vorhandene Einträge jedoch neu indexieren, damit Änderungen basierend auf dem aktualisierten Schema angezeigt werden, wenn es die folgenden Änderungen enthält:
- Neue Eigenschaft oder neues Objekt hinzufügen oder entfernen
isReturnable
,isFacetable
oderisSortable
vonfalse
intrue
ändern.
Sie sollten isFacetable
oder isSortable
nur dann auf true
festlegen, wenn es für einen eindeutigen Anwendungsfall erforderlich ist.
Wenn Sie schließlich Ihr Schema aktualisieren, indem Sie ein Attribut mit isSuggestable
markieren, müssen Sie Ihre Daten neu indexieren. Dadurch kommt es bei der Verwendung der automatischen Vervollständigung für dieses Attribut zu einer Verzögerung.
Unzulässige Property-Änderungen
Einige Schemaänderungen sind nicht zulässig, auch wenn Sie Ihre Daten neu indexieren, da sie den Index zerstören oder zu schlechten oder inkonsistenten Suchergebnissen führen. Dazu gehören Änderungen an:
- Property-Datentyp.
- Attributnamen
exactMatchWithOperator
-Einstellung.retrievalImportance
-Einstellung.
Es gibt jedoch eine Möglichkeit, diese Einschränkung zu umgehen.
Komplexe Schemaänderungen vornehmen
Nach der Indexierung des Repositorys werden in Cloud Search bestimmte Änderungen in UpdateSchema-Anfragen verhindert, um Änderungen zu vermeiden, die zu schlechten Suchergebnissen oder einem fehlerhaften Suchindex führen würden. Beispielsweise kann der Datentyp oder der Name eines Attributs nicht mehr geändert werden, nachdem sie festgelegt wurden. Diese Änderungen können nicht über eine einfache UpdateSchema-Anforderung vorgenommen werden, selbst wenn Sie Ihre Daten neu indexieren.
Wenn Sie eine ansonsten nicht zugelassene Änderung an Ihrem Schema vornehmen müssen, können Sie häufig eine Reihe zulässiger Änderungen vornehmen, die dieselbe Wirkung erzielen. Im Allgemeinen umfasst dies zuerst die Migration indexierter Attribute von einer älteren Objektdefinition in eine neuere und das Senden einer Indexierungsanfrage, die nur das neuere Attribut verwendet.
So ändern Sie den Datentyp oder den Namen einer Eigenschaft:
- Fügen Sie der Objektdefinition in Ihrem Schema ein neues Attribut hinzu. Verwenden Sie einen anderen Namen als das Attribut, das Sie ändern möchten.
- Führen Sie mit der neuen Definition die Anforderung UpdateSchema aus. Denken Sie daran, das gesamte Schema, einschließlich des neuen und alten Attributs, in der Anfrage zu senden.
Backfill des Index aus dem Daten-Repository. Senden Sie zum Backfill des Index alle Indexierungsanfragen mit dem neuen Attribut, nicht jedoch mit dem alten Attribut, da dies dazu führen würde, dass Abfrageübereinstimmungen doppelt gezählt werden.
- 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 aus, um dies zu überprüfen.
Löschen Sie die alte Property. Senden Sie eine weitere UpdateSchema-Anforderung ohne den alten Attributnamen und verwenden Sie ihn bei zukünftigen Indexierungsanfragen nicht mehr.
Migrieren Sie die Nutzung der alten Property zur neuen. Wenn Sie beispielsweise den Attributnamen von „creator“ zu „author“ ändern, müssen Sie den Abfragecode so aktualisieren, dass „author“ dort verwendet wird, wo zuvor auf „creator“ verwiesen wurde.
Gelöschte Attribute und Objekte werden 30 Tage lang in Cloud Search gespeichert, um zu verhindern, dass sie wiederverwendet werden, die zu unerwarteten Indexierungsergebnissen führen. Innerhalb dieser 30 Tage sollten Sie die gelöschten Objekte oder Attribute nicht mehr verwenden und auch bei zukünftigen Indexanfragen weglassen. So sorgen Sie dafür, dass die Richtigkeit Ihres Index gewahrt bleibt, falls Sie sich später dazu entschließen, dieses Attribut oder dieses Objekt wieder zu aktivieren.
Größenbeschränkungen kennen
Bei Cloud Search gelten Einschränkungen für die Größe von strukturierten Datenobjekten und Schemas. Diese Limits sind:
- Die maximale Anzahl von Objekten der obersten Ebene beträgt 10.
- Die maximale Tiefe einer strukturierten Datenhierarchie beträgt 10 Ebenen.
- Die Gesamtzahl der Felder in einem Objekt ist auf 1.000 begrenzt. Dazu gehören die Anzahl der einfachen Felder plus die Summe der Felder in jedem verschachtelten Objekt.
Nächste Schritte
Als Nächstes könnten Sie Folgendes tun:
Erstellen Sie eine Suchoberfläche, um das Schema zu testen.
Optimieren Sie Ihr Schema, um die Suchqualität zu verbessern.
Schema für eine optimale Abfrageinterpretation strukturieren.
Hier erfahren Sie, wie Sie das
_dictionaryEntry
-Schema nutzen können, um Synonyme für Begriffe zu definieren, die in Ihrem Unternehmen häufig verwendet werden. Informationen zur Verwendung des Schemas_dictionaryEntry
finden Sie unter Synonyme definieren.Erstellen Sie einen Connector.