Schemat Google Cloud Search to struktura JSON, która definiuje obiektów, właściwości i opcji służących do indeksowania danych i wykonywania dotyczących ich zapytań. Łącznik treści odczytuje dane z repozytorium i na podstawie zarejestrowanego schematu, struktury i indeksujące dane.
Schemat możesz utworzyć, przesyłając do interfejsu API obiekt schematu JSON a następnie ją zarejestrować. Musisz zarejestrować obiekt schematu dla każdego z repozytoriów, zanim zindeksujesz dane.
Ten dokument zawiera podstawowe informacje o tworzeniu schematów. Informacje na temat tego, jak aby dostroić schemat w celu zwiększenia wygody wyszukiwania, zapoznaj się z artykułem Popraw jakość wyszukiwania.
Tworzenie schematu
Poniżej znajduje się lista czynności potrzebnych do utworzenia schematu Cloud Search:
- Identyfikowanie oczekiwanego zachowania użytkowników
- Inicjowanie źródła danych
- Tworzenie schematu
- Ukończ przykładowy schemat
- Rejestrowanie schematu
- Indeksowanie danych
- Testowanie schematu
- Dostrajanie schematu
Określanie oczekiwanego zachowania użytkowników
Przewidywanie typów zapytań użytkowników pomaga odpowiednio zarządzać strategią do utworzenia schematu.
Na przykład przy wysyłaniu zapytań do bazy danych filmów można przewidzieć użytkownik wpisuje zapytanie, takie jak „Pokaż wszystkie filmy, w których gra Robert Redford”. Schemat musi więc obsługiwać wyniki zapytań oparte na "wszystkich filmach z konkretnego aktora”.
Aby zdefiniować schemat odzwierciedlający wzorce zachowań użytkowników, rozważ: wykonując te zadania:
- Ocenianie zróżnicowanych zestawów pożądanych zapytań pochodzących od różnych użytkowników.
- Zidentyfikuj obiekty, których można używać w zapytaniach. Obiekty są logiczne zestawów powiązanych danych, takich jak film w bazie filmów.
- Określ właściwości i wartości, które składają się na obiekt. Mogą one używanych w zapytaniach. Właściwości to atrybuty obiektu, które można indeksować. mogą zawierać wartości podstawowe lub inne obiekty. Na przykład obiekt video może mieć takie właściwości, jak tytuł filmu czy data wydania jako wartości podstawowe. Obiekt filmowy może też zawierać inne obiektów takich jak członkowie obsady, które mają własne właściwości, takie jak nazwa użytkownika lub rola.
- Wskaż przykładowe prawidłowe wartości właściwości. Wartości to rzeczywiste dane. zindeksowanej dla danej usługi. Na przykład tytuł jednego z filmów w Twojej bazie danych może mieć postać „Poszukiwacze Zaginionej Arki”.
- Określ opcje sortowania i rankingu odpowiednie dla użytkowników. Przykład: podczas wyszukiwania filmów warto posortować filmy chronologicznie i według oceny odbiorców i nie trzeba ich sortować alfabetycznie według tytułu.
- (opcjonalnie) Zastanów się, czy jedna z usług reprezentuje bardziej szczegółową kontekst, w którym mogą być przeprowadzane wyszukiwania – na przykład hasło użytkownika stanowiska pracy lub dzięki czemu sugestie autouzupełniania mogą być podpowiadane na podstawie i dodaje kontekst. Na przykład w przypadku osób przeszukujących bazę filmów użytkownicy mogą mogą być zainteresowani tylko filmami z określonego gatunku. Użytkownicy określiliby to, gatunek, do którego mają wrócić, na przykład w ramach wyszukiwania. profil. Następnie, gdy użytkownik zacznie wpisywać zapytanie o filmy, tylko filmy z wybranego gatunku, np. „filmy akcji”, są sugerowane jako są częścią sugestii autouzupełniania.
- Utwórz listę tych obiektów, właściwości i przykładowych wartości, których wartości można używane w wyszukiwaniach. (Szczegółowe informacje o sposobie korzystania z tej listy znajdziesz w więcej informacji znajdziesz w sekcji Definiowanie opcji operatora).
Zainicjuj źródło danych
Źródło danych reprezentuje dane z repozytorium, które zostało zindeksowane i przechowywane w Google Cloud. Aby dowiedzieć się, jak inicjować źródło danych, patrz Zarządzanie źródłami danych innych firm
Wyniki wyszukiwania użytkownika są zwracane ze źródła danych. Gdy użytkownik kliknie w wyniku wyszukiwania, Cloud Search kieruje użytkownika do konkretnego elementu za pomocą Adres URL podany w prośbie o zindeksowanie.
Zdefiniuj obiekty
Podstawową jednostką danych w schemacie jest obiekt, nazywany również „schematem” Obiekt”, czyli logiczną strukturę danych. W bazie filmów logiczna struktura danych to „film”. Innym obiektem może być „person” (osoba) do reprezentują obsadę i ekipę filmu.
Każdy obiekt w schemacie ma serię właściwości lub atrybutów, które Opisz obiekt, np. tytuł i czas trwania filmu lub nazwę. i datę urodzenia danej osoby. Obiektem może być obiekt podstawowy wartości i innych obiektów.
Rysunek 1 przedstawia film i obiekty osób oraz powiązane usług.
![Rysowanie połączeń schematowych między encjami](https://developers-dot-devsite-v2-prod.appspot.com/static/cloud-search/images/schemaExample.png?authuser=19&hl=pl)
Schemat Cloud Search jest
to listę instrukcji definicji obiektów zdefiniowanych w funkcji
Tag objectDefinitions
. Ten fragment kodu schematu pokazuje
instrukcje objectDefinitions
dla obiektów schematu filmów i osób.
{
"objectDefinitions": [
{
"name": "movie",
...
},
{
"name": "person",
...
}
]
}
Definiując obiekt schematu, podajesz name
dla obiektu, który musi
musi być niepowtarzalna wśród wszystkich innych obiektów w schemacie. Zwykle jest używana name
wartość opisująca obiekt, np. movie
w przypadku obiektu movie. Schemat
usługa używa pola name
jako identyfikatora klucza obiektów możliwych do indeksowania. Dla:
więcej informacji o polu name
znajdziesz w
Definicja obiektu.
Zdefiniuj właściwości obiektu
Zgodnie z informacjami podanymi w pliku referencyjnym dla
ObjectDefinition,
po nazwie obiektu znajduje się zbiór
options
,
oraz listę
propertyDefinitions
options
może
składają się dodatkowo
freshnessOptions
oraz
displayOptions
.
freshnessOptions
służą do dostosowywania rankingu wyszukiwania na podstawie aktualności danego elementu.
displayOptions
pozwalają określić, czy określone etykiety i właściwości mają być wyświetlane
w wynikach wyszukiwania obiektu.
propertyDefinitions
określasz właściwości obiektu, np. tytuł filmu.
i datę premiery.
Ten fragment kodu pokazuje obiekt movie
z 2 właściwościami: movieTitle
i 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"
}
...
]
}
]
}
PropertyDefinition składa się z następujących elementów:
- ciąg tekstowy
name
. - Lista opcji niezależnych od typu, takich jak
isReturnable
w poprzedniej sekcji . - typ i powiązane z nim opcje specyficzne dla danego typu;
takich jak
textPropertyOptions
iretrievalImportance
w poprzednim fragmencie. operatorOptions
opisujący, w jaki sposób usługa jest używana jako operator wyszukiwania.- Co najmniej 1 element
displayOptions
, np.displayLabel
w poprzednim fragmencie.
Właściwość name
właściwości musi być unikalna w obrębie obiektu, który ją zawiera,
ale ta sama nazwa może być używana w innych obiektach i obiektach podrzędnych.
Na ilustracji 1 tytuł i data premiery filmu zostały określone dwukrotnie:
raz w obiekcie movie
, a potem ponownie w obiekcie podrzędnym filmography
obiektu
person
obiekt. Ten schemat wykorzystuje ponownie pole movieTitle
Dzięki temu schemat obsługuje 2 rodzaje działań związanych z wyszukiwaniem:
- Pokaż wyniki wyszukiwania filmów, gdy użytkownicy wyszukują tytuł filmu.
- Pokaż wyniki dla osób, które szukają tytułu filmu w której grał aktor.
Schemat ponownie wykorzystuje pole releaseDate
, ponieważ ma to samo
znaczenie dla dwóch pól movieTitle
.
Tworząc własny schemat, zastanów się, w jaki sposób repozytorium może mieć powiązane pola zawierające dane, które chcesz zadeklarować w schemacie więcej niż raz.
Dodaj opcje niezależne od typu
PropertyDefinition Wyświetla ogólne opcje funkcji wyszukiwania wspólne dla wszystkich usług niezależnie od typu danych.
isReturnable
– wskazuje, czy usługa identyfikuje dane, które powinny zostać zwracanych w wynikach wyszukiwania przez interfejs Query API. Cały przykładowy film właściwości są zwracane. Właściwości bez możliwości zwrotu można wykorzystać do wyszukiwania lub ranking wyników bez zwracania użytkownikowi.isRepeatable
– wskazuje, czy w danej usłudze dozwolonych jest kilka wartości. Dla: Na przykład film ma tylko jedną datę premiery, ale może w nim uczestniczyć wielu aktorów.isSortable
– oznacza, że właściwość można używać do sortowania. Ten nie może być prawdziwe w przypadku właściwości, które są powtarzalne. Na przykład wyniki wyszukiwania filmów można sortować według daty premiery lub oceny odbiorców.isFacetable
– oznacza, że właściwość może być używana do generowania aspektów. Aspekt służy do zawężania wyników wyszukiwania, dzięki którym użytkownik widzi początkowych wyników, a potem dodaje kryteria (czyli aspekty) w celu ich dalszego zawężenia. wyników. Ta opcja nie może być spełniony w przypadku właściwości, których typ to obiekt Aby można było ustawić tę opcję,isReturnable
musi mieć wartość Prawda. Ta opcja jest dostępna tylko obsługiwane w przypadku właściwości wyliczeniowych, logicznych i tekstowych. Na przykład w naszym przykładowym schemacie możemygenre
,actorName
,userRating
impaaRating
mogą mieć możliwość określania aspektów, aby im to umożliwić do interaktywnego zawężania wyników wyszukiwania.isWildcardSearchable
oznacza, że użytkownicy mogą wyszukiwać za pomocą symboli wieloznacznych tę usługę. Ta opcja jest dostępna tylko w przypadku właściwości tekstowych. Jak symbol wieloznaczny zależy od wartości ustawionej w polu tekstowym exactMatchWithOperator. JeśliexactMatchWithOperator
ma wartośćtrue
, wartość tekstową jest tokenizowana jako jedna wartość atomowa, a wyszukiwanie przy użyciu symboli wieloznacznych to przeciwko niemu. Jeśli na przykład wartością tekstową jestscience-fiction
, zapytanie z symbolem wieloznacznymscience-*
pasuje do tego zapytania. JeśliexactMatchWithOperator
ma wartośćfalse
, wartość tekstowa jest tokenizowana, a wyszukiwanie przy użyciu symbolu wieloznacznego jest wykonywane pod kątem za każdy token. Jeśli na przykład wartością tekstową jest „science-fiction”, symbol wieloznaczny zapytaniasci*
lubfi*
pasują do elementu, alescience-*
nie pasuje do tego elementu.
Te ogólne parametry funkcji wyszukiwania są wartościami logicznymi. oni
Wszystkie mają domyślną wartość false
i muszą być ustawione na true
do wykorzystania.
W tabeli poniżej znajdziesz parametry logiczne ustawione na true
dla wszystkich właściwości obiektu movie
:
Właściwość | isReturnable |
isRepeatable |
isSortable |
isFacetable |
isWildcardSearchable |
---|---|---|---|---|---|
movieTitle |
prawda | prawda | |||
releaseDate |
prawda | prawda | |||
genre |
prawda | prawda | prawda | ||
duration |
prawda | ||||
actorName |
prawda | prawda | prawda | prawda | |
userRating |
prawda | prawda | |||
mpaaRating |
prawda | prawda |
Zarówno genre
, jak i actorName
mają wartość isRepeatable
ustawioną na true
ponieważ film może należeć do więcej niż jednego gatunku i zwykle
więcej niż jednego aktora. Nie można sortować właściwości, jeśli jest powtarzalna
lub zawarte w powtarzalnym obiekcie podrzędnym.
Zdefiniuj typ
PropertyDefinition
znajduje się lista kilku elementów xxPropertyOptions
, gdzie xx
to konkretny typ,
na przykład boolean
. Aby ustawić typ danych usługi, musisz zdefiniować
odpowiedni obiekt typu data. Definiowanie obiektu typu danych dla usługi
określa typ danych tej usługi. Na przykład zdefiniowanie
Parametr textPropertyOptions
dla właściwości movieTitle
wskazuje, że film
tytuł jest typu tekst. Ten fragment kodu pokazuje właściwość movieTitle
a textPropertyOptions
ustawia typ danych.
{
"name": "movieTitle",
"isReturnable": true,
"isWildcardSearchable": true,
"textPropertyOptions": {
...
},
...
},
Z usługą może być powiązany tylko 1 typ danych. Na przykład w naszym filmie
schemat, releaseDate
może być tylko datą (np. 2016-01-13
) lub ciąg znaków
(np. January 13, 2016
), ale nie w obu przypadkach.
Oto obiekty typu data używane do określania typów danych dla funkcji właściwości w przykładowym schemacie Movie:
Właściwość | Obiekt typu danych |
---|---|
movieTitle |
textPropertyOptions |
releaseDate |
datePropertyOptions |
genre |
enumPropertyOptions |
duration |
textPropertyOptions |
actorName |
textPropertyOptions |
userRating |
integerPropertyOptions |
mpaaRating |
textPropertyOptions |
Typ danych, który wybierzesz dla usługi, zależy od oczekiwanych przypadków użycia.
W wymyślonym scenariuszu tego schematu filmowego użytkownicy muszą oczekiwać,
aby posortować wyniki chronologicznie, więc releaseDate
jest obiektem daty.
Jeśli na przykład można było porównać wersje z grudnia,
na przestrzeni lat ze styczniowymi wydaniami, przydatny może być format ciągu znaków.
Konfigurowanie opcji specyficznych dla danego typu
PropertyDefinition
linków do opcji dostępnych w przypadku każdego typu. Najbardziej charakterystyczne dla danego typu
opcje są opcjonalne, z wyjątkiem listy possibleValues
w
enumPropertyOptions
Dodatkowo opcja orderedRanking
umożliwia:
wartości rankingu względem siebie.
ten fragment kodu pokazuje właściwość movieTitle
z parametrem textPropertyOptions
i ustawiaj typ danych oraz korzystaj z odpowiedniej opcji typu retrievalImportance
.
{
"name": "movieTitle",
"isReturnable": true,
"isWildcardSearchable": true,
"textPropertyOptions": {
"retrievalImportance": { "importance": "HIGHEST" },
...
},
...
}
Oto dodatkowe opcje zależne od typu użyte w przykładowym schemacie:
Właściwość | Typ | Opcje związane z konkretnym typem |
---|---|---|
movieTitle |
textPropertyOptions |
retrievalImportance |
releaseDate |
datePropertyOptions |
|
genre |
enumPropertyOptions |
|
duration |
textPropertyOptions |
|
actorName |
textPropertyOptions |
|
userRating |
integerPropertyOptions |
orderedRanking , maximumValue |
mpaaRating |
textPropertyOptions |
Zdefiniuj opcje operatora
Oprócz opcji związanych z konkretnym typem, każdy typ ma zestaw
operatorOptions
Te opcje opisują sposób wykorzystania usługi jako
operator wyszukiwania. Ten fragment kodu pokazuje usługę movieTitle
z
textPropertyOptions
ustawia typ danych, a
retrievalImportance
i operatorOptions
.
{
"name": "movieTitle",
"isReturnable": true,
"isWildcardSearchable": true,
"textPropertyOptions": {
"retrievalImportance": { "importance": "HIGHEST" },
"operatorOptions": {
"operatorName": "title"
}
},
...
}
Każdy element typu operatorOptions
ma element operatorName
, np. title
dla
movieTitle
Nazwa operatora to operator wyszukiwania danej usługi. O
operator wyszukiwania to rzeczywisty parametr, którego mają używać użytkownicy
podczas zawężania wyszukiwania. Na przykład do wyszukiwania filmów według tytułu,
użytkownik wpisze title:movieName
, gdzie movieName
to tytuł filmu.
Nazwy operatorów nie muszą być takie same jak nazwa właściwości. Zamiast tego: używaj nazw operatorów, które odzwierciedlają najczęściej używane słowa przez użytkowników w Twojej organizacji. Jeśli na przykład użytkownicy wolą termin „name” zamiast „tytuł” dla tytułu filmu, nazwą operatora powinna być ustaw wartość „name”.
Tej samej nazwy operatora możesz używać w wielu usługach, o ile wszystkie
właściwości są tego samego typu. Jeśli używasz współdzielonej nazwy operatora w trakcie
zapytania, pobierane są wszystkie właściwości korzystające z tej nazwy operatora. Przykład:
załóżmy, że obiekt filmu zawiera obiekty plotSummary
i plotSynopsis
usług, a każda z nich miała operatorName
o wartości plot
. Jako
o ile obie te właściwości są tekstowe (textPropertyOptions
), pojedynczy element
za pomocą operatora wyszukiwania plot
pobiera je oba.
Oprócz pola operatorName
właściwości, które można sortować, mogą mieć
lessThanOperatorName
i greaterThanOperatorName
pola w operatorOptions
.
Użytkownicy mogą używać tych opcji do tworzenia zapytań na podstawie porównań
przesłana wartość.
I wreszcie, textOperatorOptions
ma pole exactMatchWithOperator
w
operatorOptions
Jeśli
ustaw exactMatchWithOperator
na true
, ciąg zapytania musi
pasują do całej wartości właściwości, a nie tylko w tekście.
W wyszukiwaniach z operatorami wartość tekstowa jest traktowana jako jedna wartość atomowa,
dopasowania aspektów.
Rozważ na przykład indeksowanie obiektów książki lub filmu z właściwościami gatunku.
Gatunki mogą obejmować „Nauka”, „Nauka” i „Fikcja”. Na
Pole exactMatchWithOperator
ustawiono na wartość false
lub zostało pominięte,
szukając gatunku lub
wybierając „Nauka” lub „Fiction” aspektu także
Zwrócone wyniki dla hasła „science fiction” tokenizowany jest tekst, a tag
„Nauka” i „Fiction” że istnieją tokeny w kategorii „science-fiction”.
Gdy exactMatchWithOperator
to true
,
tekst jest traktowany jako pojedynczy token, więc żaden z nich
„Nauka” ani „Fiction” pasuje do „science-fiction”.
(Opcjonalnie) Dodaj sekcję displayOptions
Na końcu dowolnego dokumentu znajduje się opcjonalna sekcja displayOptions
propertyDefinition
. Ta sekcja zawiera 1 ciąg displayLabel
.
displayLabel
to zalecana, przyjazna dla użytkownika etykieta tekstowa
dla usługi. Jeśli usługa jest skonfigurowana do wyświetlania za pomocą
ObjectDisplayOptions,
jest wyświetlana przed usługą. Jeśli usługa jest skonfigurowana
dla sieci reklamowej, a zasada displayLabel
nie jest zdefiniowana, zostanie użyta tylko wartość właściwości
wyświetlenie.
Ten fragment kodu pokazuje właściwość movieTitle
z parametrem displayLabel
z wartością „Tytuł”.
{
"name": "movieTitle",
"isReturnable": true,
"isWildcardSearchable": true,
"textPropertyOptions": {
"retrievalImportance": { "importance": "HIGHEST" },
"operatorOptions": {
"operatorName": "title"
}
},
"displayOptions": {
"displayLabel": "Title"
}
},
Oto wartości displayLabel
dla wszystkich właściwości obiektu movie
obiekt w przykładowym schemacie:
Właściwość | displayLabel |
---|---|
movieTitle |
Title |
releaseDate |
Release date |
genre |
Genre |
duration |
Run length |
actorName |
Actor |
userRating |
Audience score |
mpaaRating |
MPAA rating |
(Opcjonalnie) Dodaj sekcję suggestionFilteringOperators[]
Jest też opcjonalny
suggestionFilteringOperators[]
na końcu dowolnej sekcji propertyDefinition
. Z tej sekcji dowiesz się,
zdefiniować właściwość służącą do filtrowania sugestii autouzupełniania. Na przykład:
może zdefiniować operator genre
, aby filtrować sugestie na podstawie zapytania użytkownika
preferowany gatunek filmowy. Następnie, gdy użytkownik wpisuje zapytanie, wyświetlają się tylko te
W ramach autouzupełniania wyświetlane są filmy pasujące do ich preferowanego gatunku.
sugestie.
Rejestrowanie schematu
Aby uporządkowane dane były zwracane z zapytań w Cloud Search, musisz zarejestrować swojego schematu za pomocą usługi schematów Cloud Search. Rejestracja schematu wymaga identyfikator źródła danych uzyskany podczas Krok Zainicjuj źródło danych.
Korzystając z identyfikatora źródła danych, wyślij UpdateSchema o zarejestrowanie schematu.
Zgodnie z informacjami na stronie UpdateSchema strona referencyjna wyślij następujące żądanie HTTP, aby zarejestrować schemat:
PUT https://cloudsearch.googleapis.com/v1/indexing/{name=datasources/*}/schema
Treść żądania powinna zawierać:
{ "validateOnly": // true or false, "schema": { // ... Your complete schema object ... } }
Użyj opcji validateOnly
, aby przetestować poprawność schematu bez
rejestracji.
Indeksowanie danych
Po zarejestrowaniu schematu wypełnij źródło danych za pomocą Indeks połączeń. Indeksowanie odbywa się zwykle w oprogramowaniu sprzęgającym treści.
Żądanie indeksowania pojedynczego filmu do interfejsu API REST przy użyciu schematu Movie wygląda tak:
{
"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"
}
Zwróć uwagę, jak wartość movie
w polu objectType
jest zgodna z wartością obiektu
nazwy definicji w schemacie. Dzięki dopasowaniu tych 2 wartości Cloud Search wie,
obiektu schematu, który ma być używany podczas indeksowania.
Zwróć też uwagę na sposób, w jaki indeksowanie właściwości schematu releaseDate
używa
właściwości podrzędnych year
, month
i day
, które dziedziczy, ponieważ jest
zdefiniowane jako typ danych date
, używając do tego celu datePropertyOptions
.
Jednak ze względu na to, że obiekty year
, month
i day
nie są zdefiniowane w schemacie,
nie może przesłać zapytania o jedną z tych usług (np. year
).
Zwróć też uwagę na to, jak powtarzalna właściwość actorName
jest indeksowana za pomocą listy
wartości.
Identyfikowanie potencjalnych problemów z indeksowaniem
Dwa najczęstsze problemy związane ze schematami i indeksowaniem to:
Twoja prośba o zindeksowanie zawiera nazwę obiektu schematu lub właściwości, która nie została i zarejestrowano w usłudze schematu. Ten problem powoduje, że właściwość lub obiekt do zignorowania.
Twoja prośba o zindeksowanie zawiera właściwość o wartości typu innej niż typ zarejestrowanych w schemacie. Ten problem powoduje, że Cloud Search zwraca błąd podczas indeksowania.
Testowanie schematu za pomocą kilku typów zapytań
Zanim zarejestrujesz schemat do dużego repozytorium danych produkcyjnych, warto przeprowadzić testy przy użyciu mniejszego repozytorium danych testowych. Testowanie za pomocą mniejsze repozytorium testowe umożliwia szybkie wprowadzanie poprawek do schematu, i usunięcie zindeksowanych danych bez wpływu na lub istniejącego indeksu produkcyjnego. W przypadku repozytorium danych testowych utwórz lista kontroli dostępu (ACL), która autoryzuje tylko użytkownika testowego, aby inni użytkownicy nie widzieli tych danych; w wynikach wyszukiwania.
Aby utworzyć interfejs wyszukiwania do weryfikowania zapytań, zapoznaj się z artykułem Interfejs wyszukiwania
Ta sekcja zawiera kilka różnych przykładowych zapytań, których możesz użyć schemat filmu.
Testowanie za pomocą zapytania ogólnego
Zapytanie ogólne zwraca wszystkie elementy w źródle danych zawierające określony ciągu znaków. Korzystając z interfejsu wyszukiwania, możesz uruchomić ogólne zapytanie dotyczące filmu źródła danych, wpisując słowo "titanic" i naciskając Return. Wszystkie filmy ze słowem „titanic” powinny być zwracane w wynikach wyszukiwania.
Testowanie z użyciem operatora
Dodanie operatora do zapytania ogranicza wyniki do pasujących elementów
. Możesz na przykład użyć operatora actor
, by znaleźć
wszystkich filmów z konkretnym aktorem. Za pomocą interfejsu wyszukiwania możesz:
tego operatora, wpisując w parze operator=value, np.
"actor:Zane" i naciśnij "actor:Zane". Wszystkie filmy, w których Zane występuje jako aktor
powinny być zwracane w wynikach wyszukiwania.
Dostrój schemat
Po użyciu schematu i danych kontynuuj monitorowanie, co działa i nie działa dla użytkowników. Rozważ dostosowanie schematu w tych sytuacjach:
- Zindeksowanie pola, które nie było wcześniej indeksowane. Na przykład: często wyszukujesz filmy według nazwiska reżysera, więc być może dostosować schemat, tak aby obsługiwał nazwę dyrektora jako operatora.
- zmienianie nazw operatorów wyszukiwania na podstawie opinii użytkowników, Nazwy operatorów to: z myślą o prostym w obsłudze. Jeśli użytkownicy stale „pamiętają” źle możesz ją zmienić.
Ponowne indeksowanie po zmianie schematu
Zmiana dowolnej z poniższych wartości w schemacie nie wymaga: do ponownego zindeksowania danych. Możesz po prostu przesłać nowe UpdateSchema , a indeks będzie nadal działać:
- Nazwy operatorów.
- Minimalna i maksymalna liczba całkowita.
- Ranking uporządkowany według liczb całkowitych i wyliczeniowych.
- Opcje aktualności.
- Opcje wyświetlania.
W przypadku tych zmian wcześniej zindeksowane dane będą nadal działać zgodnie z zarejestrowanym wcześniej schematem. Musisz jednak ponownie zindeksować wpisy, aby zobaczyć zmiany na podstawie zaktualizowanego schematu, jeśli zawiera on te zmiany:
- dodanie lub usunięcie nowej właściwości bądź obiektu,
- Zmieniam:
isReturnable
,isFacetable
lubisSortable
z:false
natrue
.
Ustaw isFacetable
lub isSortable
na true
tylko wtedy, gdy masz
i jasny przypadek użycia.
Gdy zaktualizujesz schemat, oznaczając właściwość isSuggestable
,
musisz ponownie zindeksować dane, co opóźnia korzystanie z autouzupełniania
tej usługi.
Niedozwolone zmiany właściwości
Niektóre zmiany schematu są niedozwolone nawet po ponownym zindeksowaniu danych, ponieważ spowoduje złamanie indeksu lub uzyskanie niespójnych bądź niespójnych wyników wyszukiwania. Te uwzględnij zmiany w:
- Typ danych usługi.
- Nazwa usługi.
exactMatchWithOperator
– ustawienie.retrievalImportance
– ustawienie.
Można jednak obejść to ograniczenie.
Wprowadzanie złożonej zmiany schematu
Aby uniknąć zmian, które mogłyby spowodować nieprawidłowe wyniki wyszukiwania lub nieprawidłowe wyszukiwanie Cloud Search blokuje pewne rodzaje zmian UpdateSchema żądań po zindeksowaniu repozytorium. Na przykład typ danych lub nazwy właściwości nie mogą być zmienione po jej ustawieniu. Te zmiany nie można osiągnąć za pomocą prostego UpdateSchema nawet po ponownym zindeksowaniu danych.
W sytuacjach, gdy konieczne będzie wprowadzenie niedozwolonej zmiany w często możesz wprowadzać serię dozwolonych zmian, aby osiągnąć ten sam efektu. Ogólnie polega na tym, że najpierw trzeba przenieść zindeksowane usługi. ze starszej definicji obiektu na nowszą, a następnie wysyłając prośby o zindeksowanie, która używa tylko nowszej usługi.
Poniżej znajdziesz instrukcje, jak zmienić typ danych lub nazwę usługi:
- Dodaj nową właściwość do definicji obiektu w schemacie. Użyj innego z usługi, którą chcesz zmienić.
- Wyślij UpdateSchema z nową definicją. Pamiętaj o wysłaniu całego schematu, w tym zarówno nową, jak i starą usługę.
Utwórz kopię zapasową indeksu z repozytorium danych. Aby uzupełnić indeks, wyślij wszystkie próśb o zindeksowanie za pomocą nowej usługi, ale nie starą usługę, ponieważ dopasowania zapytania byłyby liczone podwójnie.
- Podczas uzupełniania indeksowania sprawdź, czy jest nowa właściwość i aby uniknąć niespójności w działaniu usługi.
- Po zakończeniu uzupełniania wykonaj zapytania testowe, aby sprawdzić poprawność.
Usuń starą usługę. Wyślij kolejne UpdateSchema żądanie bez starej nazwy usługi i przestań używać starej, w kolejnych prośbach o zindeksowanie.
Przenieś wszystkie wykorzystanie starej usługi do nowej. Na przykład, jeśli jeśli zmienisz nazwę właściwości z twórcy na autora, musisz zaktualizować zapytanie do użycia autora w miejscu, w którym wcześniej się odwoływał do twórcy.
Cloud Search przechowuje rejestr wszystkich usuniętych usług lub obiektów przez 30 dni aby zapewnić ochronę przed ponownym użyciem, które mogłoby spowodować nieoczekiwane wyniki indeksowania. W ciągu tych 30 dni musisz przestać korzystać z usuniętych obiektu lub właściwości, w tym także pomijać je w przyszłych żądaniach indeksowania. Dzięki temu, jeśli w przyszłości zdecydujesz się na przywrócenie danej nieruchomości lub obiektu, możesz to zrobić w sposób zachowujący poprawność indeksu.
Ograniczenia rozmiaru
Cloud Search nakłada ograniczenia na rozmiar obiektów i schematów uporządkowanych danych. Limity te są następujące:
- Maksymalna liczba obiektów najwyższego poziomu to 10 obiektów.
- Maksymalna głębokość hierarchii uporządkowanych danych to 10 poziomów.
- łączna liczba pól w obiekcie jest ograniczona do 1000, która obejmuje liczbę pól podstawowych plus sumę liczby w każdym zagnieżdżonym obiekcie.
Następne kroki
Oto kilka kolejnych kroków, które możesz podjąć:
Utwórz interfejs wyszukiwania, aby przetestować schemat.
Dostrój schemat, aby poprawić jakość wyszukiwania.
Ustal strukturę schematu w celu uzyskania optymalnej interpretacji zapytań.
Dowiedz się, jak wykorzystać Schemat
_dictionaryEntry
do zdefiniowania synonimy haseł powszechnie używanych w firmie. Aby użyć funkcji_dictionaryEntry
schemat, patrz Zdefiniuj synonimy.Utwórz łącznik.