Tworzenie i rejestrowanie schematu

Schemat Google Cloud Search to struktura JSON, która określa obiekty, właściwości i opcje indeksowania danych oraz wysyłania zapytań. Łącznik treści używa zarejestrowanego schematu do strukturyzowania i indeksowania danych repozytorium.

Aby utworzyć schemat, prześlij do interfejsu API obiekt schematu JSON. Przed indeksowaniem danych musisz zarejestrować schemat dla każdego repozytorium.

W tym dokumencie opisujemy podstawy tworzenia schematu. Aby zoptymalizować wyszukiwanie, przeczytaj artykuł Poprawianie jakości wyszukiwania.

Tworzenie schematu

Aby utworzyć schemat Cloud Search:

  1. Określ oczekiwane zachowanie użytkowników
  2. Zainicjuj źródło danych
  3. Zdefiniuj obiekty
  4. Zdefiniuj właściwości obiektów
  5. Zarejestruj schemat
  6. Zindeksuj dane
  7. Przetestuj schemat
  8. Dostosuj schemat

Określ oczekiwane zachowanie użytkowników

Przewidywanie sposobu wyszukiwania przez użytkowników pomaga określić strategię schematu. W przypadku bazy danych filmów użytkownicy mogą wyszukiwać np. „filmy z Robertem Redfordem”. Twój schemat musi obsługiwać zapytania o filmy z określonym aktorem.

Aby dopasować schemat do zachowania użytkowników:

  1. Oceń różne zapytania od różnych użytkowników.
  2. Określ logiczne zbiory danych, czyli obiekty, takie jak „film”.
  3. Określ właściwości (atrybuty), takie jak tytuł czy data premiery.
  4. Określ prawidłowe wartości właściwości, takie jak „Poszukiwacze zaginionej arki”.
  5. Określ potrzeby dotyczące sortowania i rankingu, takie jak kolejność chronologiczna czy oceny użytkowników.
  6. Określ właściwości kontekstu, takie jak stanowisko, aby ulepszyć sugestie autouzupełniania.
  7. Utwórz listę tych obiektów, właściwości i przykładowych wartości. Użyj tej listy, aby określić opcje operatora.

Zainicjuj źródło danych

Źródło danych reprezentuje zindeksowane dane repozytorium przechowywane w Google Cloud. Więcej informacji znajdziesz w artykule Zarządzanie źródłami danych innych firm. Gdy użytkownik kliknie wynik, Cloud Search przekieruje go do elementu za pomocą adresu URL z żądania indeksowania.

Zdefiniuj obiekty

Obiekt to podstawowa jednostka schematu. Obiektami są struktury logiczne, takie jak „film” czy „osoba”. Każdy obiekt ma właściwości , takie jak tytuł, czas trwania czy nazwa.

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

Schemat to lista definicji obiektów w tagu objectDefinitions.

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

Używaj unikalnych nazw każdego obiektu, np. movie. Usługa schematu używa tych nazw jako kluczy. Więcej informacji znajdziesz w artykule ObjectDefinition.

Zdefiniuj właściwości obiektów

Zdefiniuj właściwości, takie jak tytuł i data premiery, w sekcji propertyDefinitions. Użyj options w przypadku freshnessOptions (ranking) i displayOptions (etykiety interfejsu).

{
  "objectDefinitions": [{
    "name": "movie",
    "propertyDefinitions": [
      {
        "name": "movieTitle",
        "isReturnable": 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"
          }
        }
      }
    ]
  }]
}

PropertyDefinition obejmuje:

  • Ciąg znaków name.
  • Opcje niezależne od typu (np. isReturnable).
  • Typ i opcje specyficzne dla typu (np. textPropertyOptions).
  • operatorOptions dla operatorów wyszukiwania.
  • displayOptions dla etykiet interfejsu.

Możesz ponownie używać nazw właściwości w różnych obiektach. Na przykład movieTitle może występować zarówno w obiekcie movie, jak i w filmografii obiektu person.

Dodawanie opcji niezależnych od typu

PropertyDefinition obejmuje opcje logiczne, które umożliwiają skonfigurowanie funkcji wyszukiwania dla właściwości, niezależnie od jej typu. Te opcje mają domyślnie wartość false i aby można było ich używać, należy ustawić je na true.

  • isReturnable: ustaw na true, jeśli dane właściwości mają być zwracane w wynikach wyszukiwania za pomocą interfejsu Query API. Właściwości, których nie można zwrócić, mogą być używane do wyszukiwania lub rankingu bez wyświetlania w wynikach.
  • isRepeatable: ustaw na true, jeśli właściwość może mieć wiele wartości. Na przykład film ma jedną datę premiery, ale wielu aktorów.
  • isSortable: ustaw na true, jeśli właściwość może być używana do sortowania. Nie może mieć wartości true, jeśli isRepeatable ma wartość true lub jeśli właściwość znajduje się w powtarzalnym obiekcie podrzędnym.
  • isFacetable: ustaw na true, jeśli właściwość może być używana do generowania aspektów (atrybutów używanych do zawężania wyników wyszukiwania).
    • Wymaga, aby isReturnable miało wartość true.
    • Obsługiwane tylko w przypadku właściwości typu enum, logicznych i tekstowych.
  • isWildcardSearchable: ustaw na true, aby umożliwić użytkownikom wyszukiwanie z użyciem symboli wieloznacznych w tej właściwości. Ta opcja jest dostępna tylko w przypadku właściwości tekstowych, a jej działanie zależy od ustawienia exactMatchWithOperator:
    • Jeśli exactMatchWithOperator ma wartość true: wartość tekstowa jest traktowana jako pojedynczy token. Zapytanie takie jak science-* pasuje do wartości science-fiction.
    • Jeśli exactMatchWithOperator ma wartość false: wartość tekstowa jest tokenizowana. Zapytanie takie jak sci* lub fi* pasuje do science-fiction, ale science-* już nie.

Określanie typu

Ustaw typ danych, definiując odpowiedni obiekt opcji właściwości (np. textPropertyOptions). Jeśli znasz wszystkie możliwe wartości, użyj wyliczeń (enumPropertyOptions). Właściwość może mieć tylko 1 typ danych.

Określanie opcji operatora

operatorOptions opisują, jak właściwość działa jako operator wyszukiwania.

Każdy operatorOptions wymaga operatorName (np. title). Jest to parametr, który użytkownicy wpisują w zapytaniach (np. title:titanic). Używaj intuicyjnych nazw i udostępniaj je użytkownikom.

Możesz udostępniać operatorName we właściwościach tego samego typu. Zapytania używające tej nazwy pobierają wyniki ze wszystkich pasujących właściwości.

Właściwości, które można sortować, mogą zawierać lessThanOperatorName i greaterThanOperatorName w przypadku zapytań porównawczych. Właściwości tekstowe mogą używać exactMatchWithOperator, aby traktować całą wartość jako pojedynczy token.

Dodawanie opcji wyświetlania

Opcjonalna sekcja displayOptions zawiera displayLabel. Jest to przyjazna dla użytkownika etykieta wyświetlana w wynikach wyszukiwania.

Dodawanie operatorów filtrowania sugestii

Użyj suggestionFilteringOperators[], aby zdefiniować właściwość, która filtruje sugestie autouzupełniania (np. filtrowanie sugestii filmów według preferowanego gatunku użytkownika). Możesz zdefiniować tylko 1 filtr sugestii.

Zarejestruj schemat

Zarejestruj schemat w usłudze schematu za pomocą identyfikatora źródła danych. Wyślij żądanie UpdateSchema:

PUT https://cloudsearch.googleapis.com/v1/indexing/{name=datasources/*}/schema

Aby przetestować schemat bez jego rejestrowania, użyj validateOnly: true.

Zindeksuj dane

Po rejestracji wypełnij źródło danych za pomocą Index wywołań, zwykle za pomocą łącznika.

Przykładowe żądanie indeksowania:

{
  "name": "datasource/<data_source_id>/items/titanic",
  "metadata": {
    "title": "Titanic",
    "objectType": "movie"
  },
  "structuredData": {
    "object": {
      "properties": [{
        "name": "movieTitle",
        "textValues": { "values": ["Titanic"] }
      }]
    }
  },
  "itemType": "CONTENT_ITEM"
}

Przetestuj schemat

Przed wdrożeniem przetestuj schemat w małym repozytorium. Utwórz listę ACL, która ogranicza wyniki do użytkownika testowego.

  • Ogólne zapytanie: wyszukaj ciąg znaków (np. „titanic”), aby zobaczyć wszystkie pasujące elementy.
  • Zapytanie z operatorem: użyj operatora (np. actor:Zane), aby ograniczyć wyniki.

Dostosuj schemat

Monitoruj opinie użytkowników i dostosuj schemat. Możesz indeksować nowe pola lub zmieniać nazwy operatorów, aby były bardziej intuicyjne.

Ponowne indeksowanie po zmianie schematu

Nie musisz ponownie indeksować w przypadku zmian:

  • Nazwy operatorów.
  • Limity liczbowe.
  • Ranking uporządkowany.
  • Opcje świeżości lub wyświetlania.

Musisz ponownie indeksować w przypadku:

  • Dodawanie lub usuwanie właściwości albo obiektów.
  • Zmiana isReturnable, isFacetable lub isSortable na true.
  • Oznaczanie właściwości jako isSuggestable.

Niedozwolone zmiany właściwości

Niedozwolone są zmiany, które powodują uszkodzenie indeksu lub niespójne wyniki, w tym:

  • Typ danych lub nazwa właściwości.
  • Ustawienia exactMatchWithOperator lub retrievalImportance.

Wprowadzanie złożonych zmian w schemacie

Aby wprowadzić niedozwoloną zmianę, przenieś właściwości ze starej definicji do nowej:

  1. Dodaj do schematu nową właściwość o innej nazwie.
  2. Zarejestruj schemat z nowymi i starymi właściwościami.
  3. Wypełnij indeks wstecznie, używając tylko nowej właściwości.
  4. Usuń starą właściwość ze schematu.
  5. Zaktualizuj kod zapytania, aby używać nowej nazwy właściwości.

Cloud Search przechowuje usunięte elementy przez 30 dni, aby zapobiec problemom z ponownym użyciem.

Limity rozmiaru

  • Maksymalnie 10 obiektów najwyższego poziomu.
  • Maksymalna głębokość 10 poziomów.
  • Maksymalnie 1000 pól na obiekt (w tym pola zagnieżdżone).

Następne kroki

  1. Tworzenie interfejsu wyszukiwania.
  2. Poprawianie jakości wyszukiwania.
  3. Strukturyzowanie schematu w celu optymalnego interpretowania zapytań.
  4. Definiowanie synonimów.