Tworzenie i rejestrowanie schematu

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

Schemat tworzysz, przekazując do interfejsu API obiekt schematu JSON. Przed indeksowaniem danych musisz zarejestrować schemat dla każdego repozytorium.

W tym dokumencie opisujemy podstawy tworzenia schematów. Aby zoptymalizować wyszukiwanie, zapoznaj się z artykułem Poprawianie jakości wyszukiwania.

Tworzenie schematu

Aby utworzyć schemat Cloud Search, wykonaj te czynności:

  1. Określanie oczekiwanych zachowań użytkowników
  2. Inicjowanie źródła danych
  3. Określ obiekty
  4. Definiowanie właściwości obiektu
  5. Rejestrowanie schematu
  6. Indeksowanie danych
  7. Testowanie schematu
  8. Dostosowywanie schematu

Określanie oczekiwanych zachowań użytkowników

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

Aby dostosować schemat do zachowań użytkowników:

  1. Oceniaj różne zapytania od różnych użytkowników.
  2. Identyfikuj logiczne zbiory danych, czyli obiekty, takie jak „film”.
  3. Identyfikuj właściwości (atrybuty) takie jak tytuł czy data premiery.
  4. Określ prawidłowe wartości właściwości, np. „Poszukiwacze zaginionej arki”.
  5. Określ potrzeby w zakresie sortowania i rankingu, np. kolejność chronologiczna lub oceny odbiorców.
  6. Określ właściwości kontekstu, takie jak stanowisko, aby ulepszyć sugestie autouzupełniania.
  7. Wymień te obiekty, właściwości i przykładowe wartości. Użyj tej listy, aby określić opcje operatora.

Inicjowanie źródła danych

Źródło danych reprezentuje zindeksowane dane repozytorium przechowywane w Google Cloud. Zobacz Zarządzanie zewnętrznymi źródłami danych. Gdy użytkownik kliknie wynik, Cloud Search przekieruje go do elementu, używając adresu URL z żądania indeksowania.

Określ obiekty

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

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

Schema to lista definicji obiektów w tagu objectDefinitions.

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

Używaj unikalnych nazw dla każdego obiektu, np. movie. Usługa schematu używa tych nazw jako kluczy. Zobacz ObjectDefinition.

Określanie właściwości obiektu

Zdefiniuj właściwości, takie jak tytuł i data premiery, w sekcji propertyDefinitions. Używaj 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 zawiera:

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

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

Dodawanie opcji niezależnych od typu

PropertyDefinition zawiera opcje logiczne, które umożliwiają skonfigurowanie funkcji wyszukiwania w usłudze niezależnie od jej typu. Te opcje są domyślnie ustawione na false i muszą być ustawione na true, aby można było z nich korzystać.

  • isReturnable: ustaw na true, jeśli dane usługi 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 określania rankingu bez pojawiania się 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 służących do zawężania wyników wyszukiwania).
    • Wymaga, aby wartość isReturnable była równa true.
    • Obsługiwane tylko w przypadku właściwości typu wyliczeniowego, logicznego i tekstowego.
  • isWildcardSearchable: ustaw wartość true, aby umożliwić użytkownikom przeprowadzanie wyszukiwań 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 to 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śl typ

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). Usługa może mieć tylko 1 typ danych.

Definiowanie opcji operatora

operatorOptions wyjaśnij, jak właściwość działa jako operator wyszukiwania;

Każdy operatorOptions musi mieć 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 w usługach tego samego typu. Zapytania używające tej nazwy pobierają wyniki ze wszystkich pasujących usług.

Właściwości, według których można sortować, mogą obejmować lessThanOperatorNamegreaterThanOperatorName w przypadku zapytań porównawczych. Właściwości tekstu 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.

Rejestrowanie schematu

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

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

Użyj validateOnly: true, aby przetestować schemat bez rejestrowania go.

Indeksowanie danych

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

Przykładowa prośba o zindeksowanie:

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

Testowanie schematu

Przed wdrożeniem w środowisku produkcyjnym przetestuj małe 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.

Dostosowywanie schematu

Monitoruj opinie użytkowników i dostosowuj 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ć, aby wprowadzić zmiany w tych elementach:

  • Nazwy operatorów.
  • Limity liczbowe.
  • Ranking uporządkowany.
  • odświeżania lub opcji wyświetlania.

Musisz ponownie zindeksować:

  • dodawanie i usuwanie usług lub obiektów;
  • Zmienianie isReturnable, isFacetable lub isSortable na true.
  • Oznaczanie usługi isSuggestable.

Niedozwolone zmiany właściwości

Zmiany, które powodują uszkodzenie indeksu lub niespójne wyniki, są niedozwolone. Obejmują one:

  • Typ danych lub nazwa właściwości.
  • 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, 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 usługi.

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

Ograniczenia rozmiaru

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

Następne kroki

  1. Utwórz interfejs wyszukiwania.
  2. Popraw jakość wyszukiwania
  3. Strukturyzuj schemat, aby zapewnić optymalną interpretację zapytań.
  4. Określ synonimy.