Tworzenie i rejestrowanie schematu

Schemat Google Cloud Search to struktura JSON, która definiuje obiekty, właściwości i opcje, które mają być używane do indeksowania danych i wysyłania do nich zapytań. Łącznik treści odczytuje dane z repozytorium i na podstawie zarejestrowanego schematu tworzy i indeksuje dane.

Schemat możesz utworzyć, przesyłając do interfejsu API obiekt schematu JSON, a następnie go rejestrując. Aby zindeksować dane, musisz zarejestrować obiekt schematu dla każdego z repozytoriów.

Ten dokument zawiera podstawowe informacje o tworzeniu schematów. Informacje o tym, jak dostroić schemat w celu zwiększenia wygody wyszukiwania, znajdziesz w artykule Poprawianie jakości wyszukiwania.

Tworzenie schematu

Poniżej znajduje się lista czynności potrzebnych do utworzenia schematu Cloud Search:

  1. Identyfikowanie oczekiwanego zachowania użytkowników
  2. Inicjowanie źródła danych
  3. Tworzenie schematu
  4. Ukończ przykładowy schemat
  5. Rejestrowanie schematu
  6. Indeksowanie danych
  7. Testowanie schematu
  8. Dostrajanie schematu

Określanie oczekiwanego zachowania użytkowników

Przewidywanie typów zapytań wykonywanych przez użytkowników pomaga odpowiednio zaplanować 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”. Schemat musi więc obsługiwać wyniki zapytań na podstawie „wszystkich filmów z konkretnym aktorem”.

Aby zdefiniować schemat odzwierciedlający wzorce zachowań użytkowników, wykonaj te czynności:

  1. Ocenianie zróżnicowanych zestawów pożądanych zapytań pochodzących od różnych użytkowników.
  2. Zidentyfikuj obiekty, których można używać w zapytaniach. Obiekty to logiczne zbiory powiązanych danych, takie jak film w bazie danych filmów.
  3. Identyfikowanie właściwości i wartości, które składają się na obiekt i mogą być używane w zapytaniach. Właściwości to możliwe do indeksowania atrybuty obiektu. Mogą one zawierać wartości podstawowe lub inne obiekty. Na przykład obiekt video 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 (np. członków obsady), które mają własne właściwości, np. nazwę lub rolę.
  4. Wskaż przykładowe prawidłowe wartości właściwości. Wartości to rzeczywiste zindeksowane dane usługi. Na przykład tytuł jednego z filmów w bazie danych może brzmieć „Poszukiwacze Zaginionej Arki”.
  5. Określ opcje sortowania i rankingu odpowiednie dla użytkowników. Na przykład, gdy wyszukujesz filmy, użytkownicy mogą chcieć je posortować chronologicznie i pozycjonować według oceny odbiorców, bez konieczności sortowania alfabetycznie według tytułu.
  6. (Opcjonalnie) Zastanów się, czy jedna z Twoich właściwości reprezentuje bardziej konkretny kontekst, w którym mogą być wykonywane wyszukiwania, np. stanowisko użytkownika lub dział, aby sugestie autouzupełniania mogły być podawane na podstawie kontekstu. Na przykład użytkownicy wyszukujący filmy w bazie danych mogą być zainteresowani tylko filmami z określonego gatunku. Użytkownicy mogą określić gatunek, do którego mają zwrócić zapytania, na przykład w ramach swojego profilu. Następnie, gdy użytkownik zaczyna wpisywać zapytanie o film, w sugestiach autouzupełniania podpowiadane są tylko filmy z preferowanego gatunku (np. „filmy akcji”).
  7. 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 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 dotyczące 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 przy użyciu adresu URL podanego w prośbie o zindeksowanie.

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ą logiczną strukturą danych jest „film”. Kolejnym 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 czy imię i nazwisko oraz data urodzenia danej osoby. Właściwości obiektu mogą obejmować wartości proste lub inne obiekty.

Rysunek 1 przedstawia obiekty filmowe i osoby oraz powiązane właściwości.

Rysowanie połączeń schematowych między encjami
Rysunek 1. Przykładowy schemat z 2 obiektami i obiektem podrzędnym.

Schemat Cloud Search jest zasadniczo listą instrukcji definicji obiektów zdefiniowanych w tagu objectDefinitions. Poniższy fragment kodu schematu zawiera instrukcje objectDefinitions dla obiektów schematu filmów i osób.

{
  "objectDefinitions": [
    {
      "name": "movie",
      ...
    },
    {
      "name": "person",
      ...
    }
  ]
}

Definiując obiekt schematu, podajesz dla niego atrybut name, który musi być niepowtarzalny wśród wszystkich innych obiektów w schemacie. Zwykle używasz 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. Znaczniki freshnessOptions służą do dostosowywania rankingu wyszukiwania na podstawie aktualności elementu. 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 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"
          }
      ...
      ]
    }
  ]
}

Obiekt 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 konkretnego typu, np. textPropertyOptions i retrievalImportance w poprzednim fragmencie kodu.
  • operatorOptions opisujący, w jaki sposób właściwość 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ć niepowtarzalna 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 Rysunku 1 tytuł i data premiery filmu zostały zdefiniowane dwukrotnie: raz w obiekcie movie i ponownie w obiekcie podrzędnym filmography obiektu person. Ten schemat wykorzystuje ponownie pole movieTitle, aby obsługiwał 2 rodzaje zachowań związanych z wyszukiwaniem:

  • Pokaż wyniki wyszukiwania filmów, gdy użytkownicy wyszukują tytuł filmu.
  • Pokazuj wyniki dotyczące osób, gdy użytkownicy wyszukują tytuł filmu, w którym grał aktor.

Analogicznie schemat wykorzystuje pole releaseDate, ponieważ ma ono takie samo znaczenie dla 2 pól movieTitle.

Podczas tworzenia własnego schematu zastanów się, jak może ono zawierać powiązane pola zawierające dane, które chcesz zadeklarować w schemacie więcej niż raz.

Dodaj opcje niezależne od typu

Parametr PropertyDefinition zawiera listę ogólnych opcji wyszukiwania wspólnych dla wszystkich usług niezależnie od typu danych.

  • isReturnable – wskazuje, czy właściwość identyfikuje dane, które powinny być zwracane w wynikach wyszukiwania przez interfejs Query API. Wszystkie przykładowe właściwości filmów mogą być zwracane. Właściwości bez możliwości zwrotu można używać do wyszukiwania lub wyznaczania pozycji wyników w rankingu bez zwracania ich użytkownikowi.
  • isRepeatable – wskazuje, czy w danej usłudze dozwolonych jest kilka wartości. Na przykład film ma tylko jedną datę premiery, ale może w nim wystąpić kilku aktorów.
  • isSortable – oznacza, że właściwość można używać do sortowania. Nie dotyczy to właściwości, które są powtarzalne. Na przykład wyniki dotyczące 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 facets. Aspekt służy do zawężania wyników wyszukiwania – użytkownik widzi początkowe wyniki, a potem dodaje kryteria (czyli aspekty) w celu dalszego zawężenia wyników. Ta opcja nie może być spełniony w przypadku właściwości, których typ to „object”, a pole isReturnable musi mieć wartość Prawda, aby można było ustawić tę opcję. Ta opcja jest obsługiwana tylko w przypadku właściwości wyliczeniowych, logicznych i tekstowych. W naszym przykładowym schemacie możemy na przykład utworzyć aspekt genre, actorName, userRating i mpaaRating, aby umożliwić ich użycie do interaktywnego zawężania wyników wyszukiwania.
  • isWildcardSearchable oznacza, że użytkownicy mogą wyszukiwać w przypadku tej usługi przy użyciu symboli wieloznacznych. Ta opcja jest dostępna tylko w przypadku właściwości tekstowych. Sposób wyszukiwania przy użyciu symboli wieloznacznych w polu tekstowym zależy od wartości ustawionej w polu exactMatchWithOperator. Jeśli exactMatchWithOperator ma wartość true, wartość tekstowa jest tokenizowana jako jedna wartość atomowa i przeprowadzane jest wyszukiwanie przy użyciu symboli wieloznacznych. Jeśli np. wartość tekstowa to science-fiction, zostanie do niej dopasowane zapytanie z symbolem wieloznacznym science-*. Jeśli exactMatchWithOperator ma wartość false, wartość tekstowa jest tokenizowana i przeprowadzane jest wyszukiwanie przy użyciu symboli wieloznacznych w odniesieniu do każdego tokena. Jeśli np. wartość tekstowa to „science-fiction”, zapytania z symbolem wieloznacznym sci* lub fi* będą pasować do elementu, ale science-* nie pasuje do niego.

Wszystkie te parametry ogólnej funkcji wyszukiwania są wartościami logicznymi. Wszystkie mają domyślną wartość false i aby można było ich używać, musi mieć wartość true.

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 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 usługi powoduje określenie typu danych tej usługi. Na przykład zdefiniowanie właściwości textPropertyOptions we właściwości movieTitle wskazuje, że tytuł filmu ma typ tekstowy. Ten fragment kodu pokazuje właściwość movieTitle z ustawieniem textPropertyOptions ustawionym dla 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 filmowym 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 danych używane do określania typów danych dla 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

Typ danych, który wybierzesz dla usługi, zależy od oczekiwanych przypadków użycia. W przypadku tego schematu filmowego użytkownicy powinni sortować wyniki chronologicznie, więc obiekt releaseDate jest obiektem daty. W takim przypadku przydatny może być format w formie ciągu znaków, jeśli na przykład można było porównywać wersje grudniowe na przestrzeni lat z wersjami styczniowymi.

Konfigurowanie opcji specyficznych dla danego typu

Sekcja referencyjna PropertyDefinition zawiera linki do opcji dostępnych w przypadku poszczególnych typów. Większość opcji związanych z określonymi typami jest opcjonalna, z wyjątkiem listy possibleValues w tabeli enumPropertyOptions. Dodatkowo opcja orderedRanking umożliwia wzajemne porządkowanie wartości według siebie. Ten fragment kodu pokazuje właściwość movieTitle, w której typ danych textPropertyOptions jest ustawiony na typ danych oraz z odpowiednią opcją 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 zależnych od typu każdy typ ma zestaw opcjonalnych operatorOptionsTe opcje opisują sposób użycia właściwości jako operatora wyszukiwania. Ten fragment kodu pokazuje właściwość movieTitle z ustawieniem textPropertyOptions ustawionym dla typu danych oraz opcjami dotyczącymi typów retrievalImportance i operatorOptions.

{
  "name": "movieTitle",
  "isReturnable": true,
  "isWildcardSearchable": true,
  "textPropertyOptions": {
    "retrievalImportance": { "importance": "HIGHEST" },
    "operatorOptions": {
      "operatorName": "title"
    }
  },
  ...
}

Każdy element operatorOptions ma element operatorName, np. title dla elementu movieTitle. Nazwa operatora to operator wyszukiwania danej usługi. Operator wyszukiwania to rzeczywisty parametr używany przez użytkowników do zawężania wyszukiwania. Aby na przykład wyszukać filmy na podstawie ich tytułu, użytkownik może wpisać 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ą najpopularniejsze słowa używane przez użytkowników w organizacji. Jeśli np. użytkownicy preferują tytuł filmu zamiast „tytuł”, jako nazwę operatora wpisz „name”.

Tej samej nazwy operatora możesz używać w wielu usługach, pod warunkiem że wszystkie usługi mają ten sam typ. Jeśli w trakcie zapytania użyjesz współdzielonej nazwy operatora, pobierane są wszystkie właściwości, które korzystają z tej nazwy. Załóżmy np., że obiekt filmowy ma właściwości plotSummary i plotSynopsis, a każda z nich miała właściwość operatorName o wartości plot. Jeśli obie właściwości mają tekst (textPropertyOptions), jedno zapytanie przy użyciu operatora wyszukiwania plot pobierze je obie.

Oprócz operatorName właściwości z możliwością sortowania mogą w elemencie operatorOptions mieć 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 ustawisz exactMatchWithOperator na true, ciąg zapytania musi pasować do całej wartości właściwości, a nie tylko znajdować się w tekście. W wyszukiwaniach z operatorami i dopasowaniach aspektów wartość tekstowa jest traktowana jako jedna wartość atomowa.

Rozważ na przykład indeksowanie obiektów książki lub filmu z właściwościami gatunku. Gatunki mogą obejmować „Nauka”, „Nauka” i „Fikcja”. Gdy pole exactMatchWithOperator ma wartość false lub jest pominięte, wyszukiwanie gatunku albo wybór aspektu „Nauka” lub „Fikcja” również zwraca wyniki dla kategorii „Nauka”, ponieważ tekst jest tokenizowany, a tokeny „Nauka” i „Fikcja” znajdują się w kategorii „Nauka” lub „Fikcja”. Gdy exactMatchWithOperator to true, tekst jest traktowany jako pojedynczy token, więc ani „Nauka” ani „Fikcja” nie pasuje do kategorii „Nauka”.

(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 właściwości. Jeśli właściwość jest skonfigurowana do wyświetlania za pomocą ObjectDisplayOptions, ta etykieta jest wyświetlana przed usługą. 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 właściwość movieTitle z wartością displayLabel ustawioną jako „Title”.

{
  "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ść 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. Dzięki temu, gdy użytkownik wpisze zapytanie, w sugestiach autouzupełniania wyświetlą się tylko filmy pasujące do preferowanego gatunku.

Rejestrowanie schematu

Aby uporządkowane dane były zwracane z zapytań w Cloud Search, musisz zarejestrować swój schemat w usłudze schematów Cloud Search. Do zarejestrowania schematu wymagany jest identyfikator źródła danych uzyskany na etapie Zainicjuj źródło danych.

Korzystając z identyfikatora źródła danych, wyślij żądanie UpdateSchema, aby zarejestrować schemat.

Zgodnie z informacjami na stronie z informacjami o UpdateSchema, wyślij to żą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 ...
  }
}

Za pomocą opcji validateOnly możesz przetestować poprawność schematu bez jego rejestrowania.

Indeksowanie danych

Po zarejestrowaniu schematu wypełnij źródło danych za pomocą wywołań indeksu. Indeksowanie odbywa się zwykle w oprogramowaniu sprzęgającym treści.

Przy użyciu tego schematu żądanie indeksowania pojedynczego filmu do interfejsu API REST 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 odpowiada nazwie definicji obiektu w schemacie. Dzięki dopasowaniu tych 2 wartości Cloud Search wie, którego obiektu schematu 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 odziedziczy, ponieważ jest ona definiowana jako typ danych date przez zdefiniowanie jej za pomocą właściwości datePropertyOptions. Ponieważ jednak 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).

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:

  • Prośba o zindeksowanie zawiera nazwę obiektu schematu lub właściwości, która nie została zarejestrowana w usłudze schematu. Powoduje to zignorowanie właściwości lub obiektu.

  • Prośba o zindeksowanie zawiera usługę 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 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, które zawierają określony ciąg znaków. Korzystając z interfejsu wyszukiwania, możesz uruchomić ogólne zapytanie dotyczące źródła danych filmu, wpisując słowo "titanic" i naciskając "titanic". Wszystkie filmy ze słowem „titanic” powinny pojawić się w wynikach wyszukiwania.

Testowanie z użyciem operatora

Dodanie operatora do zapytania ogranicza wyniki do elementów pasujących do tej 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 "actor:Zane". Wszystkie filmy, w których występuje Zane, powinny pojawić się w wynikach wyszukiwania.

Dostrój schemat

Gdy schemat i dane będą już używane, sprawdzaj, co działa u użytkowników, a co nie. Rozważ dostosowanie schematu w tych sytuacjach:

  • Zindeksowanie pola, które nie było wcześniej indeksowane. Na przykład użytkownicy mogą wielokrotnie wyszukiwać filmy według imienia i nazwiska reżysera, więc możesz dostosować schemat, stosując w nim operator „imię i nazwisko reżysera”.
  • zmienianie 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, być może warto ją zmienić.

Ponowne indeksowanie po zmianie schematu

Zmiana dowolnej z poniższych 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.
  • 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 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 lub isSortable z: false na: true.

Ustaw isFacetable lub isSortable na wartość true tylko wtedy, gdy masz jasny przypadek użycia i potrzebujesz tej funkcji.

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 są niedozwolone nawet po ponownym zindeksowaniu danych, ponieważ powodują one uszkodzenie indeksu lub powodują generowanie niespójnych lub niespójnych wyników wyszukiwania. Zmiany te obejmują:

  • 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 generować słabe wyniki wyszukiwania lub uszkodzonego indeksu wyszukiwania, po zindeksowaniu repozytorium Cloud Search blokuje niektóre rodzaje zmian w żądaniach UpdateSchema. Na przykład nie można zmienić typu danych ani nazwy usługi po ich skonfigurowaniu. Tych zmian nie można wprowadzić za pomocą prostego żądania UpdateSchema, nawet jeśli ponownie zindeksujesz dane.

W sytuacjach, gdy musisz wprowadzić w schemacie niedozwolone zmiany, często możesz wprowadzić serię dozwolonych zmian o tym samym skutku. Ogólnie polega na tym, żeby najpierw przenieść zindeksowane właściwości ze starszej definicji obiektu do nowszej, a potem wysłać żądanie indeksowania używające tylko nowszej właściwości.

Poniżej znajdziesz instrukcje, jak zmienić typ danych lub nazwę usługi:

  1. Dodaj nową właściwość do definicji obiektu w schemacie. Użyj innej nazwy niż nazwa usługi, którą chcesz zmienić.
  2. Wyślij żądanie UpdateSchema z nową definicją. Pamiętaj, aby w żądaniu wysłać cały schemat, w tym nową i starą właściwość.
  3. Utwórz kopię zapasową indeksu z repozytorium danych. Aby uzupełnić indeks, wysyłaj wszystkie żądania indeksowania za pomocą nowej usługi, ale nie starej, ponieważ spowoduje to podwójne zliczanie dopasowań zapytań.

    1. Aby uniknąć niespójnych działań podczas uzupełniania indeksowania, sprawdź, czy dostępna jest nowa usługa. Ustaw domyślnie starą usługę.
    2. Po zakończeniu uzupełniania wykonaj zapytania testowe, aby sprawdzić poprawność.
  4. Usuń starą usługę. Wyślij kolejne żądanie UpdateSchema bez starej nazwy usługi i przestań używać tej nazwy w przyszłych żądaniach indeksowania.

  5. Przenieś wszystkie wykorzystanie starej usługi do nowej. Jeśli np. zmienisz nazwę właściwości z „Twórca” na „Autor”, musisz zaktualizować kod zapytania, tak aby w miejscu, w którym wcześniej się odnosił do twórcy.

Cloud Search przechowuje po usunięciu każdej usuniętej usługi lub obiektu przez 30 dni, aby zabezpieczyć się przed jego ponownym użyciem, które mogłoby spowodować nieoczekiwane wyniki indeksowania. W ciągu tych 30 dni musisz zrezygnować z całego korzystania z usuniętego obiektu lub usuniętej usługi, m.in. 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 obiektów.
  • Maksymalna głębokość hierarchii uporządkowanych danych to 10 poziomów.
  • Łączna liczba pól w obiekcie jest ograniczona do 1000. Obejmuje to liczbę pól podstawowych oraz sumę pól w każdym zagnieżdżonym obiekcie.

Dalsze kroki

Oto kilka kolejnych kroków, które możesz podjąć:

  1. Utwórz interfejs wyszukiwania, aby przetestować schemat.

  2. Dostrój schemat, aby poprawić jakość wyszukiwania.

  3. Ustal strukturę schematu w celu uzyskania optymalnej interpretacji zapytań.

  4. Dowiedz się, jak użyć schematu _dictionaryEntry do definiowania synonimów haseł często używanych w Twojej firmie. Aby użyć schematu _dictionaryEntry, zapoznaj się z artykułem Definiowanie synonimów.

  5. Utwórz łącznik.