Schemat Google Cloud Search to struktura JSON określająca obiekty, właściwości i opcje, które mają być używane do indeksowania danych i wykonywania na nich zapytań. Oprogramowanie sprzęgające treści odczytuje dane z repozytorium i, na podstawie zarejestrowanego schematu, tworzy strukturę i indeksuje dane.
Aby utworzyć schemat, podaj do interfejsu API obiekt schematu JSON i go zarejestruj. Aby móc indeksować dane, musisz zarejestrować obiekt schematu dla każdego repozytorium.
Ten dokument zawiera podstawowe informacje o tworzeniu schematów. Informacje o tym, jak dostosować schemat, aby zwiększyć wygodę wyszukiwania, znajdziesz w artykule Poprawianie jakości wyszukiwania.
Tworzenie schematu
Poniżej znajdziesz listę czynności wymaganych do utworzenia schematu Cloud Search:
- Określanie oczekiwanego zachowania użytkowników
- Inicjowanie źródła danych
- Tworzenie schematu
- Uzupełnianie przykładowego schematu
- Zarejestruj schemat
- Indeksowanie danych
- Testowanie schematu
- Dostosowywanie schematu
Zidentyfikuj oczekiwane zachowanie użytkowników
Przewidywanie typów zapytań wykonywanych przez użytkowników pomaga w opracowaniu strategii tworzenia schematu.
Na przykład, tworząc zapytania do bazy danych filmów, możesz przewidzieć, że użytkownik wpisze zapytanie „Pokaż wszystkie filmy z Robertem Redfordem”. Dlatego schemat musi obsługiwać wyniki zapytań obejmujące „wszystkie filmy z określonym aktorem”.
Aby zdefiniować schemat tak, aby odzwierciedlał wzorce zachowań użytkowników, możesz wykonać te zadania:
- Oceniaj różnorodny zestaw wartościowych zapytań od różnych użytkowników.
- Zidentyfikuj obiekty, które mogą być używane w zapytaniach. Obiekty to logiczne zbiory powiązanych danych, np. filmy w bazie danych.
- Określ właściwości i wartości tworzące obiekt i mogą być używane w zapytaniach. Właściwości to atrybuty obiektu możliwe do indeksowania. Mogą zawierać wartości podstawowe i inne obiekty. Na przykład obiekt filmu może mieć jako wartości podstawowe właściwości takie jak tytuł filmu i data premiery. Obiekt Movie może też zawierać inne obiekty, takie jak członkowie obsady, które mają własne właściwości, takie jak nazwa lub rola.
- Wskaż przykładowe prawidłowe wartości właściwości. Wartości to rzeczywiste dane zindeksowane dla usługi. Na przykład tytuł jednego z filmów w bazie danych może brzmieć „Poszukiwacze zaginionej Arki”.
- Określ opcje sortowania i rankingu, których oczekują użytkownicy. Na przykład w przypadku zapytań o filmy użytkownicy mogą chcieć posortować wyniki chronologicznie i w rankingu według oceny odbiorców, zamiast tego alfabetycznie.
- (Opcjonalnie) Zastanów się, czy jedna z Twoich usług reprezentuje bardziej szczegółowy kontekst, w którym mogą być przeprowadzane wyszukiwania, np. stanowisko lub dział użytkownika. Dzięki temu sugestie autouzupełniania będą mogły być wyświetlane na podstawie tego kontekstu. Na przykład w przypadku osób wyszukujących w bazie danych filmowych użytkownicy mogą być zainteresowani tylko jednym z określonych gatunków filmowych. Użytkownicy mogą określić gatunek, do którego mają zwracać wyniki wyszukiwania, na przykład w profilu użytkownika. Gdy użytkownik zacznie wpisywać zapytanie o film, w sugestiach autouzupełniania będą podpowiadane tylko filmy z preferowanego gatunku, np. „filmy akcji”.
- Sporządź listę tych obiektów, właściwości i przykładowych wartości, których możesz używać w wyszukiwaniu. Szczegółowe informacje o sposobie korzystania z tej listy znajdziesz w sekcji Definiowanie opcji operatorów.
Zainicjuj źródło danych
Źródło danych reprezentuje dane z repozytorium, które zostało zindeksowane i przechowywane 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 odpowiedniego elementu za pomocą adresu URL podanego w prośbie o zindeksowanie.
Zdefiniuj obiekty
Podstawową jednostką danych w schemacie jest obiekt, nazywany też „obiektem schematu”, czyli logiczną strukturą danych. Jedną z logicznych struktury danych w bazie danych filmów jest „film”. Innym obiektem może być „osoba” reprezentująca obsadę i ekipę filmu.
Każdy obiekt w schemacie ma serię właściwości lub atrybutów opisujących go, takich jak tytuł i czas trwania filmu lub imię i nazwisko i data urodzenia osoby. Właściwości obiektu mogą obejmować wartości podstawowe i inne obiekty.
Rysunek 1 przedstawia obiekty filmowe i osoby oraz powiązane z nimi właściwości.
Schemat Cloud Search jest zasadą listy instrukcji definicji obiektu zdefiniowanych w tagu objectDefinitions
. Ten fragment schematu zawiera instrukcje objectDefinitions
dotyczące obiektów schematu filmu i osoby.
{
"objectDefinitions": [
{
"name": "movie",
...
},
{
"name": "person",
...
}
]
}
Podczas definiowania obiektu schematu podajesz parametr name
, który musi być unikalny wśród wszystkich innych obiektów w schemacie. Zwykle stosuje się wartość name
opisującą obiekt, np. movie
w przypadku obiektu Movie. 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
Zgodnie z informacją dotyczącą ObjectDefinition, po nazwie obiektu znajduje się zestaw options
oraz lista propertyDefinitions
.
options
może składać się z freshnessOptions
i displayOptions
.
freshnessOptions
służą do dostosowywania pozycji w wynikach wyszukiwania na podstawie aktualności produktu. displayOptions
służy do określania, czy w wynikach wyszukiwania obiektu mają się wyświetlać określone etykiety i właściwości.
Sekcja propertyDefinitions
służy do określania właściwości obiektu, np. tytułu filmu i daty premiery.
Poniższy fragment kodu przedstawia obiekt movie
o 2 właściwościach: 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"
}
...
]
}
]
}
Parametr PropertyDefinition składa się z tych elementów:
- ciąg znaków
name
. - Lista opcji niezależnych od typu, np.
isReturnable
w poprzednim fragmencie kodu. - Typ i powiązane z nim opcje związane z typem, np.
textPropertyOptions
iretrievalImportance
w poprzednim fragmencie kodu. operatorOptions
opisujący sposób używania właściwości jako operatora wyszukiwania.- Co najmniej jeden element
displayOptions
, np.displayLabel
w poprzednim fragmencie.
Parametr name
właściwości musi być unikalny w obrębie obiektu, który zawiera, ale tej samej nazwy można używać w innych obiektach i obiektach podrzędnych.
Na ilustracji 1 tytuł i data premiery filmu są określone dwukrotnie: raz w obiekcie movie
i ponownie w obiekcie podrzędnym filmography
obiektu person
. Ten schemat wykorzystuje ponownie pole movieTitle
, dzięki czemu schemat może obsługiwać 2 rodzaje zachowań związanych z wyszukiwaniem:
- Pokazuj wyniki filmów, gdy użytkownicy wyszukują tytuł filmu.
- Pokazuj wyniki dla osób, gdy użytkownik wyszuka tytuł filmu, w którym wystąpił aktor.
Schemat wykorzystuje też ponownie pole releaseDate
, ponieważ ma ono takie samo znaczenie w przypadku 2 pól movieTitle
.
Tworząc własny schemat, weź pod uwagę to, jak repozytorium może zawierać powiązane pola zawierające dane, które chcesz zadeklarować w schemacie więcej niż raz.
Dodaj opcje niezależne od typu
PropertyDefinition zawiera ogólne opcje wyszukiwania wspólne dla wszystkich usług niezależnie od typu danych.
isReturnable
– wskazuje, czy właściwość określa dane, które powinny zostać zwrócone w wynikach wyszukiwania przez interfejs Query API. Wszystkie właściwości przykładowych filmów można zwrócić. Właściwości, które nie są zwracane, mogą być używane do wyszukiwania lub ustalania pozycji wyników bez zwracania użytkownikowi.isRepeatable
– wskazuje, czy dla właściwości można używać wielu wartości. Na przykład film ma tylko jedną datę premiery, ale może uczestniczyć w nim wielu aktorów.isSortable
– wskazuje, że właściwości może być używana do sortowania. Nie może tak być w przypadku właściwości, które są powtarzalne. Na przykład wyniki wyszukiwania filmów mogą być sortowane według daty premiery lub oceny odbiorców.isFacetable
– wskazuje, że właściwości może służyć do generowania facets. Aspekt służy do zawężania wyników wyszukiwania. Użytkownik widzi początkowe wyniki, a następnie dodaje kryteria (aspekty) w celu dalszego ich zawężania. Ta opcja nie może mieć wartości prawda w przypadku właściwości, których typ to obiekt, a aby można było ustawić tę opcję, właściwośćisReturnable
musi mieć wartość Prawda. Ta opcja jest obsługiwana tylko w przypadku właściwości wyliczeniowych, wartości logicznych i tekstów. Na przykład w naszym przykładowym schemacie możemy uwzględnić elementygenre
,actorName
,userRating
impaaRating
, aby można było ich używać do interaktywnego zawężania wyników wyszukiwania.isWildcardSearchable
oznacza, że użytkownicy mogą wyszukiwać tę właściwość przy użyciu symboli wieloznacznych. Ta opcja jest dostępna tylko we właściwościach tekstu. Sposób działania wyszukiwania przy użyciu symboli wieloznacznych w polu tekstowym zależy od wartości ustawionej w polu exactMatchWithOperator. JeśliexactMatchWithOperator
ma wartośćtrue
, wartość tekstowa jest tokenizowana jako jedna wartość atomowa i przeprowadzane jest w jej przypadku wyszukiwanie przy użyciu symboli wieloznacznych. Jeśli np. wartość tekstowa toscience-fiction
, pasuje do niej zapytanie z symbolem wieloznacznymscience-*
. JeśliexactMatchWithOperator
ma wartośćfalse
, wartość tekstowa jest tokenizowana, a wyszukiwanie przy użyciu symboli wieloznacznych jest wykonywane dla każdego tokena. Jeśli np. wartość tekstowa to „science-fiction”, do elementu pasują zapytania z symbolem wieloznacznymsci*
lubfi*
, alescience-*
nie odpowiada.
Parametry te są wartościami logicznymi. Wszystkie mają wartość domyślną false
, a aby można było z nich korzystać, musi mieć wartość true
.
W tabeli poniżej znajdziesz parametry wartości logicznej 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 występuje w nim więcej niż 1 aktor. Nie można sortować właściwości, jeśli jest powtarzalna lub znajduje się w powtarzalnym obiekcie podrzędnym.
Określ typ
Sekcja referencyjna PropertyDefinition zawiera kilka właściwości xxPropertyOptions
, w których xx
jest określonym typem, np. boolean
. Aby ustawić typ danych właściwości, musisz zdefiniować odpowiedni obiekt typu danych. Zdefiniowanie obiektu typu danych dla właściwości określa typ danych tej właściwości. Na przykład zdefiniowanie textPropertyOptions
we właściwości movieTitle
wskazuje, że tytuł filmu jest typu tekstowego. Poniższy fragment kodu pokazuje właściwość movieTitle
z ustawieniem textPropertyOptions
określającym typ danych.
{
"name": "movieTitle",
"isReturnable": true,
"isWildcardSearchable": true,
"textPropertyOptions": {
...
},
...
},
Z usługą może być powiązany tylko 1 powiązany typ danych. Na przykład w naszym schemacie filmowym releaseDate
może być tylko datą (np. 2016-01-13
) lub ciąg znaków (np. January 13, 2016
), ale nie oba jednocześnie.
Oto obiekty typu danych służące do określania typów danych właściwości w schemacie przykładowego filmu:
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 wyobrażeniu tego schematu filmów użytkownicy powinni sortować wyniki chronologicznie, dlatego releaseDate
jest obiektem daty.
Jeśli na przykład spodziewany jest porównanie wersji z grudnia na przestrzeni lat z wydaniami ze stycznia, wówczas przydatny może być format ciągu znaków.
Konfigurowanie opcji dla poszczególnych typów
Sekcja referencyjna PropertyDefinition zawiera linki do opcji dotyczących poszczególnych typów. Większość opcji związanych z określonym typem jest opcjonalna – z wyjątkiem listy possibleValues
w tabeli enumPropertyOptions
. Dodatkowo opcja orderedRanking
umożliwia pozycjonowanie wartości względem siebie. Poniższy fragment przedstawia właściwość movieTitle
z ustawieniem textPropertyOptions
określającym typ danych i opcją związaną z typem 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 zależne od typu |
---|---|---|
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 określonym typem każdy typ ma zestaw opcjonalnych
operatorOptions
opcji opisujących sposób użycia właściwości jako operatora wyszukiwania. Poniższy fragment kodu przedstawia właściwość movieTitle
z ustawieniem textPropertyOptions
oraz określonymi opcjami, retrievalImportance
i operatorOptions
.
{
"name": "movieTitle",
"isReturnable": true,
"isWildcardSearchable": true,
"textPropertyOptions": {
"retrievalImportance": { "importance": "HIGHEST" },
"operatorOptions": {
"operatorName": "title"
}
},
...
}
Każdy element operatorOptions
ma swój element operatorName
, np. title
w przypadku elementu movieTitle
. Nazwa operatora to operator wyszukiwania dotyczący usługi. Operator wyszukiwania to parametr, którego oczekujesz od użytkowników przy zawężaniu wyszukiwania. Na przykład, aby wyszukać filmy według tytułu, użytkownik wpisuje title:movieName
, gdzie movieName
to tytuł filmu.
Nazwy operatorów nie muszą być takie same jak nazwa usługi. Zamiast tego używaj nazw operatorów, które odzwierciedlają najczęściej używane słowa użytkowników w Twojej organizacji. Jeśli np. użytkownicy preferują termin „nazwa” zamiast „tytuł” tytułu filmu, jako nazwę operatora należy podać nazwę operatora.
Możesz używać tej samej nazwy operatora w wielu usługach, o ile wszystkie są tego samego typu. Jeśli w trakcie zapytania używasz udostępnianego operatora, wszystkie właściwości korzystające z tej nazwy są pobierane. Załóżmy np., że obiekt Movie ma właściwości plotSummary
i plotSynopsis
, a każda z nich ma właściwości operatorName
o wartości plot
. O ile obie te właściwości są tekstowe (textPropertyOptions
), jedno zapytanie z operatorem wyszukiwania plot
pobiera je obie.
Oprócz właściwości operatorName
właściwości, które można sortować, mogą zawierać w elemencie operatorOptions
pola lessThanOperatorName
i greaterThanOperatorName
.
Użytkownicy mogą korzystać z tych opcji, aby tworzyć zapytania na podstawie porównań z przesłaną wartością.
textOperatorOptions
ma pole exactMatchWithOperator
w operatorOptions
. Jeśli ustawisz exactMatchWithOperator
na true
, ciąg zapytania musi pasować do całej wartości właściwości, a nie tylko w tekście.
W wyszukiwaniu operatora i dopasowaniach aspektów wartość tekstowa jest traktowana jako jedna wartość niepodzielna.
Rozważ na przykład indeksowanie obiektów książki i filmu z właściwościami gatunku.
Gatunki mogą obejmować „Science-Fiction”, „Nauka” i „Fiction”. Jeśli argument exactMatchWithOperator
ma wartość false
lub jest pominięty, wyszukanie gatunku albo wybranie aspektu „Nauka” lub „Fiction” zwróci też wyniki dla „Science-Fiction”, ponieważ tekst zostanie tokenizowany, a w kategorii „Nauka” i „Fiction” będą znajdować się tokeny „Nauka” i „Fikcja”.
Gdy exactMatchWithOperator
ma wartość true
, tekst jest traktowany jako jeden token, więc ani „Nauka”, jak i „Fikcja” nie pasuje do hasła „Science-Fiction”.
(Opcjonalnie) Dodaj sekcję displayOptions
Na końcu każdej sekcji propertyDefinition
znajduje się opcjonalna sekcja displayOptions
. Ta sekcja zawiera 1 ciąg znaków displayLabel
.
displayLabel
to zalecana, przyjazna dla użytkownika etykieta tekstowa dla właściwości. Jeśli właściwość jest skonfigurowana do wyświetlania za pomocą ObjectDisplayOptions, ta etykieta jest wyświetlana przed nią. Jeśli właściwość jest skonfigurowana do wyświetlania, a displayLabel
nie jest zdefiniowany, wyświetlana jest tylko wartość właściwości.
Poniższy fragment kodu przedstawia właściwość movieTitle
z parametrem displayLabel
ustawionym na „Title” (Tytuł).
{
"name": "movieTitle",
"isReturnable": true,
"isWildcardSearchable": true,
"textPropertyOptions": {
"retrievalImportance": { "importance": "HIGHEST" },
"operatorOptions": {
"operatorName": "title"
}
},
"displayOptions": {
"displayLabel": "Title"
}
},
Oto wartości displayLabel
wszystkich właściwości obiektu movie
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[]
Na końcu każdej sekcji propertyDefinition
znajduje się opcjonalna sekcja suggestionFilteringOperators[]
. W tej sekcji możesz zdefiniować właściwość używaną do filtrowania sugestii autouzupełniania. Możesz na przykład zdefiniować operator genre
, który będzie filtrować sugestie na podstawie preferowanego gatunku filmowego użytkownika. Gdy użytkownik wpisze wyszukiwane hasło, w sugestiach autouzupełniania będą wyświetlane tylko te filmy, które pasują do preferowanego gatunku filmu.
Zarejestruj schemat
Aby uporządkowane dane były zwracane z zapytań w Cloud Search, musisz zarejestrować schemat w usłudze schematów Cloud Search. Aby zarejestrować schemat, musisz podać identyfikator źródła danych uzyskany w kroku Zainicjuj źródło danych.
Za pomocą identyfikatora źródła danych wyślij żądanie UpdateSchema, aby zarejestrować schemat.
Zgodnie z informacjami na stronie referencyjnej UpdateSchema wyślij to żądanie HTTP, aby zarejestrować schemat:
PUT https://cloudsearch.googleapis.com/v1/indexing/{name=datasources/*}/schema
Treść żądania powinna zawierać te informacje:
{ "validateOnly": // true or false, "schema": { // ... Your complete schema object ... } }
Użyj opcji validateOnly
, aby sprawdzić poprawność schematu bez jego rejestrowania.
Indeksowanie danych
Po zarejestrowaniu schematu wypełnij źródło danych za pomocą wywołań indeksu. Indeksowanie jest zwykle wykonywane w ramach łącznika treści.
W przypadku schematu Movie żądanie indeksowania pojedynczego filmu przez interfejs API REST wyglądałoby 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
odpowiada nazwie definicji obiektu w schemacie. Dzięki dopasowaniu tych 2 wartości Cloud Search wie, którego obiektu schematu ma użyć podczas indeksowania.
Zwróć też uwagę na to, jak indeksowanie właściwości schematu releaseDate
wykorzystuje właściwości podrzędne year
, month
i day
, które dziedziczy, ponieważ jest ona definiowana jako typ danych date
przez użycie datePropertyOptions
do jej zdefiniowania.
Ponieważ jednak schemat nie jest zdefiniowany w schemacie year
, month
i day
, nie możesz wysyłać zapytań dotyczących jednej z tych właściwości (np. year
).
Za pomocą listy wartości zwróć też uwagę na sposób indeksowania powtarzalnej właściwości actorName
.
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 lub właściwości schematu, która nie została zarejestrowana w usłudze schematów. Ten problem powoduje zignorowanie właściwości lub obiektu.
Twoja prośba o zindeksowanie 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ą kilku typów zapytań
Zanim zarejestrujesz schemat w dużym repozytorium danych produkcyjnych, rozważ testowanie przy użyciu mniejszego repozytorium danych testowych. Testowanie za pomocą mniejszego repozytorium testowego umożliwia szybkie wprowadzanie zmian w schemacie i usuwanie zindeksowanych danych bez wpływu na większy indeks ani istniejący indeks produkcyjny. W przypadku testowego repozytorium danych 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 weryfikacji zapytań, zapoznaj się z interfejsem wyszukiwania
Ta sekcja zawiera kilka różnych przykładowych zapytań, których możesz używać do testowania schematu filmów.
Testowanie za pomocą ogólnego zapytania
Zapytanie ogólne zwraca wszystkie elementy w źródle danych zawierające określony ciąg znaków. Za pomocą interfejsu wyszukiwania możesz uruchomić ogólne zapytanie dotyczące źródła danych o filmach, wpisując słowo "titanic" i naciskając Return. W wynikach wyszukiwania powinny zostać zwrócone wszystkie filmy ze słowem „titanic”.
Testowanie z użyciem operatora
Dodanie operatora do zapytania ogranicza wyniki do elementów pasujących do wartości tego operatora. Możesz na przykład użyć operatora actor
, aby znaleźć wszystkie filmy z wybranym aktorem. Zapytanie z operatorem możesz wykonać w interfejsie wyszukiwania, wpisując parę operator=wartość, na przykład "actor:Zane", i naciskając "actor:Zane". Wszystkie filmy, w których występuje Zane,
powinny zostać zwrócone w wynikach wyszukiwania.
Dostrajanie schematu
Po użyciu schematu i danych nadal sprawdzaj, co działa, a co nie, u użytkowników. Zastanów się nad dostosowaniem schematu w tych sytuacjach:
- Indeksowanie pola, które nie zostało wcześniej zindeksowane. Użytkownicy mogą na przykład wielokrotnie wyszukiwać filmy na podstawie nazwiska reżysera, więc możesz dostosować schemat tak, aby obsługiwał nazwisko reżysera jako operatora.
- Zmiana nazw operatorów wyszukiwania na podstawie opinii użytkowników. Nazwy operatorów powinny być łatwe w użyciu. Jeśli użytkownicy stale „zapamiętują” niewłaściwą nazwę operatora, możesz ją zmienić.
Ponowne indeksowanie po zmianie schematu
Zmiana dowolnej z poniższych wartości w schemacie nie wymaga ponownego indeksowania danych. Możesz po prostu przesłać nowe żądanie UpdateSchema, a indeks będzie nadal działać:
- Nazwy operatorów.
- Minimalna i maksymalna liczba całkowita.
- Ranking liczb całkowitych i wyliczeniowych.
- Opcje aktualności.
- Opcje wyświetlania.
W przypadku poniższych zmian zindeksowane wcześniej dane będą nadal działać zgodnie z wcześniej zarejestrowanym schematem. Musisz jednak ponownie zindeksować istniejące wpisy, aby zobaczyć zmiany oparte na zaktualizowanym schemacie, jeśli:
- Dodawanie i usuwanie nowej właściwości lub obiektu
- Zmieniam ustawienie
isReturnable
,isFacetable
lubisSortable
zfalse
natrue
.
Ustaw wartość isFacetable
lub isSortable
na true
tylko wtedy, gdy w jasnym przypadku użycia masz uzasadnienie.
Gdy zaktualizujesz schemat, oznaczając właściwość isSuggestable
, musisz ponownie zindeksować swoje dane, co spowoduje opóźnienie w korzystaniu z niej autouzupełniania.
Niedozwolone zmiany właściwości
Niektóre zmiany schematu są niedozwolone, nawet jeśli ponownie zindeksujesz dane, ponieważ psują one indeks lub powodują uzyskiwanie słabych bądź niespójnych wyników wyszukiwania. Obejmują one zmiany dotyczące:
- Typ danych usługi.
- Nazwa usługi.
exactMatchWithOperator
ustawienie.retrievalImportance
ustawienie.
Jest jednak sposób na obejście tego ograniczenia.
Wprowadzanie złożonej zmiany schematu
Aby uniknąć zmian, które spowodowałyby wygenerowanie słabych wyników wyszukiwania lub nieprawidłowego indeksu wyszukiwania, Cloud Search zapobiega wprowadzaniu pewnych rodzajów zmian w żądaniach UpdateSchema po zindeksowaniu repozytorium. Na przykład nie można zmienić typu danych ani nazwy usługi po ich ustawieniu. Tych zmian nie można osiągnąć za pomocą prostego żądania UpdateSchema, nawet jeśli ponownie zindeksujesz dane.
Jeśli musisz wprowadzić w schemacie inne niedozwolone zmiany, często warto wprowadzić serię dozwolonych zmian, które dają ten sam efekt. Ogólnie polega to na przeniesieniu zindeksowanych właściwości ze starszej definicji obiektu do nowszej, a następnie z wysłaniem prośby o zindeksowanie, która używa tylko nowszej właściwości.
Z podanych niżej instrukcji dowiesz się, jak zmienić typ danych lub nazwę usługi:
- Dodaj nową właściwość do definicji obiektu w schemacie. Użyj innej nazwy niż właściwość, którą chcesz zmienić.
- Wyślij żądanie UpdateSchema z nową definicją. Pamiętaj, aby w żądaniu wysłać cały schemat, w tym nową i starą.
Wypełnij indeks z repozytorium danych. Aby uzupełnić indeks, wyślij wszystkie żądania indeksowania, używając nowej usługi, ale nie starej usługi, ponieważ spowodowałoby to podwójne zliczanie dopasowań zapytań.
- Aby uniknąć niespójności podczas indeksowania, sprawdź, czy korzystasz z nowej usługi i ustaw domyślną usługę.
- Po zakończeniu uzupełniania uruchom zapytania testowe, aby to sprawdzić.
Usuń starą usługę. Wyślij kolejne żądanie UpdateSchema bez starej nazwy właściwości i w przyszłych żądaniach indeksowania przestań używać starej nazwy właściwości.
Przenieś dane o użyciu starej usługi do nowej. Jeśli na przykład zmienisz nazwę właściwości z „twórca” na „autor”, musisz zaktualizować kod zapytania tak, aby używał „autor” w miejscu, w którym wcześniej się odwoływał do twórcy.
Cloud Search przechowuje każdą usuniętą właściwość lub obiekt przez 30 dni, aby chronić użytkowników przed ich ponownym użyciem, które mogłoby spowodować nieoczekiwane wyniki indeksowania. W ciągu tych 30 dni musisz całkowicie zrezygnować z używania usuniętego obiektu lub usługi, włącznie z pominięciem ich w przyszłych żądaniach o indeksowanie. Dzięki temu, jeśli później zdecydujesz się przywrócić tę właściwość lub obiekt, możesz to zrobić w sposób, który pozwoli Ci zachować poprawność indeksu.
Zapoznaj się z ograniczeniami dotyczącymi rozmiaru
Cloud Search nakłada ograniczenia na rozmiar obiektów i schematów uporządkowanych danych. Te limity to:
- 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, co obejmuje liczbę pól podstawowych i sumę pól w każdym zagnieżdżonym obiekcie.
Dalsze kroki
Oto kilka czynności, które możesz wykonać:
Aby przetestować schemat, utwórz interfejs wyszukiwania.
Dostosuj schemat, aby poprawić jakość wyszukiwania.
Utwórz schemat, aby uzyskać optymalną interpretację zapytań.
Dowiedz się, jak wykorzystać schemat
_dictionaryEntry
do definiowania synonimów terminów powszechnie używanych w Twojej firmie. Aby używać schematu_dictionaryEntry
, zapoznaj się z sekcją Definiowanie synonimów.Utwórz oprogramowanie sprzęgające.