Schemat Google Cloud Search to struktura JSON, która definiuje obiekty, właściwości i opcje używane do indeksowania i przeszukiwania danych. Oprogramowanie sprzęgające treści odczytuje dane z Twojego repozytorium i na ich podstawie uporządkuje je oraz utworzy ich indeks na podstawie zarejestrowanego schematu.
Aby utworzyć schemat, prześlij do interfejsu API obiekt schematu w formacie JSON, a potem go zarejestruj. Zanim zaczniesz indeksować dane, musisz zarejestrować obiekt schematu dla każdego repozytorium.
Ten dokument zawiera podstawowe informacje o tworzeniu schematów. Informacje o dostrajaniu schematu w celu poprawy wyników wyszukiwania znajdziesz w artykule Poprawianie jakości wyszukiwania.
Tworzenie schematu
Oto lista czynności, które należy wykonać, aby utworzyć schemat Cloud Search:
- Określanie oczekiwanego zachowania użytkowników
- Inicjowanie źródła danych
- Tworzenie schematu
- Pełny przykładowy schemat
- Rejestrowanie schematu
- Indeksowanie danych
- Testowanie schematu
- Dostosowywanie schematu
Określanie oczekiwanego zachowania użytkowników
Przewidywanie typów zapytań użytkowników pomaga określić strategię tworzenia schematu.
Na przykład zapytanie dotyczące bazy danych filmów może dotyczyć zapytania „Pokaż wszystkie filmy, w których występuje Robert Redford”. Dlatego schemat musi obsługiwać wyniki zapytań oparte na „wszystkich filmach z udziałem określonego aktora”.
Aby zdefiniować schemat, który odzwierciedla wzorce zachowań użytkowników, wykonaj te czynności:
- Oceniać różne zestawy zapytań pochodzące od różnych użytkowników.
- Określ obiekty, które mogą być używane w zapytaniach. Obiekty to logiczne zbiory powiązanych danych, np. film w bazie danych filmów.
- Określ właściwości i wartości, z których składa się obiekt i które mogą być używane w zapytaniach. Właściwości to indeksowalne atrybuty obiektu. Mogą one zawierać wartości prymitywne lub inne obiekty. Na przykład obiekt filmu może mieć właściwości takie jak tytuł filmu i data premiery jako wartości proste. Obiekt filmu może też zawierać inne obiekty, takie jak członkowie obsady, które mają własne właściwości, takie jak imię i nazwisko lub rola.
- Określ przykładowe prawidłowe wartości właściwości. Wartości to rzeczywiste dane powiązane z usługą. Na przykład tytuł jednego z filmów w Twojej bazie danych może brzmieć „Poszukiwacze zaginionej arki”.
- Określ opcje sortowania i rankingu, których oczekują użytkownicy. Na przykład podczas wyszukiwania filmów użytkownicy mogą chcieć je sortować według chronologii i oceny przez widzów, a nie alfabetycznie według tytułu.
- (opcjonalnie) Zastanów się, czy jedna z Twoich usług reprezentuje bardziej szczegółowy kontekst, w którym mogą być wykonywane wyszukiwania, np. stanowisko lub dział, aby sugestie autouzupełniania mogły być wyświetlane na podstawie tego kontekstu. Na przykład w przypadku osób, które szukają w bazie danych filmów, użytkownicy mogą interesować się tylko określonym gatunkiem filmów. Użytkownicy mogliby definiować, jakiego gatunku mają być wyniki wyszukiwania, prawdopodobnie w ramach swojego profilu. Gdy użytkownik zacznie wpisywać zapytanie dotyczące filmów, w ramach sugestii autouzupełniania zostaną mu zaproponowane tylko filmy z jego ulubionego gatunku, np. „filmy akcji”.
- Zrób listę tych obiektów, właściwości i przykładowych wartości, których można używać w wyszukiwaniu. (szczegółowe informacje o tym, jak ta lista jest używana, znajdziesz w sekcji Definiowanie opcji operatora).
Zainicjuj źródło danych
Źródło danych reprezentuje dane z repozytorium, które zostały zindeksowane i zapisane w Google Cloud. Instrukcje inicjowania źródła danych znajdziesz w artykule Zarządzanie zewnętrznymi źródłami danych.
Wyniki wyszukiwania użytkownika są zwracane ze źródła danych. Gdy użytkownik kliknie wynik wyszukiwania, Cloud Search przekieruje go do rzeczywistego produktu za pomocą adresu URL podanego w żądaniu indeksowania.
Zdefiniuj obiekty
Podstawową jednostką danych w schemacie jest obiekt, nazywany też „obiektem schematu”, który stanowi logiczną strukturę danych. W bazie danych filmów jedną z logicznych struktur danych jest „film”. Innym obiektem może być „osoba”, która reprezentuje obsadę i ekipę filmową.
Każdy obiekt w schemacie ma szereg właściwości lub atrybutów opisujących obiekt, takich jak tytuł i czas trwania filmu albo imię i nazwisko oraz data urodzenia danej osoby. Właściwości obiektu mogą zawierać wartości prymitywne lub inne obiekty.
Rysunek 1 przedstawia obiekty film i osoba oraz powiązane z nimi właściwości.
Schemat Cloud Search jest zasadniczo listą instrukcji definicji obiektów zdefiniowanych w tagu objectDefinitions
. Ten fragment schematu pokazuje instrukcje objectDefinitions
dotyczące obiektów schematu filmu i osoby.
{
"objectDefinitions": [
{
"name": "movie",
...
},
{
"name": "person",
...
}
]
}
Podczas definiowania obiektu schematu podajesz dla niego name
, który musi być unikalny wśród wszystkich innych obiektów w schemacie. Zwykle używa się wartości name
opisującej obiekt, np. movie
w przypadku obiektu filmowego. Usługa schematu używa pola name
jako identyfikatora klucza obiektów możliwych do indeksowania. Więcej informacji o polu name
znajdziesz w definicji obiektu.
Zdefiniuj właściwości obiektu
Jak określono w dokumentacji dotyczącej ObjectDefinition, po nazwie obiektu znajdują się ciąg options
i lista propertyDefinitions
.
options
może jeszcze składać się z freshnessOptions
i displayOptions
.
freshnessOptions
służą do dostosowywania rankingu wyszukiwania na podstawie aktualności produktu. displayOptions
pozwala określić, czy w wynikach wyszukiwania obiektu mają być wyświetlane określone etykiety i właściwości.
W sekcji propertyDefinitions
określasz właściwości obiektu, takie jak tytuł filmu i data premiery.
Ten fragment kodu przedstawia 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"
}
...
]
}
]
}
Element PropertyDefinition składa się z tych elementów:
- ciąg tekstowy
name
. - Lista opcji niezależnych od typu, takich jak
isReturnable
w poprzednim fragmencie kodu. - typ i powiązane z nim opcje, takie jak
textPropertyOptions
iretrievalImportance
w poprzednim fragmencie kodu; operatorOptions
opisujący sposób użycia tej właściwości jako operatora wyszukiwania.- Co najmniej 1 element
displayOptions
, np.displayLabel
w poprzednim fragmencie kodu.
name
usługi musi być unikalny w ramach obiektu zawierającego,
ale ta sama nazwa może być używana w innych obiektach i podobiektach.
Na rysunku 1 tytuł i data premiery filmu zostały zdefiniowane dwukrotnie: raz w obiekcie movie
i ponownie w podrzędnym obiekcie filmography
obiektu person
. Ten schemat ponownie używa pola movieTitle
, aby obsługiwać dwa typy zachowań wyszukiwania:
- Pokaż wyniki wyszukiwania filmów, gdy użytkownicy wyszukują tytuł filmu.
- wyświetlać wyniki dotyczące osób, gdy użytkownicy wyszukują tytuł filmu, w którym wystąpił dany aktor.
Podobnie schemat ponownie używa pola releaseDate
, ponieważ ma ono to samo znaczenie w przypadku obu pól movieTitle
.
Podczas tworzenia własnego schematu zastanów się, czy w Twoim repozytorium nie ma powiązanych pól, które zawierają dane, które chcesz zadeklarować więcej niż raz w schemacie.
Dodaj opcje niezależne od typu
Element PropertyDefinition zawiera listę ogólnych opcji funkcji wyszukiwania wspólnych dla wszystkich usług niezależnie od typu danych.
isReturnable
– wskazuje, czy usługa identyfikuje dane, które powinny być zwracane w wynikach wyszukiwania za pomocą Query API. Wszystkie przykładowe właściwości filmów można zwrócić. Właściwości, których nie można zwracać, mogą być używane do wyszukiwania lub rankingu wyników bez zwracania ich użytkownikowi.isRepeatable
– wskazuje, czy w przypadku właściwości dozwolone są liczne wartości. Na przykład film ma tylko jedną datę premiery, ale może zawierać wielu aktorów.isSortable
– oznacza, że właściwość można używać do sortowania. Nie można tego zrobić w przypadku właściwości, które są powtarzalne. Na przykład wyniki dotyczące filmów mogą być sortowane według daty premiery lub oceny widzów.isFacetable
– wskazuje, że właściwość może być używana do generowania aspektów. Aspekt służy do doprecyzowania wyników wyszukiwania. Użytkownik widzi początkowe wyniki, a potem dodaje kryteria (czyli aspekty), aby jeszcze bardziej zawęzić wyniki. Ta opcja nie może być ustawiona na „prawda” w przypadku właściwości, których typ to obiekt, a aby ustawić tę opcję, musi być ustawiona wartość „prawda” w poluisReturnable
. Ta opcja jest obsługiwana tylko w przypadku właściwości typu enum, boolean i text. Na przykład w naszym przykładowym schemacie możemy ustawić jako zmiennegenre
,actorName
,userRating
impaaRating
, aby można było ich używać do interaktywnego doprecyzowania wyników wyszukiwania.isWildcardSearchable
oznacza, że użytkownicy mogą wyszukiwać w tej usłudze za pomocą symboli zastępczych. Ta opcja jest dostępna tylko w przypadku właściwości tekstowych. Sposób działania wyszukiwania z użyciem symboli wieloznacznych w polu tekstowym zależy od wartości ustawionej w polu exactMatchWithOperator. Jeśli parametrexactMatchWithOperator
ma wartośćtrue
, wartość tekstowa jest dzielona na tokeny jako jedna wartość atomowa, a następnie przeprowadzane jest wyszukiwanie z użyciem symboli wieloznacznych. Jeśli np. wartość tekstowa toscience-fiction
, zostanie do niej dopasowane zapytanie z symbolem wieloznacznymscience-*
. Jeśli parametrexactMatchWithOperator
ma wartośćfalse
, wartość tekstowa jest dzielona na tokeny, a w przypadku każdego z nich wykonywane jest wyszukiwanie z użyciem symboli wieloznacznych. Jeśli np. wartość tekstowa to „science-fiction”, zapytania z symbolami wieloznacznymisci*
lubfi*
pasują do elementu, ale zapytaniescience-*
nie pasuje.
Te parametry funkcji ogólnych wyszukiwania mają wartości logiczne. Wszystkie mają wartość domyślną false
i aby mogły być używane, muszą mieć wartość true
.
W tabeli poniżej przedstawiono 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
isRepeatable
mają wartość true
, ponieważ film może należeć do kilku gatunków i zwykle występuje
więcej niż 1 aktora. Nie można sortować właściwości, jeśli jest powtarzalna lub znajduje się w powtarzalnym obiekcie podrzędnym.
Zdefiniuj typ
Sekcja referencyjna PropertyDefinition zawiera listę kilku rodzajów wartości typu xxPropertyOptions
, przy czym xx
jest konkretnym typem, takim jak boolean
. Aby ustawić typ danych właściwości, musisz zdefiniować odpowiedni obiekt typu danych. Zdefiniowanie obiektu typu danych dla właściwości ustala typ danych tej właściwości. Na przykład zdefiniowanie wartości textPropertyOptions
dla właściwości movieTitle
wskazuje, że tytuł filmu jest typu text. Poniższy fragment kodu pokazuje właściwość movieTitle
z ustawieniem textPropertyOptions
typu danych.
{
"name": "movieTitle",
"isReturnable": true,
"isWildcardSearchable": true,
"textPropertyOptions": {
...
},
...
},
Z usługą może być powiązany tylko 1 typ danych. Na przykład w schemacie filmu releaseDate
może być tylko data (np. 2016-01-13
) lub ciąg znaków (np. January 13, 2016
), ale nie w obu przypadkach.
Oto obiekty typu danych, które służą do określania typów danych właściwości w przykładowym schemacie filmu:
Właściwość | Obiekt typu danych |
---|---|
movieTitle |
textPropertyOptions |
releaseDate |
datePropertyOptions |
genre |
enumPropertyOptions |
duration |
textPropertyOptions |
actorName |
textPropertyOptions |
userRating |
integerPropertyOptions |
mpaaRating |
textPropertyOptions |
Wybór typu danych dla usługi zależy od przewidywanych przypadków użycia.
W wyobrażonym scenariuszu tego schematu filmu użytkownicy chcą sortować wyniki według czasu, więc releaseDate
jest obiektem daty.
Jeśli na przykład przewidywany jest przypadek użycia polegający na porównywaniu wydań z grudnia w poszczególnych latach z wydaniami z stycznia, przydatny może być format ciągu znaków.
Konfigurowanie opcji związanych z typem
W sekcji PropertyDefinition znajdziesz linki do opcji dotyczących poszczególnych typów. Większość opcji związanych z typem jest opcjonalna, z wyjątkiem listy possibleValues
w sekcji enumPropertyOptions
. Dodatkowo opcja orderedRanking
umożliwia sklasyfikowanie wartości względem siebie. Poniższy fragment kodu pokazuje właściwość movieTitle
z ustawieniem textPropertyOptions
typu danych i opcją retrievalImportance
dla danego typu.
{
"name": "movieTitle",
"isReturnable": true,
"isWildcardSearchable": true,
"textPropertyOptions": {
"retrievalImportance": { "importance": "HIGHEST" },
...
},
...
}
Oto dodatkowe opcje związane z typem 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 zależnych od typu każdy typ ma zestaw opcjonalnych operatorOptions
Te opcje opisują sposób użycia właściwości jako operatora wyszukiwania. Poniższy fragment kodu pokazuje właściwość movieTitle
z ustawieniem textPropertyOptions
określającym typ danych oraz opcje retrievalImportance
i operatorOptions
związane z danym typem.
{
"name": "movieTitle",
"isReturnable": true,
"isWildcardSearchable": true,
"textPropertyOptions": {
"retrievalImportance": { "importance": "HIGHEST" },
"operatorOptions": {
"operatorName": "title"
}
},
...
}
Każdy element operatorOptions
ma element operatorName
, np. title
dla movieTitle
. Nazwa operatora to operator wyszukiwania danej usługi. Operator wyszukiwania to parametr, którego użytkownicy mają używać podczas zawężania wyszukiwania. Na przykład, aby wyszukać filmy na podstawie ich tytułu, użytkownik wpisze title:movieName
, gdzie movieName
to nazwa filmu.
Nazwy operatorów nie muszą być takie same jak nazwa usługi. Zamiast tego używaj nazw operatorów, które odzwierciedlają najpopularniejsze słowa używane przez użytkowników w organizacji. Jeśli na przykład użytkownicy wolą, aby nazwa filmu była określana jako „nazwa” zamiast „tytuł”, nazwę operatora należy ustawić na „nazwa”.
Możesz używać tej samej nazwy operatora w przypadku wielu usług, o ile wszystkie usługi mają ten sam typ. Gdy w zapytaniu używasz nazwy operatora, który jest używany wspólnie, pobierane są wszystkie usługi, które korzystają z tej nazwy. Załóżmy na przykład, że obiekt filmu ma właściwości plotSummary
i plotSynopsis
, a każda z tych właściwości ma wartość operatorName
plot
. Jeśli obie te właściwości są tekstowe (textPropertyOptions
), można je odnaleźć za pomocą pojedynczego zapytania z operatorem wyszukiwania plot
.
Oprócz operatorName
właściwości z możliwością sortowania mogą mieć w elemencie operatorOptions
pola lessThanOperatorName
i greaterThanOperatorName
.
Użytkownicy mogą używać tych opcji do tworzenia zapytań na podstawie porównań z przesłaną wartością.
I wreszcie textOperatorOptions
ma pole exactMatchWithOperator
w tabeli operatorOptions
. Jeśli exactMatchWithOperator
jest ustawione na true
, ciąg zapytania musi pasować do całej wartości właściwości, a nie tylko występować w tekście.
Wartość tekstowa jest traktowana jako jedna wartość atomowa w wyszukiwaniach z operatorami i dopasowaniach na podstawie atrybutów.
Możesz na przykład zindeksować obiekty Książka lub Film za pomocą właściwości gatunku.
Gatunki mogą obejmować „Fantastyka naukowa”, „Nauka” i „Fabuła”. Jeśli parametr exactMatchWithOperator
ma wartość false
lub jest pominięty, wyszukiwanie gatunku albo wybranie filtra „Nauka” lub „Fikcyjny” spowoduje również wyświetlenie wyników dla „Nauka-Fikcyjny”, ponieważ tekst jest dzielony na tokeny, a tokeny „Nauka” i „Fikcyjny” występują w grupie „Nauka-Fikcyjny”.
Gdy exactMatchWithOperator
to true
, tekst jest traktowany jako pojedynczy element, więc ani „Science”, ani „Fiction” nie pasuje do „Science-Fiction”.
(Opcjonalnie) Dodaj sekcję displayOptions
Na końcu każdej sekcji propertyDefinition
znajduje się opcjonalna sekcja displayOptions
. Ta sekcja zawiera 1 ciąg displayLabel
.
displayLabel
to zalecana, przyjazna dla użytkownika etykieta tekstowa usługi. Jeśli właściwość jest wyświetlana za pomocą ObjectDisplayOptions, ta etykieta jest wyświetlana przed właściwością. Jeśli właściwość jest skonfigurowana do wyświetlania, a nie zdefiniowano displayLabel
, wyświetlana jest tylko wartość właściwości.
Ten fragment kodu pokazuje, że właściwości movieTitle
z wartością displayLabel
ma wartość „Title” (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
w schemacie przykładowym:
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[]
Na końcu każdej sekcji propertyDefinition
znajduje się opcjonalna sekcja suggestionFilteringOperators[]
. W tej sekcji możesz zdefiniować właściwość służącą do filtrowania sugestii autouzupełniania. Możesz na przykład zdefiniować operator genre
, aby filtrować sugestie na podstawie gatunku filmowego preferowanego przez użytkownika. Gdy użytkownik wpisze zapytanie, w ramach sugestii autouzupełniania wyświetlą się tylko filmy pasujące do jego preferowanego gatunku.
Rejestrowanie schematu
Aby z zapytań Cloud Search były zwracane dane strukturalne, musisz zarejestrować schemat w usłudze schematu Cloud Search. Do zarejestrowania schematu wymagany jest identyfikator źródła danych uzyskany w kroku Zainicjuj źródło danych.
Użyj identyfikatora źródła danych, aby wysłać żądanie UpdateSchema i zarejestrować schemat.
Aby zarejestrować schemat, wyślij żądanie HTTP opisane na stronie referencyjnej UpdateSchema:
PUT https://cloudsearch.googleapis.com/v1/indexing/{name=datasources/*}/schema
Treść żądania powinna zawierać:
{ "validateOnly": // true or false, "schema": { // ... Your complete schema object ... } }
Za pomocą opcji validateOnly
możesz przetestować poprawność schematu bez jego rejestrowania.
Indeksowanie danych
Gdy schemat zostanie zarejestrowany, wypełnij źródło danych za pomocą wywołań indeksu. Indeksowanie jest zwykle wykonywane w połączeniu treści.
Korzystając ze schematu filmu, żądanie indeksowania interfejsu API REST dla pojedynczego filmu będzie 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ę, że wartość movie
w polu objectType
jest zgodna z nazwą definicji obiektu w schemacie. Dzięki dopasowaniu tych dwóch wartości Cloud Search wie, którego obiektu schematu użyć podczas indeksowania.
Zwróć też uwagę, że indeksowanie właściwości schema releaseDate
używa podwłaściwości year
, month
i day
, które dziedziczy, ponieważ jest zdefiniowana jako typ danych date
za pomocą właściwości datePropertyOptions
.
Jednak ponieważ year
, month
i day
nie są zdefiniowane w schemacie, nie możesz wysyłać zapytań dotyczących jednej z tych właściwości (np. year
) indywidualnie.
Zwróć też uwagę, jak właściwość powtarzalna actorName
jest indeksowana za pomocą listy wartości.
Identyfikowanie potencjalnych problemów z indeksowaniem
Oto 2 najczęstsze problemy związane ze schemami i indeksowaniem:
Twoje żądanie indeksowania zawiera nazwę obiektu lub właściwości schematu, która nie została zarejestrowana w usłudze schematu. Z tego powodu właściwość lub obiekt są ignorowane.
Żądanie indeksowania zawiera właściwość o wartości typu innej niż typ zarejestrowany w schemacie. Ten problem powoduje, że Cloud Search zwraca błąd podczas indeksowania.
Testowanie schematu za pomocą różnych typów zapytań
Zanim zarejestrujesz schemat do dużego repozytorium danych produkcyjnych, rozważ przeprowadzenie testów przy użyciu mniejszego repozytorium danych testowych. Testowanie z użyciem mniejszego repozytorium testów pozwala szybko wprowadzać zmiany w schemacie i usuwać zindeksowane dane bez wpływu na większy indeks czy istniejący indeks produkcyjny. W przypadku repozytorium danych testowych utwórz listę kontroli dostępu, 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 sekcją Interfejs wyszukiwania.
Ta sekcja zawiera kilka różnych przykładowych zapytań, których możesz użyć do testowania schematu filmu.
Testowanie za pomocą zapytania ogólnego
Zapytanie ogólne zwraca wszystkie elementy w źródle danych zawierające określony ciąg znaków. Korzystając z interfejsu wyszukiwania, możesz przesłać ogólne zapytanie do źródła danych o filmach, wpisując słowo "titanic" i naciskając Return. W wynikach wyszukiwania powinny się pojawić wszystkie filmy zawierające słowo „titanic”.
Testowanie z użyciem operatora
Dodanie operatora do zapytania ogranicza wyniki do elementów pasujących do wartości operatora. Możesz na przykład użyć operatora actor
, aby znaleźć wszystkie filmy z danym aktorem. Korzystając z interfejsu wyszukiwania, możesz wykonać to zapytanie z operatorem, wpisując po prostu parę operator=wartość, np. "actor:Zane", a następnie naciśnij Return. W wynikach wyszukiwania powinny się pojawić wszystkie filmy z udziałem Zane’a.
Dostrój schemat
Po użyciu schematu i danych nadal sprawdzaj, co działa, a co nie działa w przypadku użytkowników. Warto dostosować schemat w tych sytuacjach:
- indeksowanie pola, które nie było wcześniej indeksowane; Na przykład użytkownicy mogą wielokrotnie wyszukiwać filmy, korzystając z nazwy reżysera, więc możesz dostosować schemat, stosując w nim operator imienia i nazwiska reżysera.
- Zmiana nazw operatorów wyszukiwania na podstawie opinii użytkowników. Nazwy operatorów powinny być przyjazne dla użytkowników. Jeśli użytkownicy stale „zapamiętują” niewłaściwą nazwę operatora, być może warto ją zmienić.
Ponowne indeksowanie po zmianie schematu
Zmiana dowolnej z tych wartości w schemacie nie wymaga ponownego indeksowania danych. Wystarczy przesłać nowe żądanie UpdateSchema, a indeks będzie nadal działać:
- Nazwy operatorów.
- Minimalne i maksymalne wartości liczb całkowitych.
- Ranking uporządkowany według liczb całkowitych i wyliczeniowych.
- Opcje aktualności.
- Opcje wyświetlania.
W przypadku tych zmian dane wcześniej zindeksowane będą nadal działać zgodnie z wcześniej zarejestrowanym schematem. Aby jednak zobaczyć zmiany na podstawie zaktualizowanego schematu, musisz ponownie zindeksować istniejące wpisy:
- dodanie lub usunięcie nowej właściwości bądź obiektu,
- Zmieniam:
isReturnable
,isFacetable
lubisSortable
z:false
na:true
.
Warto ustawić wartość isFacetable
lub isSortable
na true
tylko, jeśli masz jasny przypadek użycia i potrzebę.
Gdy zaktualizujesz schemat, oznaczając właściwość isSuggestable
, musisz ponownie zindeksować dane, co spowoduje opóźnienie w korzystaniu z autouzupełniania tej właściwości.
Niedozwolone zmiany właściwości
Niektóre zmiany schematu nie są dozwolone, nawet jeśli ponownie zindeksujesz dane, ponieważ mogą one spowodować uszkodzenie indeksu lub prowadzić do uzyskania niskiej jakości lub niespójnego wyszukiwania. Zmiany te obejmują:
- Typ danych obiektu.
- Nazwa właściwości.
exactMatchWithOperator
– ustawienie.- ustawienie
retrievalImportance
.
Można jednak obejść to ograniczenie.
Wprowadzanie złożonej zmiany schematu
Aby uniknąć zmian, które mogłyby spowodować słabe wyniki wyszukiwania lub uszkodzić indeks wyszukiwania, usługa Cloud Search blokuje niektóre rodzaje zmian w żądaniach UpdateSchema po zindeksowaniu repozytorium. Na przykład nie można zmienić typu danych ani nazwy usługi po ich skonfigurowaniu. Nie można wprowadzić tych zmian za pomocą prostego UpdateSchema, nawet jeśli ponownie zindeksujesz dane.
W sytuacjach, gdy musisz wprowadzić w schemacie zmianę, która jest niedozwolona, możesz często wprowadzić serię dozwolonych zmian, które przyniosą ten sam skutek. Ogólnie oznacza to najpierw migrację z uwzględnieniem zaktualizowanych właściwości z użyciem starszej definicji obiektu na nowszą, a potem wysłanie żądania indeksowania, które wykorzystuje tylko nowszą usługę.
Aby zmienić typ danych lub nazwę usługi:
- Dodaj nową właściwość do definicji obiektu w schemacie. Użyj innej nazwy niż nazwa usługi, którą chcesz zmienić.
- Prześlij żądanie UpdateSchema z nową definicją. Pamiętaj, aby w prośbie przesłać cały schemat, w tym zarówno nową, jak i starą usługę.
Uzupełnij indeks z repozytorium danych. Aby uzupełnić indeks, wyślij wszystkie żądania indeksowania za pomocą nowej usługi, ale nie starej, ponieważ spowoduje to podwójne zliczanie dopasowań zapytań.
- Aby uniknąć niespójnych działań podczas uzupełniania indeksowania, sprawdź, czy jest dostępna nowa usługa, i ustaw domyślnie starą usługę.
- Po zakończeniu uzupełniania danych wykonaj zapytania testowe w celu ich sprawdzenia.
Usuń starą usługę. Prześlij kolejne żądanie UpdateSchema bez starej nazwy usługi i nie używaj już starej nazwy w przyszłych żądaniach indeksowania.
Przejdź do nowej usługi wszystkie elementy, które korzystają ze starej usługi. Jeśli na przykład zmienisz nazwę usługi z twórcy na autora, musisz zaktualizować kod zapytania, aby używać w nim słowa autor zamiast twórca.
Cloud Search przechowuje informacje o usuniętym zasobie lub obiekcie przez 30 dni, aby chronić przed ponownym użyciem, które mogłoby spowodować nieoczekiwane wyniki indeksowania. W ciągu tych 30 dni musisz usunąć wszystkie odwołania do usuniętego obiektu lub usługi, w tym wykluczyć je z przyszłych żądań indeksowania. Dzięki temu, jeśli zdecydujesz się później na przywrócenie tej właściwości lub obiektu, będziesz mieć możliwość zachowania poprawności 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.
- Maksymalna głębokość hierarchii uporządkowanych danych to 10 poziomów.
- Łączna liczba pól w obiekcie jest ograniczona do 1000, w tym liczba pól prymitywnych oraz suma liczby pól w każdym zagnieżdżonym obiekcie.
Następne kroki
Oto kilka kolejnych kroków, które możesz wykonać:
Utwórz interfejs wyszukiwania, aby przetestować schemat.
Dostosuj schemat, aby poprawić jakość wyszukiwania.
Utwórz schemat, który zapewni optymalną interpretację zapytań.
Dowiedz się, jak użyć schematu
_dictionaryEntry
do definiowania synonimów haseł często używanych w Twojej firmie. Aby używać schematu_dictionaryEntry
, zapoznaj się z artykułem Definiowanie synonimów.Utwórz oprogramowanie sprzęgające.