Tworzenie i rejestrowanie schematu

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:

  1. Określanie oczekiwanego zachowania użytkowników
  2. Inicjowanie źródła danych
  3. Tworzenie schematu
  4. Pełny przykładowy schemat
  5. Rejestrowanie schematu
  6. Indeksowanie danych
  7. Testowanie schematu
  8. 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:

  1. Oceniać różne zestawy zapytań pochodzące od różnych użytkowników.
  2. 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.
  3. 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.
  4. 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”.
  5. 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.
  6. (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”.
  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 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.

Rysowanie połączeń schematu między elementami
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. 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. freshnessOptionssł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: movieTitlereleaseDate.

{
  "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 textPropertyOptionsretrievalImportance 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 polu isReturnable. 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 zmienne genre, actorName, userRatingmpaaRating, 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 parametr exactMatchWithOperator 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 to science-fiction, zostanie do niej dopasowane zapytanie z symbolem wieloznacznym science-*. Jeśli parametr exactMatchWithOperator 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 wieloznacznymi sci* lub fi* pasują do elementu, ale zapytanie science-* 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 operatorOptionsTe 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 retrievalImportanceoperatorOptions 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, monthday 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 lub isSortable 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:

  1. Dodaj nową właściwość do definicji obiektu w schemacie. Użyj innej nazwy niż nazwa usługi, którą chcesz zmienić.
  2. 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ę.
  3. 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ń.

    1. 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ę.
    2. Po zakończeniu uzupełniania danych wykonaj zapytania testowe w celu ich sprawdzenia.
  4. 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.

  5. 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ć:

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

  2. Dostosuj schemat, aby poprawić jakość wyszukiwania.

  3. Utwórz schemat, który zapewni optymalną interpretację zapytań.

  4. 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.

  5. Utwórz oprogramowanie sprzęgające.