Tworzenie łącznika treści

Wtyczka treści to program, który przeszukuje dane w repozytorium przedsiębiorstwa i wypełnia źródło danych. Google udostępnia te opcje tworzenia oprogramowania sprzęgającego treści:

Typowy łącznik treści wykonuje te zadania:

  1. Odczytuje i przetwarza parametry konfiguracji.
  2. Pobiera z repozytorium innej firmy oddzielne fragmenty danych, które można indeksować, zwane „elementami”.
  3. Łączy listy kontroli dostępu, metadane i dane treści w indeksowane elementy.
  4. Indeksuje elementy w źródle danych Cloud Search.
  5. (Opcjonalnie) Nasłuchuje powiadomień o zmianach w repozytorium. Powiadomienia o zmianach są przekształcane w prośby o indeksowanie, aby zachować synchronizację źródła danych Cloud Search. Oprogramowanie sprzęgające wykonuje to zadanie tylko wtedy, gdy repozytorium obsługuje wykrywanie zmian.

Tworzenie oprogramowania sprzęgającego treści za pomocą pakietu SDK Content Connector

W sekcjach poniżej znajdziesz informacje o tym, jak utworzyć oprogramowanie sprzęgające treści za pomocą pakietu SDK oprogramowania sprzęgającego treści.

Konfigurowanie zależności

Uwzględnij te zależności w pliku kompilacji.

Maven

xml <dependency> <groupId>com.google.enterprise.cloudsearch</groupId> <artifactId>google-cloudsearch-indexing-connector-sdk</artifactId> <version>v1-0.0.3</version> </dependency>

Gradle

groovy compile group: 'com.google.enterprise.cloudsearch', name: 'google-cloudsearch-indexing-connector-sdk', version: 'v1-0.0.3'

Tworzenie konfiguracji oprogramowania sprzęgającego

Każde oprogramowanie sprzęgające używa pliku konfiguracji do określania parametrów, takich jak identyfikator repozytorium. Zdefiniuj parametry jako pary klucz-wartość, np. api.sourceId=1234567890abcdef.

Pakiet Google Cloud Search SDK zawiera parametry dostarczone przez Google dla wszystkich łączników. W pliku konfiguracyjnym musisz zadeklarować te elementy:

  • Łącznik treści: zadeklaruj api.sourceId i api.serviceAccountPrivateKeyFile. Określają one Twoje repozytorium i klucz prywatny potrzebny do uzyskania dostępu.
  • Łącznik tożsamości: zadeklaruj api.identitySourceId, aby zidentyfikować zewnętrzne źródło tożsamości. W przypadku synchronizacji użytkowników zadeklaruj też api.customerId (unikalny identyfikator konta Google Workspace).

Deklaruj inne parametry dostarczane przez Google tylko wtedy, gdy chcesz zastąpić ich wartości domyślne. Szczegółowe informacje o generowaniu identyfikatorów i kluczy znajdziesz w sekcji Parametry dostarczane przez Google.

W pliku konfiguracyjnym możesz też zdefiniować parametry specyficzne dla repozytorium.

Przekazywanie pliku konfiguracji do oprogramowania sprzęgającego

Ustaw właściwość systemową config, aby przekazać plik konfiguracji. Podczas uruchamiania oprogramowania sprzęgającego użyj argumentu -D. Na przykład:

java -classpath myconnector.jar -Dconfig=MyConfig.properties MyConnector

Jeśli pominiesz ten argument, pakiet SDK spróbuje użyć pliku o nazwie connector-config.properties w katalogu lokalnym.

Określ strategię przechodzenia

Główną funkcją łącznika treści jest przeszukiwanie repozytorium i indeksowanie jego danych. Musisz wdrożyć strategię opartą na rozmiarze i układzie repozytorium. Możesz zaprojektować własną strategię lub wybrać jedną z dostępnych w pakiecie SDK:

Strategia pełnego przechodzenia
Skanuje całe repozytorium i indeksuje każdy element. Ta strategia jest najlepsza w przypadku małych repozytoriów, w których możesz sobie pozwolić na pełne przeszukiwanie podczas każdego indeksowania. Używaj go w przypadku małych repozytoriów zawierających głównie statyczne, niehierarchiczne dane lub gdy wykrywanie zmian jest trudne.
Strategia przechodzenia listy
Skanuje całe repozytorium, aby określić stan każdego elementu, a następnie indeksuje tylko nowe lub zaktualizowane elementy. Używaj tej metody do przyrostowych aktualizacji dużego, niehierarchicznego indeksu, gdy wykrywanie zmian nie jest obsługiwane.
Przeszukiwanie grafu
Skanuje węzeł nadrzędny, aby określić stan jego elementów, a następnie indeksuje nowe lub zaktualizowane elementy w tym węźle. Następnie rekursywnie przetwarza węzły podrzędne. Użyj tej opcji w przypadku repozytoriów hierarchicznych, w których wyświetlanie wszystkich identyfikatorów nie jest praktyczne, np. w przypadku struktur katalogów lub witryn.

Pakiet SDK implementuje te strategie w klasach szablonów oprogramowania sprzęgającego. Te szablony mogą przyspieszyć proces tworzenia. Aby użyć szablonu, zapoznaj się z odpowiednią sekcją:

Tworzenie łącznika pełnego przechodzenia za pomocą klasy szablonu

Ta sekcja odnosi się do kodu z FullTraversalSample.

Wdrażanie punktu wejścia oprogramowania sprzęgającego

Punkt wejścia to metoda main(). Tworzy instancję Application i wywołuje start(), aby uruchomić oprogramowanie sprzęgające.

Przed wywołaniem funkcji application.start() użyj klasy IndexingApplication.Builder do utworzenia instancji szablonu FullTraversalConnector. Ten szablon akceptuje obiekt Repository.

FullTraversalSample.java
/**
 * This sample connector uses the Cloud Search SDK template class for a full
 * traversal connector.
 *
 * @param args program command line arguments
 * @throws InterruptedException thrown if an abort is issued during initialization
 */
public static void main(String[] args) throws InterruptedException {
  Repository repository = new SampleRepository();
  IndexingConnector connector = new FullTraversalConnector(repository);
  IndexingApplication application = new IndexingApplication.Builder(connector, args).build();
  application.start();
}

Pakiet SDK wywołuje funkcję initConfig() po wywołaniu metody main()Application.build(). Metoda initConfig():

  1. Sprawdza, czy element Configuration nie został jeszcze zainicjowany.
  2. Inicjuje obiekt Configuration za pomocą par klucz-wartość dostarczonych przez Google.

Implementowanie interfejsu Repository

Obiekt Repository przechodzi i indeksuje elementy repozytorium. Jeśli używasz szablonu, musisz zastąpić tylko niektóre metody w interfejsie Repository. W przypadku FullTraversalConnector zastąp:

  • init(): do konfiguracji i inicjowania repozytorium.
  • getAllDocs(): aby przechodzić i indeksować wszystkie elementy. Jest wywoływana raz dla każdego zaplanowanego przejścia.
  • (Opcjonalnie) getChanges(): jeśli repozytorium obsługuje wykrywanie zmian, zastąp tę wartość, aby pobrać i zindeksować zmodyfikowane elementy.
  • (Opcjonalnie) close(): do czyszczenia repozytorium podczas zamykania.

Każda metoda zwraca obiekt ApiOperation, który indeksuje za pomocą IndexingService.indexItem().

Pobieranie parametrów konfiguracji niestandardowej

Aby zarządzać konfiguracją konektora, musisz pobrać wszystkie parametry niestandardowe z obiektu Configuration. Wykonaj to zadanie w metodzie init() klasy Repository.

Klasa Configuration zawiera metody pobierania różnych typów danych. Każda metoda zwraca obiekt ConfigValue. Aby pobrać wartość, użyj metody ConfigValue obiektu get(). Ten fragment kodu z FullTraversalSample pokazuje, jak pobrać niestandardową wartość całkowitą:

FullTraversalSample.java
@Override
public void init(RepositoryContext context) {
  log.info("Initializing repository");
  numberOfDocuments = Configuration.getInteger("sample.documentCount", 10).get();
}

Aby pobrać i przeanalizować parametry z wieloma wartościami, użyj jednego z analizatorów typów klasy Configuration. Ten fragment z samouczka dotyczącego łącznika używa getMultiValue do pobrania listy nazw repozytoriów GitHub:

GithubRepository.java
ConfigValue<List<String>> repos = Configuration.getMultiValue(
    "github.repos",
    Collections.emptyList(),
    Configuration.STRING_PARSER);

Przeprowadź pełne przeszukiwanie

Zastąp wartość getAllDocs(), aby przeprowadzić pełne przejście. Ta metoda akceptuje punkt kontrolny, aby wznowić indeksowanie w przypadku przerwania. W przypadku każdego elementu:

  1. Ustaw uprawnienia.
  2. Ustaw metadane.
  3. Połącz je w RepositoryDoc.
  4. Zapakuj każdy element do iteratora zwróconego przez getAllDocs().

Jeśli zestaw produktów jest za duży, aby można go było pobrać w ramach jednego wywołania, użyj punktu kontrolnego i wywołaj funkcję hasMore(true).

Ustawianie uprawnień do elementu

Repozytoria używają list kontroli dostępu (ACL), aby identyfikować użytkowników lub grupy, które mają dostęp do elementu. Lista ACL zawiera identyfikatory autoryzowanych użytkowników lub grup.

Aby użytkownicy widzieli tylko te wyniki wyszukiwania, do których mają dostęp, musisz odtworzyć listy ACL repozytorium. Podczas indeksowania elementu uwzględnij listę ACL, aby Google Cloud Search mógł zapewnić odpowiedni poziom dostępu.

Pakiet SDK łącznika treści zawiera klasy i metody modelowania list ACL większości repozytoriów. Analizowanie list ACL repozytorium i tworzenie odpowiednich list ACL dla Cloud Search podczas indeksowania. Modelowanie złożonych list ACL, takich jak te, które korzystają z dziedziczenia, wymaga starannego planowania. Więcej informacji znajdziesz w artykule Listy kontroli dostępu w Cloud Search.

Użyj klasy Acl.Builder , aby ustawić dostęp. Ten fragment pełnego przykładu przechodzenia umożliwia wszystkim użytkownikom domeny (getCustomerPrincipal()) odczytywanie wszystkich elementów (setReaders()):

FullTraversalSample.java
// Make the document publicly readable within the domain
Acl acl = new Acl.Builder()
    .setReaders(Collections.singletonList(Acl.getCustomerPrincipal()))
    .build();

Prawidłowe modelowanie list kontroli dostępu do repozytorium, zwłaszcza tych, które korzystają z modeli dziedziczenia, wymaga informacji zawartych w sekcji Listy kontroli dostępu w Cloud Search.

Ustawianie metadanych elementu

Metadane są przechowywane w obiekcie Item. Aby utworzyć Item, potrzebujesz unikalnego identyfikatora, typu elementu, listy kontroli dostępu, adresu URL i wersji. Użyj klasy pomocniczej IndexingItemBuilder.

FullTraversalSample.java
// Url is required. Use google.com as a placeholder for this sample.
String viewUrl = "https://www.google.com";

// Version is required, set to current timestamp.
byte[] version = Longs.toByteArray(System.currentTimeMillis());

// Using the SDK item builder class to create the document with appropriate attributes
// (this can be expanded to include metadata fields etc.)
Item item = IndexingItemBuilder.fromConfiguration(Integer.toString(id))
    .setItemType(IndexingItemBuilder.ItemType.CONTENT_ITEM)
    .setAcl(acl)
    .setSourceRepositoryUrl(IndexingItemBuilder.FieldOrValue.withValue(viewUrl))
    .setVersion(version)
    .build();
Tworzenie elementu, który można indeksować

Użyj klasy RepositoryDoc.Builder.

FullTraversalSample.java
// For this sample, content is just plain text
String content = String.format("Hello world from sample doc %d", id);
ByteArrayContent byteContent = ByteArrayContent.fromString("text/plain", content);

// Create the fully formed document
RepositoryDoc doc = new RepositoryDoc.Builder()
    .setItem(item)
    .setContent(byteContent, IndexingService.ContentFormat.TEXT)
    .build();

RepositoryDoc to ApiOperation, który wykonuje żądanie IndexingService.indexItem().

Użyj metody setRequestMode() klasy RepositoryDoc.Builder, aby ustawić żądanie indeksowania na ASYNCHRONOUS lub SYNCHRONOUS:

ASYNCHRONOUS
Ten tryb ma dłuższe opóźnienie od indeksowania do wyświetlania, ale zapewnia większy limit przepustowości. Używaj trybu asynchronicznego do początkowego indeksowania (wypełniania wstecznego) całego repozytorium.
SYNCHRONOUS
Ten tryb ma mniejsze opóźnienie od indeksowania do wyświetlania, ale mniejszy limit przepustowości. Używaj trybu synchronicznego do indeksowania aktualizacji i zmian w repozytorium. Jeśli nie zostanie określony, domyślny tryb żądania to SYNCHRONOUS.
Zapakuj każdy indeksowany element w iterator

Metoda getAllDocs() zwraca CheckpointCloseableIterable obiektów RepositoryDoc. Użyj klasy CheckpointCloseableIterableImpl.Builder.

FullTraversalSample.java
CheckpointCloseableIterable<ApiOperation> iterator =
  new CheckpointCloseableIterableImpl.Builder<>(allDocs).build();

Dalsze kroki

Tworzenie łącznika przechodzenia po liście za pomocą klasy szablonu

Kolejka indeksowania w Cloud Search zawiera identyfikatory i opcjonalne hasze elementów repozytorium. Oprogramowanie sprzęgające przechodzące po liście umieszcza identyfikatory w tej kolejce i pobiera je do indeksowania. Cloud Search utrzymuje te kolejki, aby określać stan elementów, np. usunięć. Zobacz Kolejkę indeksowania Cloud Search.

Ta sekcja odnosi się do ListTraversalSample.

Wdrażanie punktu wejścia oprogramowania sprzęgającego

Metoda main() tworzy instancję Application i wywołuje start(). Użyj IndexingApplication.Builder, aby utworzyć instancję szablonu ListingConnector.

ListTraversalSample.java
/**
 * This sample connector uses the Cloud Search SDK template class for a
 * list traversal connector.
 *
 * @param args program command line arguments
 * @throws InterruptedException thrown if an abort is issued during initialization
 */
public static void main(String[] args) throws InterruptedException {
  Repository repository = new SampleRepository();
  IndexingConnector connector = new ListingConnector(repository);
  IndexingApplication application = new IndexingApplication.Builder(connector, args).build();
  application.start();
}

Implementowanie interfejsu Repository

Zastąp te metody dla ListingConnector:

  • init(): do konfiguracji repozytorium.
  • getIds(): Aby pobrać identyfikatory i wartości hash wszystkich rekordów.
  • getDoc(): dodawanie, aktualizowanie lub usuwanie elementów z indeksu.
  • (Opcjonalnie) getChanges(): w przypadku aktualizacji przyrostowych z wykorzystaniem wykrywania zmian.
  • (Opcjonalnie) close(): do czyszczenia repozytorium.

Przejdź przez listę

Zastąp getIds(), aby pobrać identyfikatory i wartości hash. Zastąp getDoc(), aby obsługiwać każdy element w kolejce indeksowania Cloud Search.

Przesyłanie identyfikatorów produktów i wartości skrótu

Zastąp getIds(), aby pobrać identyfikatory i hasze treści. Spakuj je w PushItems prośbę do kolejki indeksowania.

ListTraversalSample.java
PushItems.Builder allIds = new PushItems.Builder();
for (Map.Entry<Integer, Long> entry : this.documents.entrySet()) {
  String documentId = Integer.toString(entry.getKey());
  String hash = this.calculateMetadataHash(entry.getKey());
  PushItem item = new PushItem().setMetadataHash(hash);
  log.info("Pushing " + documentId);
  allIds.addPushItem(documentId, item);
}

Użyj znaku PushItems.Builder, aby spakować identyfikatory i wartości hash.

ListTraversalSample.java
ApiOperation pushOperation = allIds.build();
CheckpointCloseableIterable<ApiOperation> iterator =
  new CheckpointCloseableIterableImpl.Builder<>(
      Collections.singletonList(pushOperation))
  .build();
return iterator;
Pobieranie i obsługa każdego elementu

Zastąp getDoc(), aby obsługiwać elementy w kolejce indeksowania. Elementy mogą być nowe, zmodyfikowane, niezmienione lub usunięte.

  1. Sprawdź, czy identyfikator produktu znajduje się w repozytorium. W przeciwnym razie usuń go.
  2. Sprawdź stan indeksu. Jeśli nie zmieniono (ACCEPTED), nie rób nic.
  3. Indeksowanie zmienionych lub nowych elementów: ustawianie uprawnień, ustawianie metadanych, łączenie w RepositoryDoc i zwracanie.
Obsługa usuniętych elementów

Ten fragment kodu pokazuje, jak sprawdzić, czy element istnieje, i jak go usunąć, jeśli nie istnieje.

ListTraversalSample.java
String resourceName = item.getName();
int documentId = Integer.parseInt(resourceName);

if (!documents.containsKey(documentId)) {
  // Document no longer exists -- delete it
  log.info(() -> String.format("Deleting document %s", item.getName()));
  return ApiOperations.deleteItem(resourceName);
}
Obsługa niezmienionych elementów

Sprawdzaj kolejkę indeksowania, aby obsługiwać niezmienione elementy.

ListTraversalSample.java
String currentHash = this.calculateMetadataHash(documentId);
if (this.canSkipIndexing(item, currentHash)) {
  // Document neither modified nor deleted, ack the push
  log.info(() -> String.format("Document %s not modified", item.getName()));
  PushItem pushItem = new PushItem().setType("NOT_MODIFIED");
  return new PushItems.Builder().addPushItem(resourceName, pushItem).build();
}

W przykładzie do wykrywania zmian używany jest hash.

ListTraversalSample.java
/**
 * Checks to see if an item is already up to date
 *
 * @param previousItem Polled item
 * @param currentHash  Metadata hash of the current github object
 * @return PushItem operation
 */
private boolean canSkipIndexing(Item previousItem, String currentHash) {
  if (previousItem.getStatus() == null || previousItem.getMetadata() == null) {
    return false;
  }
  String status = previousItem.getStatus().getCode();
  String previousHash = previousItem.getMetadata().getHash();
  return "ACCEPTED".equals(status)
      && previousHash != null
      && previousHash.equals(currentHash);
}
Ustawianie uprawnień do elementu

Repozytoria używają list kontroli dostępu (ACL), aby identyfikować użytkowników lub grupy, które mają dostęp do elementu. Lista ACL zawiera identyfikatory autoryzowanych użytkowników lub grup.

Aby użytkownicy widzieli tylko te wyniki wyszukiwania, do których mają dostęp, musisz odtworzyć listy ACL repozytorium. Podczas indeksowania elementu uwzględnij listę ACL, aby Google Cloud Search mógł zapewnić odpowiedni poziom dostępu.

Pakiet SDK łącznika treści zawiera klasy i metody modelowania list ACL większości repozytoriów. Analizowanie list ACL repozytorium i tworzenie odpowiednich list ACL dla Cloud Search podczas indeksowania. Modelowanie złożonych list ACL, takich jak te, które korzystają z dziedziczenia, wymaga starannego planowania. Więcej informacji znajdziesz w artykule Listy kontroli dostępu w Cloud Search.

Użyj klasy Acl.Builder , aby ustawić dostęp. Ten fragment pełnego przykładu przechodzenia umożliwia wszystkim użytkownikom domeny (getCustomerPrincipal()) odczytywanie wszystkich elementów (setReaders()):

FullTraversalSample.java
// Make the document publicly readable within the domain
Acl acl = new Acl.Builder()
    .setReaders(Collections.singletonList(Acl.getCustomerPrincipal()))
    .build();

Prawidłowe modelowanie list kontroli dostępu do repozytorium, zwłaszcza tych, które korzystają z modeli dziedziczenia, wymaga informacji zawartych w sekcji Listy kontroli dostępu w Cloud Search.

Ustawianie metadanych elementu
ListTraversalSample.java
// Url is required. Use google.com as a placeholder for this sample.
String viewUrl = "https://www.google.com";

// Version is required, set to current timestamp.
byte[] version = Longs.toByteArray(System.currentTimeMillis());

// Set metadata hash so queue can detect changes
String metadataHash = this.calculateMetadataHash(documentId);

// Using the SDK item builder class to create the document with
// appropriate attributes. This can be expanded to include metadata
// fields etc.
Item item = IndexingItemBuilder.fromConfiguration(Integer.toString(documentId))
    .setItemType(IndexingItemBuilder.ItemType.CONTENT_ITEM)
    .setAcl(acl)
    .setSourceRepositoryUrl(IndexingItemBuilder.FieldOrValue.withValue(viewUrl))
    .setVersion(version)
    .setHash(metadataHash)
    .build();
Tworzenie elementu, który można indeksować
ListTraversalSample.java
// For this sample, content is just plain text
String content = String.format("Hello world from sample doc %d", documentId);
ByteArrayContent byteContent = ByteArrayContent.fromString("text/plain", content);

// Create the fully formed document
RepositoryDoc doc = new RepositoryDoc.Builder()
    .setItem(item)
    .setContent(byteContent, IndexingService.ContentFormat.TEXT)
    .build();

Użyj metody setRequestMode() klasy RepositoryDoc.Builder, aby ustawić żądanie indeksowania na ASYNCHRONOUS lub SYNCHRONOUS:

ASYNCHRONOUS
Ten tryb ma dłuższe opóźnienie od indeksowania do wyświetlania, ale zapewnia większy limit przepustowości. Używaj trybu asynchronicznego do początkowego indeksowania (wypełniania wstecznego) całego repozytorium.
SYNCHRONOUS
Ten tryb ma mniejsze opóźnienie od indeksowania do wyświetlania, ale mniejszy limit przepustowości. Używaj trybu synchronicznego do indeksowania aktualizacji i zmian w repozytorium. Jeśli nie zostanie określony, domyślny tryb żądania to SYNCHRONOUS.

Dalsze kroki

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

Tworzenie łącznika przechodzenia po grafie za pomocą klasy szablonu

Kolejka indeksowania Cloud Search zawiera identyfikatory i opcjonalne wartości skrótu każdego elementu w repozytorium. Łącznik przechodzenia po grafie przesyła identyfikatory elementów do kolejki indeksowania Google Cloud Search i pobiera je pojedynczo na potrzeby indeksowania. Cloud Search utrzymuje kolejki i porównuje ich zawartość, aby określić stan elementu, np. czy został on usunięty z repozytorium. Więcej informacji o kolejce indeksowania Cloud Search znajdziesz w artykule Kolejka indeksowania Google Cloud Search.

Podczas indeksowania zawartość elementu jest pobierana z repozytorium danych, a wszystkie identyfikatory elementów podrzędnych są umieszczane w kolejce. Oprogramowanie sprzęgające przetwarza rekurencyjnie identyfikatory nadrzędne i podrzędne, dopóki nie zostaną obsłużone wszystkie elementy.

Wdróż punkt wejścia oprogramowania sprzęgającego

Punktem wejścia do łącznika jest metoda main(). Ta metoda tworzy instancję klasy Application i wywołuje jej metodę start(), aby uruchomić oprogramowanie sprzęgające.

Przed wywołaniem funkcji application.start() użyj klasy IndexingApplication.Builder do utworzenia instancji szablonu ListingConnector. Interfejs ListingConnector akceptuje obiekt Repository, którego metody implementujesz.

Implementowanie interfejsu Repository

Zastąp init(), getIds(), getDoc() i opcjonalnie getChanges() lub close().

Wykonaj przeszukiwanie grafu

Zastąp getIds(), aby pobrać początkowe identyfikatory, i getDoc(), aby obsługiwać elementy i przesyłać identyfikatory podrzędne do kolejki.

Przesyłanie identyfikatorów produktów i wartości skrótu
GraphTraversalSample.java
PushItems.Builder allIds = new PushItems.Builder();
PushItem item = new PushItem();
allIds.addPushItem("root", item);
Pobieranie i obsługa każdego elementu
  1. Sprawdź, czy identyfikator znajduje się w repozytorium. Jeśli nie, usuń element.
  2. W przypadku istniejących elementów ustaw uprawnienia i metadane, a następnie połącz je w RepositoryDoc.
  3. Przekaż identyfikatory elementów podrzędnych do kolejki indeksowania.
  4. Zwróć RepositoryDoc.
Obsługa usuniętych elementów
GraphTraversalSample.java
String resourceName = item.getName();
if (documentExists(resourceName)) {
  return buildDocumentAndChildren(resourceName);
}
// Document doesn't exist, delete it
log.info(() -> String.format("Deleting document %s", resourceName));
return ApiOperations.deleteItem(resourceName);
Ustawianie metadanych i tworzenie elementu
GraphTraversalSample.java
// Url is required. Use google.com as a placeholder for this sample.
String viewUrl = "https://www.google.com";

// Version is required, set to current timestamp.
byte[] version = Longs.toByteArray(System.currentTimeMillis());

// Using the SDK item builder class to create the document with
// appropriate attributes. This can be expanded to include metadata
// fields etc.
Item item = IndexingItemBuilder.fromConfiguration(documentId)
    .setItemType(IndexingItemBuilder.ItemType.CONTENT_ITEM)
    .setAcl(acl)
    .setSourceRepositoryUrl(IndexingItemBuilder.FieldOrValue.withValue(viewUrl))
    .setVersion(version)
    .build();
GraphTraversalSample.java
// For this sample, content is just plain text
String content = String.format("Hello world from sample doc %s", documentId);
ByteArrayContent byteContent = ByteArrayContent.fromString("text/plain", content);

RepositoryDoc.Builder docBuilder = new RepositoryDoc.Builder()
    .setItem(item)
    .setContent(byteContent, IndexingService.ContentFormat.TEXT);
Umieszczanie identyfikatorów elementów podrzędnych w kolejce indeksowania
GraphTraversalSample.java
// Queue the child nodes to visit after indexing this document
Set<String> childIds = getChildItemNames(documentId);
for (String id : childIds) {
  log.info(() -> String.format("Pushing child node %s", id));
  PushItem pushItem = new PushItem();
  docBuilder.addChildId(id, pushItem);
}

RepositoryDoc doc = docBuilder.build();

Tworzenie oprogramowania sprzęgającego treści za pomocą interfejsu API REST

W sekcjach poniżej znajdziesz informacje o tym, jak utworzyć oprogramowanie sprzęgające treści za pomocą interfejsu API typu REST.

Określ strategię przechodzenia

Strategie (Pełna, Lista i Wykres) są koncepcyjnie takie same jak w przypadku pakietu SDK. Wdróż wybraną strategię za pomocą interfejsu REST API.

Wdrażanie strategii przechodzenia i indeksowanie elementów

Zarejestruj schemat, a następnie wypełnij indeks, używając tego polecenia:

  1. (Opcjonalnie) items.upload w przypadku plików większych niż 100 KiB.
  2. (Opcjonalnie) media.upload w przypadku plików multimedialnych.
  3. items.index aby zindeksować element.

    Przykładowa prośba o zindeksowanie:

    {
      "name": "datasource/<data_source_id>/items/titanic",
      "acl": {
        "readers": [
          {
            "gsuitePrincipal": {
              "gsuiteDomain": true
            }
          }
        ]
      },
      "metadata": {
        "title": "Titanic",
        "viewUrl": "http://www.imdb.com/title/tt2234155/",
        "objectType": "movie"
      },
      "structuredData": {
        "object": {
          "properties": [
            {
              "name": "movieTitle",
              "textValues": { "values": ["Titanic"] }
            }
          ]
        }
      },
      "content": {
        "inlineContent": "A seventeen-year-old aristocrat falls in love...",
        "contentFormat": "TEXT"
      },
      "version": "01",
      "itemType": "CONTENT_ITEM"
    }
    
  4. (Opcjonalnie) Aby sprawdzić indeksowanie, użyj narzędzia items.get.

Obsługa zmian w repozytorium

Okresowo ponownie indeksuj całe repozytorium, aby uzyskać pełne indeksowanie. W przypadku przechodzenia po liście lub grafie używaj kolejki indeksowania Google Cloud, aby śledzić zmiany i indeksować tylko to, co się zmieniło. Użyj items.push, aby dodać elementy do kolejki.