Tworzenie i rejestrowanie schematu

Schemat Google Cloud Search to struktura JSON, która określa obiekty, właściwości i opcje używane do indeksowania i tworzenia zapytań dotyczących danych. Oprogramowanie sprzęgające zawartości odczytuje dane z repozytorium, a na podstawie zarejestrowanego schematu, struktury i indeksuje dane.

Schemat możesz utworzyć, dostarczając interfejs schematu JSON i rejestrując go. Przed zindeksowaniem danych musisz zarejestrować obiekt schematu dla każdego repozytorium.

Ten dokument zawiera podstawowe informacje o tworzeniu schematów. Informacje o tym, jak poprawić schemat wyszukiwania, znajdziesz w artykule Jak poprawić jakość wyszukiwania.

Tworzenie schematu

Poniżej znajdziesz listę czynności, które musisz wykonać, aby utworzyć schemat Cloud Search:

  1. Określanie oczekiwanego zachowania użytkownika
  2. Zainicjowanie źródła danych
  3. Tworzenie schematu
  4. Uzupełnianie przykładowego schematu
  5. Rejestrowanie schematu
  6. Indeksowanie danych
  7. Testowanie schematu
  8. Dostrajanie schematu

Określ oczekiwane zachowanie użytkownika

Przewidywanie typów zapytań wysyłanych przez użytkowników pomaga w opracowywaniu strategii.

Na przykład gdy wysyłasz zapytania do bazy danych filmów, możesz się spodziewać, że użytkownik wpisze zapytanie takie jak „Pokaż mi wszystkie filmy z Robertem Redfordem”. Schemat musi więc obsługiwać wyniki zapytania na podstawie „wszystkich filmów z określonym aktorem”.

Aby zdefiniować schemat odzwierciedlający zachowania użytkowników, rozważ wykonanie tych czynności:

  1. Ocena różnorodnego zestawu odpowiednich zapytań od różnych użytkowników.
  2. Zidentyfikuj obiekty, które mogą być używane w zapytaniach. Obiekty to logiczne zbiory danych powiązanych, np. film w bazie danych filmów.
  3. Określ właściwości i wartości składające się na obiekt i które mogą być używane w zapytaniach. Właściwości to możliwe do indeksowania atrybuty obiektu. Mogą one obejmować wartości podstawowe lub inne obiekty. Na przykład właściwości filmu mogą mieć takie wartości jak tytuł i data premiery jako wartości podstawowe. Obiekt filmowy może też zawierać inne obiekty, takie jak elementy obsady, które mają własne właściwości, takie jak nazwa lub rola.
  4. Podaj przykładowe prawidłowe wartości właściwości. Wartości to rzeczywiste dane indeksowane na potrzeby usługi. Na przykład tytuł jednego z filmów w bazie danych może brzmieć „Najeźdźcy Zagubionej Arki”.
  5. Określ opcje sortowania i rankingu wymagane przez użytkowników. Na przykład podczas tworzenia zapytania do filmu użytkownicy mogą je posortować chronologicznie i porządkować według kategorii odbiorców, a nie sortować alfabetycznie według tytułu.
  6. (Opcjonalnie) Zastanów się, czy któraś z usług odpowiada bardziej szczegółowemu kontekstowi, w którym użytkownicy mogą wykonywać wyszukiwania, np. roli lub działu użytkownika, aby otrzymywać sugestie autouzupełniania na podstawie kontekstu. Na przykład osoby wyszukujące bazę danych filmów mogą być zainteresowane tylko konkretnymi filmami. Użytkownicy mogą określić, jaki gatunek mają być wyszukiwane. Możliwe, że będą one częścią profilu użytkownika. Gdy użytkownik zacznie wpisywać zapytanie filmów, w ramach sugestii autouzupełniania podpowiadane są tylko filmy z ich preferowanego gatunku, np. „filmy akcji”.
  7. Sporządź listę tych obiektów, właściwości i przykładowych wartości, których można używać w wyszukiwaniach. (Szczegółowe informacje o wykorzystaniu tej listy znajdziesz w sekcji Definiowanie opcji operatorów).

Inicjowanie źródła danych

Źródło danych reprezentuje dane z repozytorium, które zostało zindeksowane i zapisane 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 kieruje go do rzeczywistego elementu przy użyciu adresu URL podanego w prośbie o zindeksowanie.

Zdefiniuj obiekty

Podstawową jednostką danych w schemacie jest obiekt, zwany również „obiektem schematu”, który jest logiczną strukturą danych. W bazie danych filmów jedną logiczną strukturą danych jest „movie”. Innym obiektem może być osoba, która reprezentuje obsadę i ekipę filmową.

Każdy obiekt w schemacie ma serię właściwości, które opisują ten obiekt, takie jak tytuł i czas trwania filmu oraz imię i nazwisko oraz data urodzenia danej osoby. Właściwości obiektu mogą obejmować wartości podstawowe lub inne obiekty.

Ilustracja 1 pokazuje obiekty filmowe i osobowe oraz powiązane z nimi właściwości.

Rysowanie połączeń schematów między elementami
Ilustracja 1. Przykładowy schemat przedstawiający 2 obiekty i obiekt podrzędny.

Schemat Cloud Search to lista instrukcji definicji obiektów zdefiniowanych w tagu objectDefinitions. Ten fragment kodu zawiera instrukcje objectDefinitions dotyczące obiektów schematu filmu i osoby.

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

Podczas definiowania obiektu schematu podajesz jego 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 dla obiektu filmowego. Usługa schematu wykorzystuje pole name jako kluczowy identyfikator obiektów dostępnych do indeksowania. Więcej informacji o polu name znajdziesz w definicji obiektów.

Określ właściwości obiektu

Zgodnie z odwołaniem do ObjectDefinition za nazwą obiektu znajduje się zestaw options oraz lista propertyDefinitions. options może składać się dodatkowo z freshnessOptions i displayOptions. freshnessOptions służy do dostosowywania rankingu wyszukiwania na podstawie aktualności elementu. displayOptions służy do określania, czy konkretne etykiety i właściwości mają być wyświetlane w wynikach wyszukiwania obiektu.

W sekcji propertyDefinitions możesz zdefiniować właściwości obiektu, takie jak tytuł filmu i data premiery.

Fragment kodu przedstawia 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"
          }
      ...
      ]
    }
  ]
}

PropertyDefinition składa się z tych elementów:

  • ciąg tekstowy name.
  • Lista opcji niezależnych od typu, takich jak isReturnable w poprzednim fragmencie.
  • Typ i powiązane z nim opcje, takie jak textPropertyOptions i retrievalImportance w poprzednim fragmencie kodu.
  • Obiekt operatorOptions opisujący, jak usługa jest używana jako operator wyszukiwania.
  • Jeden lub więcej elementów displayOptions, takich jak displayLabel w poprzednim fragmencie kodu.

Wartość name właściwości musi być unikalna w obrębie obiektu nadrzędnego, ale tej samej nazwy można użyć w innych obiektach i obiektach podrzędnych. Na rysunku 1 tytuł i datę premiery filmu zostały zdefiniowane 2 razy: raz w obiekcie movie, a ponownie w obiekcie podrzędnym filmography obiektu person. Ten schemat wykorzystuje pole movieTitle ponownie, aby schemat mógł obsługiwać 2 rodzaje zachowań podczas wyszukiwania:

  • Pokaż wyniki filmu, gdy użytkownik wyszuka tytuł filmu.
  • Pokaż wyniki osób, gdy użytkownicy szukają tytułu filmu, w którym grali aktor.

Podobnie schemat wykorzystuje ponownie pole releaseDate, ponieważ ma ono takie samo znaczenie dla obu pól movieTitle.

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

Dodaj opcje zależne od typu

Właściwość PropertyDefinition zawiera ogólne opcje wyszukiwania stosowane we wszystkich usługach niezależnie od typu danych.

  • isReturnable – wskazuje, czy usługa identyfikuje dane, które powinny być zwracane w wynikach wyszukiwania przez interfejs API zapytań. Wszystkie przykładowe właściwości filmów są zwracane. Zwracanych wyników można używać do wyszukiwania lub ustalania pozycji w rankingu bez zwracania ich użytkownikowi.
  • isRepeatable – wskazuje, czy w danej usłudze może być używanych wiele wartości. Na przykład film może mieć tylko jedną datę premiery, ale może mieć wielu aktorów.
  • isSortable – wskazuje, że właściwości można użyć do sortowania. Nie może tak być w przypadku właściwości, które można powtarzać. Na przykład wyniki filmów mogą być sortowane według daty premiery lub oceny odbiorców.
  • isFacetable – wskazuje, że usługi można używać do generowania aspektów. Aspekt służy do zawężania wyników wyszukiwania, w których użytkownik widzi początkowe wyniki, a następnie dodaje kryteria (aspekty), aby dodatkowo zawęzić wyniki. Ta opcja nie może być zgodna z właściwościami, których typ to „object”, a isReturnable musi mieć wartość Prawda, aby ustawić tę opcję. Poza tym ta opcja jest obsługiwana tylko w przypadku właściwości wyliczenia, wartości logicznej i tekstu. Na przykład w naszym przykładowym schemacie możemy zapewnić widoczność genre, actorName, userRating i mpaaRating, aby umożliwić ich interaktywne zawężanie wyników wyszukiwania.
  • isWildcardSearchable wskazuje, że użytkownicy mogą wyszukiwać symbole wieloznaczne dla tej właściwości. Ta opcja jest dostępna tylko we właściwościach tekstu. Działanie wyszukiwania przy użyciu symboli zastępczych w polu tekstowym zależy od wartości ustawionej w polu exactmatchWithOperator. Jeśli exactMatchWithOperator ma wartość true, wartość tekstowa jest tokenizowana jako 1 wartość atomowa i jest przeprowadzane wyszukiwanie przy użyciu symbolu wieloznacznego. Jeśli na przykład wartość tekstowa to science-fiction, zapytanie z symbolem wieloznacznym science-* pasuje do tego parametru. Jeśli exactMatchWithOperator ma wartość false, wartość tokena jest tokenizowana, a każdy token jest przeprowadzany przy użyciu symboli wieloznacznych. Jeśli np. wartość tekstowa to „ Science-fiction”, symbol wieloznaczny w zapytaniu sci* lub fi* pasuje do elementu, ale science-* do niego nie pasuje.

Wszystkie ogólne parametry wyszukiwania to wartości logiczne. Wszystkie mają domyślną wartość false i muszą być ustawione na true.

W tej tabeli podano 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 mają ustawienie isRepeatable ustawione na true, ponieważ film może należeć do kilku gatunków i zwykle ma więcej niż jednego aktora. Właściwość nie może być sortowana, jeśli jest powtarzalna lub znajduje się w powtarzającym się obiekcie podrzędnym.

Określ typ

W sekcji PropertyDefinition znajdziesz kilka znaczników xxPropertyOptions, w których xx to konkretny typ, np. boolean. Aby ustawić typ danych właściwości, musisz zdefiniować odpowiedni obiekt typu danych. Zdefiniowanie obiektu typu danych dla usługi określa typ danych tej właściwości. Na przykład zdefiniowanie atrybutu textPropertyOptions we właściwości movieTitle wskazuje, że tytuł filmu to tekst. Fragment kodu poniżej pokazuje właściwość movieTitle z ustawionym typem danych textPropertyOptions.

{
  "name": "movieTitle",
  "isReturnable": true,
  "isWildcardSearchable": true,
  "textPropertyOptions": {
    ...
  },
  ...
},

Z usługą może być powiązany tylko jeden 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 jedno i drugie.

Oto obiekty typu danych używane do określania typów danych we właściwościach przykładowego schematu filmu:

Właściwość Obiekt typu danych
movieTitle textPropertyOptions
releaseDate datePropertyOptions
genre enumPropertyOptions
duration textPropertyOptions
actorName textPropertyOptions
userRating integerPropertyOptions
mpaaRating textPropertyOptions

Typ danych wybrany dla usługi zależy od oczekiwanych przypadków użycia. W przemyślenej sytuacji tego schematu filmu użytkownicy powinni oczekiwać, że wyniki będą sortowane chronologicznie, więc releaseDate jest obiektem daty. Jeśli na przykład można było porównać grudniowe wersje z wersjami wprowadzonymi w styczniu z danymi z stycznia, przydatny może być format ciągu znaków.

Skonfiguruj opcje zależne od typu

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 enumPropertyOptions. Dodatkowo opcja orderedRanking umożliwia porównywanie wartości względem siebie. Poniższy fragment przedstawia właściwość movieTitle z textPropertyOptions ustawieniem typu danych i opcją retrievalImportance specyficzną dla typu.

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

Oto dodatkowe opcje dotyczące konkretnego typu używane w przykładowym schemacie:

Właściwość Typ Opcje dotyczące konkretnego typu
movieTitle textPropertyOptions retrievalImportance
releaseDate datePropertyOptions
genre enumPropertyOptions
duration textPropertyOptions
actorName textPropertyOptions
userRating integerPropertyOptions orderedRanking, maximumValue
mpaaRating textPropertyOptions

Zdefiniuj opcje operatorów

Oprócz opcji związanych z typem każdego typu jest też zestaw opcjonalnych operatorOptions. Opisują one sposób użycia właściwości jako operatora wyszukiwania. Fragment kodu poniżej zawiera właściwość movieTitle z ustawieniem typu textPropertyOptions oraz opcjami retrievalImportance i operatorOptions dla określonych typów danych.

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

Każdy operatorOptions ma operatorName, np. title dla movieTitle. Nazwa operatora to operator wyszukiwania dla danej usługi. Operator wyszukiwania to parametr, którego użytkownicy mogą używać podczas zawężania wyszukiwania. Aby na przykład wyszukać filmy na podstawie tytułu, użytkownik wpisuje title:movieName, gdzie movieName to tytuł filmu.

Nazwy operatorów nie muszą być takie same jak nazwy właściwości. Zamiast tego używaj nazw operatorów, które odzwierciedlają najczęściej używane słowa używane przez użytkowników w Twojej organizacji. Jeśli na przykład użytkownicy wolą używać nazwy „title” zamiast tytułu, jako nazwy operatora należy ustawić nazwę „name”.

Możesz używać tej samej nazwy operatora w wielu usługach, pod warunkiem że wszystkie są powiązane z tym samym typem. Jeśli w zapytaniu używasz wspólnej nazwy operatora, pobierane są wszystkie właściwości korzystające z tej nazwy. Załóżmy na przykład, że obiekt filmu miał właściwości plotSummary i plotSynopsis, a każda z nich miała wartość operatorName wynoszącą plot. Jeśli obie te właściwości to tekst (textPropertyOptions), pojedyncze zapytanie korzystające z operatora wyszukiwania plot pobiera je obie.

Poza właściwościami operatorName właściwości operatorOptions, które można sortować, mogą zawierać pola lessThanOperatorName i greaterThanOperatorName. Za pomocą tych opcji użytkownicy mogą tworzyć zapytania na podstawie porównań z przesłaną wartością.

Na koniec pole textOperatorOptions w polu operatorOptions zawiera pole exactMatchWithOperator. Jeśli ustawisz exactMatchWithOperator na true, ciąg zapytania musi odpowiadać całej wartości właściwości, a nie tylko w tekście. Wartość tekstowa jest traktowana jako jedna wartość atomowa w wyszukiwaniach operatorów i dopasowaniach aspektu.

Możesz na przykład zindeksować obiekty z książki lub książki o właściwościach gatunku. Gatunki mogą obejmować „ Science-fikcja”, „Nauka” i „Fikcja”. Jeśli exactMatchWithOperator ma wartość false lub jest pominięty, wyszukiwanie gatunku lub wybór aspektu „Nauka” lub „Fikcja” zwróci też wyniki „ Science-Fiction”, ponieważ tekst jest tokenizowany, a tokeny „Nauka” i „Fikcja” występują w sekcji „ Science-fikcja”. Jeśli exactMatchWithOperator ma wartość true, tekst jest traktowany jako pojedynczy token, więc żadna z nich nie pasuje do kategorii „Nauka” ani „Fikcja”.

(Opcjonalnie) Dodaj sekcję displayOptions

Na końcu 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 właściwości. Jeśli usługa jest skonfigurowana pod kątem wyświetlania za pomocą obiektów ObjectDisplayOptions, ta etykieta jest wyświetlana przed usługą. Jeśli usługa jest skonfigurowana pod kątem wyświetlania, a displayLabel nie jest zdefiniowana, wyświetlana jest tylko wartość tej usługi.

Fragment kodu poniżej pokazuje właściwość movieTitle z atrybutem displayLabel ustawionym na „Title” (Tytuł).

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

Poniżej znajdziesz wartości displayLabel właściwości wszystkich obiektów 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 sekcji propertyDefinition znajduje się opcjonalna sekcja suggestionFilteringOperators[]. W tej sekcji możesz określić usługę używaną do filtrowania sugestii autouzupełniania. Możesz np. zdefiniować operator genre, aby filtrować sugestie na podstawie preferowanego gatunku filmu użytkownika. Gdy użytkownik wpisze zapytanie, w ramach sugestii autouzupełniania wyświetlają się tylko te filmy, które odpowiadają jego preferowanemu gatunku.

Zarejestruj schemat

Aby dane uporządkowane były zwracane w zapytaniach Cloud Search, musisz zarejestrować schemat w usłudze schematów Cloud Search. Zarejestrowanie schematu wymaga identyfikatora źródła danych uzyskanego w kroku Inicjowanie źródła danych.

Korzystając z identyfikatora źródła danych, wyślij żądanie UpdateSchema do zarejestrowania schematu.

Zgodnie z informacjami na stronie referencyjnej UpdateSchema wyślij następujące żądanie HTTP, aby zarejestrować schemat:

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

Treść żądania powinna zawierać te elementy:

{
  "validateOnly": // true or false,
  "schema": {
    // ... Your complete schema object ...
  }
}

Użyj opcji validateOnly, aby przetestować poprawność schematu bez rejestrowania go.

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.

Zgodnie ze schematem filmu żądanie indeksowania interfejsu REST API dla pojedynczego filmu 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, że indeksowanie właściwości schematu releaseDate korzysta z właściwości podrzędnych year, month i day, które dziedziczy, bo jest ona zdefiniowana jako typ danych date za pomocą właściwości datePropertyOptions, by ją zdefiniować. Ponieważ year, month i day nie są zdefiniowane w schemacie, nie można przesłać zapytania dla jednej z tych właściwości (np. year).

Zwróć też uwagę na to, jak właściwość powtarzalna actorName jest indeksowana, używając listy wartości.

Wykrywanie potencjalnych problemów z indeksowaniem

Dwa najczęstsze problemy związane ze schematami i indeksowaniem:

  • Żądanie indeksowania zawiera obiekt lub nazwę schematu, które nie zostały zarejestrowane w usłudze schematu. Ten problem powoduje ignorowanie właściwości lub obiektu.

  • Żądanie indeksowania ma właściwość o wartości typu innego 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 w mniejszym repozytorium testowych danych. Testowanie na mniejszym 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 testowym 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.

Jeśli chcesz utworzyć interfejs wyszukiwania do weryfikacji zapytań, przeczytaj artykuł Interfejs wyszukiwania.

Ta sekcja zawiera kilka przykładowych zapytań, za pomocą których możesz przetestować schemat filmu.

Testowanie za pomocą ogólnego zapytania

Zapytanie ogólne zwraca wszystkie elementy w źródle danych zawierające określony ciąg. 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 Return. Wszystkie filmy zawierające słowo „titanic” powinny być zwracane w wynikach wyszukiwania.

Testowanie z użyciem operatora

Dodanie operatora do zapytania ogranicza wyniki do elementów pasujących do wartości tego operatora. Możesz np. użyć operatora actor, aby znaleźć wszystkie filmy z konkretnym aktorem. Za pomocą interfejsu wyszukiwania możesz przeprowadzić zapytanie z użyciem operatora, wpisując parę operator=wartość, np. "actor:Zane", a następnie naciskając Return. Wszystkie filmy z Zane jako aktorami powinny być zwracane w wynikach wyszukiwania.

Dostosuj schemat

Po użyciu schematu i danych możesz monitorować, co działa, a co nie w przypadku użytkowników. Warto dostosować schemat do tych sytuacji:

  • Indeksowanie pola, które nie zostało wcześniej zindeksowane. Na przykład użytkownicy mogą wielokrotnie wyszukiwać filmy na podstawie imienia i nazwiska reżysera, więc możesz dostosować schemat, tak aby obsługiwał on nazwę reżysera.
  • zmienianie nazw operatorów wyszukiwania na podstawie opinii użytkowników. Nazwy operatorów muszą być przyjazne dla użytkownika. Jeśli użytkownicy stale „zapamiętują” nieprawidłową nazwę operatora, warto rozważyć jej zmianę.

Ponowne indeksowanie po zmianie schematu

Zmiana dowolnej z tych wartości w schemacie nie wymaga ponownego zindeksowania danych. Wystarczy przesłać nowe żądanie UpdateSchema, a indeks będzie nadal działać:

  • Nazwy operatorów.
  • Minimalna i maksymalna wartość całkowita.
  • Kolejność w postaci liczby całkowitej i wyliczenia.
  • Opcje aktualności.
  • Opcje wyświetlania.

W przypadku poniższych zmian dane zindeksowane wcześniej będą nadal działać zgodnie z wcześniej zarejestrowanym schematem. Aby jednak zobaczyć zmiany oparte na zaktualizowanym schemacie, musisz ponownie zindeksować istniejące wpisy:

  • Dodawanie lub usuwanie nowej właściwości albo obiektu
  • Zmieniam isReturnable, isFacetable lub isSortable z false na true.

Opcję isFacetable lub isSortable należy ustawić na true tylko wtedy, gdy jest to konieczne.

Na koniec, gdy aktualizujesz schemat przez oznaczenie usługi isSuggestable, musisz ponownie zindeksować dane, co powoduje opóźnienie w korzystaniu z autouzupełniania w tej usłudze.

Niedozwolone zmiany właściwości

Niektóre zmiany schematu są niedozwolone, nawet jeśli ponownie zindeksujesz dane, ponieważ spowodują one uszkodzenie indeksu albo spowodują niespójne lub niespójne wyniki wyszukiwania. Należą do nich:

  • Typ danych usługi.
  • Nazwa usługi.
  • Ustawienie exactMatchWithOperator.
  • Ustawienie retrievalImportance.

Można jednak obejść to ograniczenie.

Wprowadzanie złożonych zmian schematu

Aby uniknąć zmian, które mogą skutkować niską jakością wyników wyszukiwania lub uszkodzonym indeksem wyszukiwania, po zindeksowaniu repozytorium Cloud Search blokuje niektóre zmiany w żądaniach UpdateSchema. Na przykład nie można zmienić typu danych ani nazwy usługi. Nie można osiągnąć tych zmian za pomocą prostego żądania UpdateSchema, nawet jeśli ponownie zindeksujesz dane.

Jeśli musisz wprowadzić w swoim schemacie zmianę niedozwoloną, często możesz wprowadzić dozwolone zmiany, które pozwolą uzyskać taki sam efekt. Ogólnie obejmuje to najpierw przeniesienie zindeksowanych właściwości ze starszej definicji obiektu do nowszej, a następnie wysłanie żądania indeksowania korzystającego tylko z nowszej usługi.

Aby zmienić typ danych lub nazwę usługi, wykonaj te czynności:

  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, by w żądaniu wysłać cały schemat, w tym nową i starą usługę.
  3. Wypełnij indeks z repozytorium danych. Aby uzupełnić indeks, wysyłaj wszystkie żądania indeksowania przy użyciu nowej usługi, ale nie w starej, ponieważ spowoduje to podwójne naliczanie zapytań.

    1. Aby uniknąć niespójnego działania, podczas indeksowania reklam zapasowych sprawdź, czy nowa usługa i domyślną usługę są stare.
    2. Po zakończeniu uzupełniania uruchom zapytania testowe do weryfikacji.
  4. Usuń starą usługę. Wyślij kolejne żądanie UpdateSchema bez starej nazwy usługi i nie używaj jej w przyszłych żądaniach indeksowania.

  5. Przenieś wszystkie przypadki użycia starej usługi do nowej. Jeśli np. zmienisz nazwę właściwości z twórcy na autora, musisz zaktualizować kod zapytania, tak aby używać nazwy autora w miejscu, w którym znajdowała się wcześniej nazwa autora.

Cloud Search przechowuje przez 30 dni wszystkie usunięte obiekty i obiekty, aby chronić je przed ponownym użyciem, które mogłoby spowodować nieoczekiwane wyniki indeksowania. W ciągu tych 30 dni należy zrezygnować z używania usuniętego obiektu lub właściwości, w tym przez pominięcie ich w przyszłych żądaniach indeksu. Dzięki temu, gdy postanowisz później ponownie przywrócić tę właściwość lub obiekt, możesz to zrobić, zachowując odpowiedni indeks.

Poznaj ograniczenia rozmiaru

Cloud Search nakłada ograniczenia dotyczące rozmiaru obiektów i schematów uporządkowanych danych. Limity te:

  • 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, co obejmuje liczbę podstawowych pól oraz sumę liczby pól w każdym zagnieżdżonym obiekcie.

Dalsze kroki

Oto co możesz teraz zrobić:

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

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

  3. Uporządkowanie schematu pod kątem optymalnej interpretacji zapytań.

  4. Dowiedz się, jak używać schematu _dictionaryEntry do definiowania synonimów terminów często używanych w Twojej firmie. Informacje o tym, jak używać schematu _dictionaryEntry, znajdziesz w artykule Definiowanie synonimów.

  5. Utwórz łącznik.