Membuat konektor konten

Konektor konten adalah program software yang menelusuri data dalam repositori perusahaan dan mengisi sumber data. Google menyediakan opsi berikut untuk mengembangkan konektor konten:

  • Content Connector SDK. Ini adalah opsi yang tepat untuk programmer Java. SDK adalah wrapper di sekitar REST API yang memungkinkan Anda membuat konektor dengan cepat. Untuk membuat konektor konten menggunakan SDK, lihat Membuat konektor konten menggunakan Content Connector SDK.

  • Library API atau REST API level rendah. Gunakan opsi ini jika Anda tidak menggunakan Java atau jika codebase Anda lebih mengakomodasi REST API atau library. Untuk membuat konektor konten menggunakan REST API, lihat Membuat konektor konten menggunakan REST API.

Konektor konten standar melakukan tugas-tugas berikut:

  1. Membaca dan memproses parameter konfigurasi.
  2. Menarik potongan data terpisah yang dapat diindeks, yang disebut "item," dari repositori pihak ketiga.
  3. Menggabungkan ACL, metadata, dan data konten ke dalam item yang dapat diindeks.
  4. Mengindeks item ke sumber data Cloud Search.
  5. (Opsional) Mendeteksi pemberitahuan perubahan dari repositori. Pemberitahuan perubahan diubah menjadi permintaan pengindeksan agar sumber data Cloud Search tetap sinkron. Konektor hanya melakukan tugas ini jika repositori mendukung deteksi perubahan.

Buat konektor konten menggunakan Content Connector SDK

Bagian berikut menjelaskan cara membuat konektor konten menggunakan Content Connector SDK.

Menyiapkan dependensi

Sertakan dependensi ini dalam file build Anda.

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'

Buat konfigurasi konektor Anda

Setiap konektor menggunakan file konfigurasi untuk parameter seperti ID repositori Anda. Tentukan parameter sebagai pasangan key-value, seperti api.sourceId=1234567890abcdef.

Google Cloud Search SDK menyertakan parameter yang disediakan Google untuk semua konektor. Anda harus mendeklarasikan hal berikut dalam file konfigurasi:

  • Konektor konten: Nyatakan api.sourceId dan api.serviceAccountPrivateKeyFile. Parameter ini mengidentifikasi repositori Anda dan kunci pribadi yang diperlukan untuk akses.
  • Konektor identitas: Nyatakan api.identitySourceId untuk mengidentifikasi sumber identitas eksternal Anda. Untuk sinkronisasi pengguna, deklarasikan juga api.customerId (ID unik untuk akun Google Workspace Anda).

Deklarasikan parameter lain yang disediakan Google hanya untuk mengganti nilai defaultnya. Untuk mengetahui detail tentang cara membuat ID dan kunci, lihat Parameter yang disediakan Google.

Anda juga dapat menentukan parameter spesifik repositori dalam file konfigurasi.

Teruskan file konfigurasi ke konektor

Tetapkan properti sistem config untuk meneruskan file konfigurasi. Gunakan argumen -D saat memulai konektor. Contoh:

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

Jika Anda menghilangkan argumen ini, SDK akan mencoba menggunakan file bernama connector-config.properties di direktori lokal.

Tentukan strategi traversal Anda

Fungsi utama konektor konten adalah untuk menelusuri repositori dan mengindeks datanya. Anda harus menerapkan strategi berdasarkan ukuran dan tata letak repositori Anda. Anda dapat mendesain strategi Anda sendiri atau memilih strategi dari SDK:

Strategi traversal penuh
Memindai seluruh repositori dan mengindeks setiap item. Strategi ini paling cocok untuk repositori kecil yang dapat menanggung overhead traversal penuh selama setiap pengindeksan. Gunakan untuk repositori kecil dengan data yang sebagian besarnya statis dan tidak hierarkis, atau saat deteksi perubahan sulit dilakukan.
Strategi traversal daftar
Memindai seluruh repositori untuk menentukan status setiap item, lalu mengindeks hanya item baru atau yang diperbarui. Gunakan ini untuk update inkremental ke indeks besar yang tidak hierarkis saat deteksi perubahan tidak didukung.
Traversal grafik
Memindai node induk untuk menentukan status itemnya, lalu mengindeks item baru atau yang diupdate dalam node tersebut. Kemudian, secara rekursif memproses node turunan. Gunakan ini untuk repositori hierarkis yang tidak memungkinkan pembuatan daftar semua ID, seperti struktur direktori atau situs.

SDK menerapkan strategi ini di class konektor template. Template ini dapat mempercepat pengembangan Anda. Untuk menggunakan template, lihat bagian yang sesuai:

Membuat konektor traversal penuh menggunakan class template

Bagian ini mengacu pada kode dari FullTraversalSample.

Menerapkan titik entri konektor

Titik entri adalah metode main(). Tindakan ini akan membuat instance Application dan memanggil start() untuk menjalankan konektor.

Sebelum memanggil application.start(), gunakan class IndexingApplication.Builder untuk membuat instance template FullTraversalConnector. Template ini menerima objek 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();
}

SDK memanggil initConfig() setelah metode main() Anda memanggil Application.build(). Metode initConfig():

  1. Memastikan Configuration belum diinisialisasi.
  2. Menginisialisasi objek Configuration dengan key-value pair yang disediakan Google.

Menerapkan antarmuka Repository

Objek Repository melakukan traversal dan mengindeks item repositori. Saat menggunakan template, Anda hanya perlu mengganti metode tertentu di antarmuka Repository. Untuk FullTraversalConnector, ganti:

  • init(): Untuk penyiapan dan inisialisasi repositori.
  • getAllDocs(): Untuk menjelajahi dan mengindeks semua item. Metode ini dipanggil satu kali untuk setiap traversal terjadwal.
  • (Opsional) getChanges(): Jika repositori Anda mendukung deteksi perubahan, ganti metode ini untuk mengambil dan mengindeks item yang diubah.
  • (Opsional) close(): Untuk pembersihan repositori selama penonaktifan.

Setiap metode menampilkan objek ApiOperation, yang melakukan pengindeksan menggunakan IndexingService.indexItem().

Mendapatkan parameter konfigurasi khusus

Untuk menangani konfigurasi konektor, Anda harus mengambil parameter kustom dari objek Configuration. Lakukan tugas ini dalam metode init() class Repository Anda.

Class Configuration mencakup metode untuk mengambil berbagai jenis data. Setiap metode menampilkan objek ConfigValue. Gunakan metode get() objek ConfigValue untuk mengambil nilai. Cuplikan dari FullTraversalSample ini menunjukkan cara mengambil nilai bilangan bulat kustom:

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

Untuk mengambil dan mengurai parameter dengan beberapa nilai, gunakan salah satu jenis parser class Configuration. Cuplikan dari konektor tutorial ini menggunakan getMultiValue untuk mengambil daftar nama repositori GitHub:

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

Melakukan traversal penuh

Ganti getAllDocs() untuk melakukan traversal penuh. Metode ini menerima checkpoint untuk melanjutkan pengindeksan jika terganggu. Untuk setiap item:

  1. Tetapkan izin.
  2. Menetapkan metadata.
  3. Gabungkan menjadi RepositoryDoc.
  4. Gabungkan setiap item ke dalam iterator yang ditampilkan oleh getAllDocs().

Jika set item terlalu besar untuk satu panggilan, gunakan checkpoint dan panggil hasMore(true).

Menetapkan izin untuk suatu item

Repositori menggunakan Daftar Kontrol Akses (ACL) untuk mengidentifikasi pengguna atau grup yang memiliki akses ke suatu item. ACL mencantumkan ID pengguna atau grup yang diberi otorisasi.

Untuk memastikan pengguna hanya melihat hasil penelusuran yang aksesnya mereka miliki, Anda harus mereplikasi ACL repositori Anda. Sertakan ACL saat mengindeks item sehingga Google Cloud Search dapat memberikan tingkat akses yang benar.

Content Connector SDK menyertakan class dan metode untuk membuat model ACL dari sebagian besar repositori. Menganalisis ACL repositori Anda dan membuat ACL yang sesuai untuk Cloud Search selama pengindeksan. Pemodelan ACL yang kompleks, seperti yang menggunakan pewarisan, memerlukan perencanaan yang cermat. Untuk mengetahui informasi selengkapnya, lihat ACL Cloud Search.

Gunakan class Acl.Builder untuk menyetel akses. Cuplikan dari contoh penelusuran lengkap ini memungkinkan semua pengguna domain (getCustomerPrincipal()) membaca semua item (setReaders()):

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

Membuat model ACL repositori dengan benar, terutama yang menggunakan model pewarisan, memerlukan informasi dalam ACL Cloud Search.

Menetapkan metadata untuk suatu item

Metadata disimpan dalam objek Item. Untuk membuat Item, Anda memerlukan ID, jenis item, ACL, URL, dan versi yang unik. Gunakan class helper 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();
Membuat item yang dapat diindeks

Gunakan class 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 adalah ApiOperation yang melakukan permintaan IndexingService.indexItem().

Gunakan metode setRequestMode() dari class RepositoryDoc.Builder untuk menyetel permintaan pengindeksan ke ASYNCHRONOUS atau SYNCHRONOUS:

ASYNCHRONOUS
Mode ini memiliki latensi pengindeksan hingga penayangan yang lebih lama, tetapi mengakomodasi kuota throughput yang lebih besar. Gunakan mode asinkron untuk pengindeksan awal (pengisian ulang) seluruh repositori.
SYNCHRONOUS
Mode ini memiliki latensi pengindeksan hingga penayangan yang lebih pendek, tetapi kuota throughput yang lebih kecil. Gunakan mode sinkron untuk mengindeks update dan perubahan repositori. Mode permintaan ditetapkan ke SYNCHRONOUS secara default jika tidak ditentukan.
Gabungkan setiap item yang dapat diindeks dalam iterator

Metode getAllDocs() menampilkan CheckpointCloseableIterable objek RepositoryDoc. Gunakan class CheckpointCloseableIterableImpl.Builder.

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

Langkah berikutnya

Membuat konektor traversal daftar menggunakan class template

Cloud Search Indexing Queue menyimpan ID dan hash opsional untuk item repositori. Konektor traversal daftar mendorong ID ke antrean ini dan mengambilnya untuk pengindeksan. Cloud Search mengelola antrean ini untuk menentukan status item, seperti penghapusan. Lihat Cloud Search Indexing Queue.

Bagian ini mengacu pada ListTraversalSample.

Menerapkan titik entri konektor

Metode main() membuat instance Application dan memanggil start(). Gunakan IndexingApplication.Builder untuk membuat instance template 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();
}

Menerapkan antarmuka Repository

Ganti metode berikut untuk ListingConnector:

  • init(): Untuk penyiapan repositori.
  • getIds(): Untuk mengambil ID dan hash semua catatan.
  • getDoc(): Untuk menambahkan, memperbarui, atau menghapus item dari indeks.
  • (Opsional) getChanges(): Untuk update inkremental menggunakan deteksi perubahan.
  • (Opsional) close(): Untuk pembersihan repositori.

Melakukan traversal daftar

Ganti getIds() untuk mengambil ID dan hash. Ganti getDoc() untuk menangani setiap item dalam Cloud Search Indexing Queue.

Mendorong ID item dan nilai hash

Ganti getIds() untuk mengambil ID dan hash konten. Gabungkan ke dalam permintaan PushItems ke Antrean Pengindeksan.

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);
}

Gunakan PushItems.Builder untuk mengemas ID dan hash.

ListTraversalSample.java
ApiOperation pushOperation = allIds.build();
CheckpointCloseableIterable<ApiOperation> iterator =
  new CheckpointCloseableIterableImpl.Builder<>(
      Collections.singletonList(pushOperation))
  .build();
return iterator;
Mengambil dan menangani setiap item

Ganti getDoc() untuk menangani item dalam Indexing Queue. Item dapat berupa baru, dimodifikasi, tidak berubah, atau dihapus.

  1. Periksa apakah ID item ada di repositori. Jika tidak, hapus.
  2. Polling indeks untuk status. Jika tidak berubah (ACCEPTED), jangan lakukan apa pun.
  3. Mengindeks item yang berubah atau baru: tetapkan izin, tetapkan metadata, gabungkan ke dalam RepositoryDoc, dan kembalikan.
Menangani item yang dihapus

Cuplikan ini menunjukkan cara menentukan apakah suatu item ada dan menghapusnya jika tidak ada.

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);
}
Menangani item yang tidak berubah

Polling Antrean Pengindeksan untuk menangani item yang tidak berubah.

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();
}

Contoh ini menggunakan hash untuk mendeteksi perubahan.

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);
}
Menetapkan izin untuk suatu item

Repositori menggunakan Daftar Kontrol Akses (ACL) untuk mengidentifikasi pengguna atau grup yang memiliki akses ke suatu item. ACL mencantumkan ID pengguna atau grup yang diberi otorisasi.

Untuk memastikan pengguna hanya melihat hasil penelusuran yang aksesnya mereka miliki, Anda harus mereplikasi ACL repositori Anda. Sertakan ACL saat mengindeks item sehingga Google Cloud Search dapat memberikan tingkat akses yang benar.

Content Connector SDK menyertakan class dan metode untuk membuat model ACL dari sebagian besar repositori. Menganalisis ACL repositori Anda dan membuat ACL yang sesuai untuk Cloud Search selama pengindeksan. Pemodelan ACL yang kompleks, seperti yang menggunakan pewarisan, memerlukan perencanaan yang cermat. Untuk mengetahui informasi selengkapnya, lihat ACL Cloud Search.

Gunakan class Acl.Builder untuk menyetel akses. Cuplikan dari contoh penelusuran lengkap ini memungkinkan semua pengguna domain (getCustomerPrincipal()) membaca semua item (setReaders()):

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

Membuat model ACL repositori dengan benar, terutama yang menggunakan model pewarisan, memerlukan informasi dalam ACL Cloud Search.

Menetapkan metadata untuk suatu item
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();
Membuat item yang dapat diindeks
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();

Gunakan metode setRequestMode() dari class RepositoryDoc.Builder untuk menyetel permintaan pengindeksan ke ASYNCHRONOUS atau SYNCHRONOUS:

ASYNCHRONOUS
Mode ini memiliki latensi pengindeksan hingga penayangan yang lebih lama, tetapi mengakomodasi kuota throughput yang lebih besar. Gunakan mode asinkron untuk pengindeksan awal (pengisian ulang) seluruh repositori.
SYNCHRONOUS
Mode ini memiliki latensi pengindeksan hingga penayangan yang lebih pendek, tetapi kuota throughput yang lebih kecil. Gunakan mode sinkron untuk mengindeks update dan perubahan repositori. Mode permintaan ditetapkan ke SYNCHRONOUS secara default jika tidak ditentukan.

Langkah berikutnya

Berikut beberapa langkah yang dapat Anda ambil:

  • (opsional) Terapkan metode close() untuk merilis resource apa pun sebelum penghentian.
  • (opsional) Buat konektor identitas menggunakan Content Connector SDK.

Membuat konektor traversal grafik menggunakan class template

Cloud Search Indexing Queue menyimpan ID dan nilai hash opsional untuk setiap item dalam repositori. Konektor traversal grafik mendorong ID item ke Google Cloud Search Indexing Queue dan mengambilnya satu per satu untuk diindeks. Google Cloud Search mengelola antrean dan membandingkan konten antrean untuk menentukan status item, seperti apakah suatu item telah dihapus dari repositori. Untuk mengetahui informasi selengkapnya tentang Cloud Search Indexing Queue, lihat Google Cloud Search Indexing Queue.

Selama pengindeksan, konten item diambil dari repositori data dan setiap ID item turunan didorong ke antrean. Konektor memproses ID induk dan turunan secara berulang hingga semua item ditangani.

Menerapkan titik entri konektor

Titik entri ke konektor adalah metode main(). Metode ini membuat instance class Application dan memanggil metode start() untuk menjalankan konektor.

Sebelum memanggil application.start(), gunakan class IndexingApplication.Builder untuk membuat instance template ListingConnector. ListingConnector menerima objek Repository yang metodenya Anda terapkan.

Menerapkan antarmuka Repository

Ganti init(), getIds(), getDoc(), dan secara opsional getChanges() atau close().

Melakukan traversal grafik

Ganti getIds() untuk mengambil ID awal dan getDoc() untuk menangani item dan mendorong ID turunan ke antrean.

Mendorong ID item dan nilai hash
GraphTraversalSample.java
PushItems.Builder allIds = new PushItems.Builder();
PushItem item = new PushItem();
allIds.addPushItem("root", item);
Mengambil dan menangani setiap item
  1. Periksa apakah ID ada di repositori. Jika tidak, hapus item.
  2. Untuk item yang sudah ada, tetapkan izin dan metadata, lalu gabungkan ke dalam RepositoryDoc.
  3. Kirim ID turunan ke Indexing Queue.
  4. Menampilkan RepositoryDoc.
Menangani item yang dihapus
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);
Menetapkan metadata dan membuat item
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);
Menempatkan ID turunan dalam Indexing Queue
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();

Membuat konektor konten menggunakan REST API

Bagian berikut menjelaskan cara membuat konektor konten menggunakan REST API.

Tentukan strategi traversal Anda

Strategi (Penuh, Daftar, dan Grafik) secara konseptual sama seperti untuk SDK. Terapkan strategi yang Anda pilih menggunakan REST API.

Menerapkan strategi traversal Anda dan item indeks

Daftarkan skema Anda, lalu isi indeks menggunakan:

  1. (Opsional) items.upload untuk file yang lebih besar dari 100 KiB.
  2. (Opsional) media.upload untuk file media.
  3. items.index untuk mengindeks item.

    Contoh permintaan pengindeksan:

    {
      "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. (Opsional) Gunakan items.get untuk memverifikasi pengindeksan.

Menangani perubahan repositori

Mengindeks ulang seluruh repositori secara berkala untuk pengindeksan penuh. Untuk traversal daftar atau grafik, gunakan Google Cloud Indexing Queue untuk melacak perubahan dan hanya mengindeks apa yang telah berubah. Gunakan items.push untuk menambahkan item ke antrean.