Tworzenie i rejestrowanie schematu

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:

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

  1. Oceniaj różnorodny zestaw wartościowych zapytań od różnych użytkowników.
  2. Zidentyfikuj obiekty, które mogą być używane w zapytaniach. Obiekty to logiczne zbiory powiązanych danych, np. filmy w bazie danych.
  3. 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.
  4. 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”.
  5. 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.
  6. (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”.
  7. 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.

Rysunek przedstawiający połączenia schematu między elementami
Rysunek 1. Przykładowy schemat przedstawiający 2 obiekty i obiekt podrzędny.

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 i retrievalImportance 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ć elementy genre, actorName, userRating i mpaaRating, 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śli exactMatchWithOperator 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 to science-fiction, pasuje do niej zapytanie z symbolem wieloznacznym science-*. Jeśli exactMatchWithOperator 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 wieloznacznym sci* lub fi*, ale science-* 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 lub isSortable z false na true.

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:

  1. Dodaj nową właściwość do definicji obiektu w schemacie. Użyj innej nazwy niż właściwość, 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ą.
  3. 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ń.

    1. Aby uniknąć niespójności podczas indeksowania, sprawdź, czy korzystasz z nowej usługi i ustaw domyślną usługę.
    2. Po zakończeniu uzupełniania uruchom zapytania testowe, aby to sprawdzić.
  4. 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.

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

  1. Aby przetestować schemat, utwórz interfejs wyszukiwania.

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

  3. Utwórz schemat, aby uzyskać optymalną interpretację zapytań.

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

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