Tworzenie i rejestrowanie schematu

Schemat Google Cloud Search to struktura JSON, która definiuje obiektów, właściwości i opcji służących do indeksowania danych i wykonywania dotyczących ich zapytań. Łącznik treści odczytuje dane z repozytorium i na podstawie zarejestrowanego schematu, struktury i indeksujące dane.

Schemat możesz utworzyć, przesyłając do interfejsu API obiekt schematu JSON a następnie ją zarejestrować. Musisz zarejestrować obiekt schematu dla każdego z repozytoriów, zanim zindeksujesz dane.

Ten dokument zawiera podstawowe informacje o tworzeniu schematów. Informacje na temat tego, jak aby dostroić schemat w celu zwiększenia wygody wyszukiwania, zapoznaj się z artykułem Popraw jakość wyszukiwania.

Tworzenie schematu

Poniżej znajduje się lista czynności potrzebnych do utworzenia schematu Cloud Search:

  1. Identyfikowanie oczekiwanego zachowania użytkowników
  2. Inicjowanie źródła danych
  3. Tworzenie schematu
  4. Ukończ przykładowy schemat
  5. Rejestrowanie schematu
  6. Indeksowanie danych
  7. Testowanie schematu
  8. Dostrajanie schematu

Określanie oczekiwanego zachowania użytkowników

Przewidywanie typów zapytań użytkowników pomaga odpowiednio zarządzać strategią do utworzenia schematu.

Na przykład przy wysyłaniu zapytań do bazy danych filmów można przewidzieć użytkownik wpisuje zapytanie, takie jak „Pokaż wszystkie filmy, w których gra Robert Redford”. Schemat musi więc obsługiwać wyniki zapytań oparte na "wszystkich filmach z konkretnego aktora”.

Aby zdefiniować schemat odzwierciedlający wzorce zachowań użytkowników, rozważ: wykonując te zadania:

  1. Ocenianie zróżnicowanych zestawów pożądanych zapytań pochodzących od różnych użytkowników.
  2. Zidentyfikuj obiekty, których można używać w zapytaniach. Obiekty są logiczne zestawów powiązanych danych, takich jak film w bazie filmów.
  3. Określ właściwości i wartości, które składają się na obiekt. Mogą one używanych w zapytaniach. Właściwości to atrybuty obiektu, które można indeksować. mogą zawierać wartości podstawowe lub inne obiekty. Na przykład obiekt video może mieć takie właściwości, jak tytuł filmu czy data wydania jako wartości podstawowe. Obiekt filmowy może też zawierać inne obiektów takich jak członkowie obsady, które mają własne właściwości, takie jak nazwa użytkownika lub rola.
  4. Wskaż przykładowe prawidłowe wartości właściwości. Wartości to rzeczywiste dane. zindeksowanej dla danej usługi. Na przykład tytuł jednego z filmów w Twojej bazie danych może mieć postać „Poszukiwacze Zaginionej Arki”.
  5. Określ opcje sortowania i rankingu odpowiednie dla użytkowników. Przykład: podczas wyszukiwania filmów warto posortować filmy chronologicznie i według oceny odbiorców i nie trzeba ich sortować alfabetycznie według tytułu.
  6. (opcjonalnie) Zastanów się, czy jedna z usług reprezentuje bardziej szczegółową kontekst, w którym mogą być przeprowadzane wyszukiwania – na przykład hasło użytkownika stanowiska pracy lub dzięki czemu sugestie autouzupełniania mogą być podpowiadane na podstawie i dodaje kontekst. Na przykład w przypadku osób przeszukujących bazę filmów użytkownicy mogą mogą być zainteresowani tylko filmami z określonego gatunku. Użytkownicy określiliby to, gatunek, do którego mają wrócić, na przykład w ramach wyszukiwania. profil. Następnie, gdy użytkownik zacznie wpisywać zapytanie o filmy, tylko filmy z wybranego gatunku, np. „filmy akcji”, są sugerowane jako są częścią sugestii autouzupełniania.
  7. Utwórz listę tych obiektów, właściwości i przykładowych wartości, których wartości można używane w wyszukiwaniach. (Szczegółowe informacje o sposobie korzystania z tej listy znajdziesz w więcej informacji znajdziesz w sekcji Definiowanie opcji operatora).

Zainicjuj źródło danych

Źródło danych reprezentuje dane z repozytorium, które zostało zindeksowane i przechowywane w Google Cloud. Aby dowiedzieć się, jak inicjować źródło danych, Patrz Zarządzanie źródłami danych innych firm

Wyniki wyszukiwania użytkownika są zwracane ze źródła danych. Gdy użytkownik kliknie w wyniku wyszukiwania, Cloud Search kieruje użytkownika do konkretnego elementu za pomocą Adres URL podany w prośbie o zindeksowanie.

Zdefiniuj obiekty

Podstawową jednostką danych w schemacie jest obiekt, nazywany również „schematem” Obiekt”, czyli logiczną strukturę danych. W bazie filmów logiczna struktura danych to „film”. Innym obiektem może być „person” (osoba) do reprezentują obsadę i ekipę filmu.

Każdy obiekt w schemacie ma serię właściwości lub atrybutów, które Opisz obiekt, np. tytuł i czas trwania filmu lub nazwę. i datę urodzenia danej osoby. Obiektem może być obiekt podstawowy wartości i innych obiektów.

Rysunek 1 przedstawia film i obiekty osób oraz powiązane usług.

Rysowanie połączeń schematowych między encjami
Rysunek 1. Przykładowy schemat z 2 obiektami i obiekt podrzędny.

Schemat Cloud Search jest to listę instrukcji definicji obiektów zdefiniowanych w funkcji Tag objectDefinitions. Ten fragment kodu schematu pokazuje instrukcje objectDefinitions dla obiektów schematu filmów i osób.

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

Definiując obiekt schematu, podajesz name dla obiektu, który musi musi być niepowtarzalna wśród wszystkich innych obiektów w schemacie. Zwykle jest używana name wartość opisująca obiekt, np. movie w przypadku obiektu movie. Schemat usługa używa pola name jako identyfikatora klucza obiektów możliwych do indeksowania. Dla: więcej informacji o polu name znajdziesz w Definicja obiektu.

Zdefiniuj właściwości obiektu

Zgodnie z informacjami podanymi w pliku referencyjnym dla ObjectDefinition, po nazwie obiektu znajduje się zbiór options, oraz listę propertyDefinitions options może składają się dodatkowo freshnessOptions oraz displayOptions. freshnessOptions służą do dostosowywania rankingu wyszukiwania na podstawie aktualności danego elementu. displayOptions pozwalają określić, czy określone etykiety i właściwości mają być wyświetlane w wynikach wyszukiwania obiektu.

propertyDefinitions określasz właściwości obiektu, np. tytuł filmu. i datę premiery.

Ten fragment kodu pokazuje 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 następujących elementów:

  • ciąg tekstowy name.
  • Lista opcji niezależnych od typu, takich jak isReturnable w poprzedniej sekcji .
  • typ i powiązane z nim opcje specyficzne dla danego typu; takich jak textPropertyOptions i retrievalImportance w poprzednim fragmencie.
  • operatorOptions opisujący, w jaki sposób usługa jest używana jako operator wyszukiwania.
  • Co najmniej 1 element displayOptions, np. displayLabel w poprzednim fragmencie.

Właściwość name właściwości musi być unikalna w obrębie obiektu, który ją zawiera, ale ta sama nazwa może być używana w innych obiektach i obiektach podrzędnych. Na ilustracji 1 tytuł i data premiery filmu zostały określone dwukrotnie: raz w obiekcie movie, a potem w obiekcie podrzędnym filmography obiektu person obiekt. Ten schemat wykorzystuje ponownie pole movieTitle Dzięki temu schemat obsługuje 2 rodzaje działań związanych z wyszukiwaniem:

  • Pokaż wyniki wyszukiwania filmów, gdy użytkownicy wyszukują tytuł filmu.
  • Pokaż wyniki dla osób, które szukają tytułu filmu w której grał aktor.

Schemat ponownie wykorzystuje pole releaseDate, ponieważ ma to samo znaczenie dla dwóch pól movieTitle.

Tworząc własny schemat, zastanów się, w jaki sposób repozytorium może mieć powiązane pola zawierające dane, które chcesz zadeklarować w schemacie więcej niż raz.

Dodaj opcje niezależne od typu

PropertyDefinition Wyświetla ogólne opcje funkcji wyszukiwania wspólne dla wszystkich usług niezależnie od typu danych.

  • isReturnable – wskazuje, czy usługa identyfikuje dane, które powinny zostać zwracanych w wynikach wyszukiwania przez interfejs Query API. Cały przykładowy film właściwości są zwracane. Właściwości bez możliwości zwrotu można wykorzystać do wyszukiwania lub ranking wyników bez zwracania użytkownikowi.
  • isRepeatable – wskazuje, czy w danej usłudze dozwolonych jest kilka wartości. Dla: Na przykład film ma tylko jedną datę premiery, ale może w nim uczestniczyć wielu aktorów.
  • isSortable – oznacza, że właściwość można używać do sortowania. Ten nie może być prawdziwe w przypadku właściwości, które są powtarzalne. Na przykład wyniki wyszukiwania filmów można sortować według daty premiery lub oceny odbiorców.
  • isFacetable – oznacza, że właściwość może być używana do generowania aspektów. Aspekt służy do zawężania wyników wyszukiwania, dzięki którym użytkownik widzi początkowych wyników, a potem dodaje kryteria (czyli aspekty) w celu ich dalszego zawężenia. wyników. Ta opcja nie może być spełniony w przypadku właściwości, których typ to obiekt Aby można było ustawić tę opcję, isReturnable musi mieć wartość Prawda. Ta opcja jest dostępna tylko obsługiwane w przypadku właściwości wyliczeniowych, logicznych i tekstowych. Na przykład w naszym przykładowym schemacie możemy genre, actorName, userRating i mpaaRating mogą mieć możliwość określania aspektów, aby im to umożliwić do interaktywnego zawężania wyników wyszukiwania.
  • isWildcardSearchable oznacza, że użytkownicy mogą wyszukiwać za pomocą symboli wieloznacznych tę usługę. Ta opcja jest dostępna tylko w przypadku właściwości tekstowych. Jak symbol wieloznaczny zależy od wartości ustawionej w polu tekstowym exactMatchWithOperator. Jeśli exactMatchWithOperator ma wartość true, wartość tekstową jest tokenizowana jako jedna wartość atomowa, a wyszukiwanie przy użyciu symboli wieloznacznych to przeciwko niemu. Jeśli na przykład wartością tekstową jest science-fiction, zapytanie z symbolem wieloznacznym science-* pasuje do tego zapytania. Jeśli exactMatchWithOperator ma wartość false, wartość tekstowa jest tokenizowana, a wyszukiwanie przy użyciu symbolu wieloznacznego jest wykonywane pod kątem za każdy token. Jeśli na przykład wartością tekstową jest „science-fiction”, symbol wieloznaczny zapytania sci* lub fi* pasują do elementu, ale science-* nie pasuje do tego elementu.

Te ogólne parametry funkcji wyszukiwania są wartościami logicznymi. oni Wszystkie mają domyślną wartość false i muszą być ustawione na true do wykorzystania.

W tabeli poniżej znajdziesz 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ą wartość isRepeatable ustawioną na true ponieważ film może należeć do więcej niż jednego gatunku i zwykle więcej niż jednego aktora. Nie można sortować właściwości, jeśli jest powtarzalna lub zawarte w powtarzalnym obiekcie podrzędnym.

Zdefiniuj typ

PropertyDefinition znajduje się lista kilku elementów xxPropertyOptions, gdzie xx to konkretny typ, na przykład boolean. Aby ustawić typ danych usługi, musisz zdefiniować odpowiedni obiekt typu data. Definiowanie obiektu typu danych dla usługi określa typ danych tej usługi. Na przykład zdefiniowanie Parametr textPropertyOptions dla właściwości movieTitle wskazuje, że film tytuł jest typu tekst. Ten fragment kodu pokazuje właściwość movieTitle a textPropertyOptions ustawia typ danych.

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

Z usługą może być powiązany tylko 1 typ danych. Na przykład w naszym filmie schemat, releaseDate może być tylko datą (np. 2016-01-13) lub ciąg znaków (np. January 13, 2016), ale nie w obu przypadkach.

Oto obiekty typu data używane do określania typów danych dla funkcji właściwości w przykładowym schemacie Movie:

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 wymyślonym scenariuszu tego schematu filmowego użytkownicy muszą oczekiwać, aby posortować wyniki chronologicznie, więc releaseDate jest obiektem daty. Jeśli na przykład można było porównać wersje z grudnia, na przestrzeni lat ze styczniowymi wydaniami, przydatny może być format ciągu znaków.

Konfigurowanie opcji specyficznych dla danego typu

PropertyDefinition linków do opcji dostępnych w przypadku każdego typu. Najbardziej charakterystyczne dla danego typu opcje są opcjonalne, z wyjątkiem listy possibleValues w enumPropertyOptions Dodatkowo opcja orderedRanking umożliwia: wartości rankingu względem siebie. ten fragment kodu pokazuje właściwość movieTitle z parametrem textPropertyOptions i ustawiaj typ danych oraz korzystaj z odpowiedniej opcji typu 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 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 związanych z konkretnym typem, każdy typ ma zestaw operatorOptions Te opcje opisują sposób wykorzystania usługi jako operator wyszukiwania. Ten fragment kodu pokazuje usługę movieTitle z textPropertyOptions ustawia typ danych, a retrievalImportance i operatorOptions.

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

Każdy element typu operatorOptions ma element operatorName, np. title dla movieTitle Nazwa operatora to operator wyszukiwania danej usługi. O operator wyszukiwania to rzeczywisty parametr, którego mają używać użytkownicy podczas zawężania wyszukiwania. Na przykład do wyszukiwania filmów według tytułu, użytkownik wpisze title:movieName, gdzie movieName to tytuł filmu.

Nazwy operatorów nie muszą być takie same jak nazwa właściwości. Zamiast tego: używaj nazw operatorów, które odzwierciedlają najczęściej używane słowa przez użytkowników w Twojej organizacji. Jeśli na przykład użytkownicy wolą termin „name” zamiast „tytuł” dla tytułu filmu, nazwą operatora powinna być ustaw wartość „name”.

Tej samej nazwy operatora możesz używać w wielu usługach, o ile wszystkie właściwości są tego samego typu. Jeśli używasz współdzielonej nazwy operatora w trakcie zapytania, pobierane są wszystkie właściwości korzystające z tej nazwy operatora. Przykład: załóżmy, że obiekt filmu zawiera obiekty plotSummary i plotSynopsis usług, a każda z nich miała operatorName o wartości plot. Jako o ile obie te właściwości są tekstowe (textPropertyOptions), pojedynczy element za pomocą operatora wyszukiwania plot pobiera je oba.

Oprócz pola operatorName właściwości, które można sortować, mogą mieć lessThanOperatorName i greaterThanOperatorName pola w operatorOptions. Użytkownicy mogą używać tych opcji do tworzenia zapytań na podstawie porównań przesłana wartość.

I wreszcie, textOperatorOptions ma pole exactMatchWithOperator w operatorOptions Jeśli ustaw exactMatchWithOperator na true, ciąg zapytania musi pasują do całej wartości właściwości, a nie tylko w tekście. W wyszukiwaniach z operatorami wartość tekstowa jest traktowana jako jedna wartość atomowa, dopasowania aspektów.

Rozważ na przykład indeksowanie obiektów książki lub filmu z właściwościami gatunku. Gatunki mogą obejmować „Nauka”, „Nauka” i „Fikcja”. Na Pole exactMatchWithOperator ustawiono na wartość false lub zostało pominięte, szukając gatunku lub wybierając „Nauka” lub „Fiction” aspektu także Zwrócone wyniki dla hasła „science fiction” tokenizowany jest tekst, a tag „Nauka” i „Fiction” że istnieją tokeny w kategorii „science-fiction”. Gdy exactMatchWithOperator to true, tekst jest traktowany jako pojedynczy token, więc żaden z nich „Nauka” ani „Fiction” pasuje do „science-fiction”.

(Opcjonalnie) Dodaj sekcję displayOptions

Na końcu dowolnego dokumentu znajduje się opcjonalna sekcja displayOptions propertyDefinition. Ta sekcja zawiera 1 ciąg displayLabel. displayLabel to zalecana, przyjazna dla użytkownika etykieta tekstowa dla usługi. Jeśli usługa jest skonfigurowana do wyświetlania za pomocą ObjectDisplayOptions, jest wyświetlana przed usługą. Jeśli usługa jest skonfigurowana dla sieci reklamowej, a zasada displayLabel nie jest zdefiniowana, zostanie użyta tylko wartość właściwości wyświetlenie.

Ten fragment kodu pokazuje właściwość movieTitle z parametrem displayLabel z wartością „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 obiekt 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[]

Jest też opcjonalny suggestionFilteringOperators[] na końcu dowolnej sekcji propertyDefinition. Z tej sekcji dowiesz się, zdefiniować właściwość służącą do filtrowania sugestii autouzupełniania. Na przykład: może zdefiniować operator genre, aby filtrować sugestie na podstawie zapytania użytkownika preferowany gatunek filmowy. Następnie, gdy użytkownik wpisuje zapytanie, wyświetlają się tylko te W ramach autouzupełniania wyświetlane są filmy pasujące do ich preferowanego gatunku. sugestie.

Rejestrowanie schematu

Aby uporządkowane dane były zwracane z zapytań w Cloud Search, musisz zarejestrować swojego schematu za pomocą usługi schematów Cloud Search. Rejestracja schematu wymaga identyfikator źródła danych uzyskany podczas Krok Zainicjuj źródło danych.

Korzystając z identyfikatora źródła danych, wyślij UpdateSchema o zarejestrowanie schematu.

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

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

Treść żądania powinna zawierać:

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

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

Indeksowanie danych

Po zarejestrowaniu schematu wypełnij źródło danych za pomocą Indeks połączeń. Indeksowanie odbywa się zwykle w oprogramowaniu sprzęgającym treści.

Żądanie indeksowania pojedynczego filmu do interfejsu API REST przy użyciu schematu Movie 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ę, jak wartość movie w polu objectType jest zgodna z wartością obiektu nazwy definicji w schemacie. Dzięki dopasowaniu tych 2 wartości Cloud Search wie, obiektu schematu, który ma być używany podczas indeksowania.

Zwróć też uwagę na sposób, w jaki indeksowanie właściwości schematu releaseDate używa właściwości podrzędnych year, month i day, które dziedziczy, ponieważ jest zdefiniowane jako typ danych date, używając do tego celu datePropertyOptions. Jednak ze względu na to, że obiekty year, month i day nie są zdefiniowane w schemacie, nie może przesłać zapytania o jedną z tych usług (np. year).

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

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 schematu lub właściwości, która nie została i zarejestrowano w usłudze schematu. Ten problem powoduje, że właściwość lub obiekt do zignorowania.

  • Twoja prośba o zindeksowanie zawiera właściwość o wartości typu innej niż typ zarejestrowanych w schemacie. Ten problem powoduje, że Cloud Search zwraca błąd podczas indeksowania.

Testowanie schematu za pomocą kilku typów zapytań

Zanim zarejestrujesz schemat do dużego repozytorium danych produkcyjnych, warto przeprowadzić testy przy użyciu mniejszego repozytorium danych testowych. Testowanie za pomocą mniejsze repozytorium testowe umożliwia szybkie wprowadzanie poprawek do schematu, i usunięcie zindeksowanych danych bez wpływu na lub istniejącego indeksu produkcyjnego. W przypadku repozytorium danych testowych utwórz lista kontroli dostępu (ACL), 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 artykułem Interfejs wyszukiwania

Ta sekcja zawiera kilka różnych przykładowych zapytań, których możesz użyć schemat filmu.

Testowanie za pomocą zapytania ogólnego

Zapytanie ogólne zwraca wszystkie elementy w źródle danych zawierające określony ciągu znaków. Korzystając z interfejsu wyszukiwania, możesz uruchomić ogólne zapytanie dotyczące filmu źródła danych, wpisując słowo "titanic" i naciskając Return. Wszystkie filmy ze słowem „titanic” powinny być zwracane w wynikach wyszukiwania.

Testowanie z użyciem operatora

Dodanie operatora do zapytania ogranicza wyniki do pasujących elementów . Możesz na przykład użyć operatora actor, by znaleźć wszystkich filmów z konkretnym aktorem. Za pomocą interfejsu wyszukiwania możesz: tego operatora, wpisując w parze operator=wartość, np. &quot;actor:Zane&quot; i naciśnij &quot;actor:Zane&quot;. Wszystkie filmy, w których Zane występuje jako aktor powinny być zwracane w wynikach wyszukiwania.

Dostrój schemat

Po użyciu schematu i danych kontynuuj monitorowanie, co działa i nie działa dla użytkowników. Rozważ dostosowanie schematu w tych sytuacjach:

  • Zindeksowanie pola, które nie było wcześniej indeksowane. Na przykład: często wyszukujesz filmy według nazwiska reżysera, więc być może dostosować schemat, tak aby obsługiwał nazwę dyrektora jako operatora.
  • zmienianie nazw operatorów wyszukiwania na podstawie opinii użytkowników, Nazwy operatorów to: z myślą o prostym w obsłudze. Jeśli użytkownicy stale „pamiętają” źle możesz ją zmienić.

Ponowne indeksowanie po zmianie schematu

Zmiana dowolnej z poniższych wartości w schemacie nie wymaga: do ponownego zindeksowania danych. Możesz po prostu przesłać nowe UpdateSchema , a indeks będzie nadal działać:

  • Nazwy operatorów.
  • Minimalna i maksymalna liczba całkowita.
  • Ranking uporządkowany według liczb całkowitych i wyliczeniowych.
  • Opcje aktualności.
  • Opcje wyświetlania.

W przypadku tych zmian wcześniej zindeksowane dane będą nadal działać zgodnie z zarejestrowanym wcześniej schematem. Musisz jednak ponownie zindeksować wpisy, aby zobaczyć zmiany na podstawie zaktualizowanego schematu, jeśli zawiera on te zmiany:

  • dodanie lub usunięcie nowej właściwości bądź obiektu,
  • Zmieniam: isReturnable, isFacetable lub isSortable z: false na true.

Ustaw isFacetable lub isSortable na true tylko wtedy, gdy masz i jasny przypadek użycia.

Gdy zaktualizujesz schemat, oznaczając właściwość isSuggestable, musisz ponownie zindeksować dane, co opóźnia korzystanie z autouzupełniania tej usługi.

Niedozwolone zmiany właściwości

Niektóre zmiany schematu są niedozwolone nawet po ponownym zindeksowaniu danych, ponieważ spowoduje złamanie indeksu lub uzyskanie niespójnych bądź niespójnych wyników wyszukiwania. Te uwzględnij zmiany w:

  • Typ danych usługi.
  • Nazwa usługi.
  • exactMatchWithOperator – ustawienie.
  • retrievalImportance – ustawienie.

Można jednak obejść to ograniczenie.

Wprowadzanie złożonej zmiany schematu

Aby uniknąć zmian, które mogłyby spowodować nieprawidłowe wyniki wyszukiwania lub nieprawidłowe wyszukiwanie Cloud Search blokuje pewne rodzaje zmian UpdateSchema żądań po zindeksowaniu repozytorium. Na przykład typ danych lub nazwy właściwości nie mogą być zmienione po jej ustawieniu. Te zmiany nie można osiągnąć za pomocą prostego UpdateSchema nawet po ponownym zindeksowaniu danych.

W sytuacjach, gdy konieczne będzie wprowadzenie niedozwolonej zmiany w często możesz wprowadzać serię dozwolonych zmian, aby osiągnąć ten sam efektu. Ogólnie polega na tym, że najpierw trzeba przenieść zindeksowane usługi. ze starszej definicji obiektu na nowszą, a następnie wysyłając prośby o zindeksowanie, która używa tylko nowszej usługi.

Poniżej znajdziesz instrukcje, jak zmienić typ danych lub nazwę usługi:

  1. Dodaj nową właściwość do definicji obiektu w schemacie. Użyj innego z usługi, którą chcesz zmienić.
  2. Wyślij UpdateSchema z nową definicją. Pamiętaj o wysłaniu całego schematu, w tym zarówno nową, jak i starą usługę.
  3. Utwórz kopię zapasową indeksu z repozytorium danych. Aby uzupełnić indeks, wyślij wszystkie próśb o zindeksowanie za pomocą nowej usługi, ale nie starą usługę, ponieważ dopasowania zapytania byłyby liczone podwójnie.

    1. Podczas uzupełniania indeksowania sprawdź, czy jest nowa właściwość i aby uniknąć niespójności w działaniu usługi.
    2. Po zakończeniu uzupełniania wykonaj zapytania testowe, aby sprawdzić poprawność.
  4. Usuń starą usługę. Wyślij kolejne UpdateSchema żądanie bez starej nazwy usługi i przestań używać starej, w kolejnych prośbach o zindeksowanie.

  5. Przenieś wszystkie wykorzystanie starej usługi do nowej. Na przykład, jeśli jeśli zmienisz nazwę właściwości z twórcy na autora, musisz zaktualizować zapytanie do użycia autora w miejscu, w którym wcześniej się odwoływał do twórcy.

Cloud Search przechowuje rejestr wszystkich usuniętych usług lub obiektów przez 30 dni aby zapewnić ochronę przed ponownym użyciem, które mogłoby spowodować nieoczekiwane wyniki indeksowania. W ciągu tych 30 dni musisz przestać korzystać z usuniętych obiektu lub właściwości, w tym także pomijać je w przyszłych żądaniach indeksowania. Dzięki temu, jeśli w przyszłości zdecydujesz się na przywrócenie danej nieruchomości lub obiektu, możesz to zrobić w sposób zachowujący poprawność 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 obiektów.
  • Maksymalna głębokość hierarchii uporządkowanych danych to 10 poziomów.
  • łączna liczba pól w obiekcie jest ograniczona do 1000, która obejmuje liczbę pól podstawowych plus sumę liczby w każdym zagnieżdżonym obiekcie.

Dalsze kroki

Oto kilka kolejnych kroków, które możesz podjąć:

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

  2. Dostrój schemat, aby poprawić jakość wyszukiwania.

  3. Ustal strukturę schematu w celu uzyskania optymalnej interpretacji zapytań.

  4. Dowiedz się, jak wykorzystać Schemat _dictionaryEntry do zdefiniowania synonimy haseł powszechnie używanych w firmie. Aby użyć funkcji _dictionaryEntry schemat, patrz Zdefiniuj synonimy.

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