สร้างเครื่องมือเชื่อมต่อเนื้อหา

เครื่องมือเชื่อมต่อเนื้อหาคือโปรแกรมซอฟต์แวร์ที่ใช้เพื่อเรียกดูข้อมูลในที่เก็บขององค์กรและป้อนข้อมูลแหล่งข้อมูล Google มีตัวเลือกต่อไปนี้สําหรับการพัฒนาเครื่องมือเชื่อมต่อเนื้อหา

  • Content Connector SDK ตัวเลือกนี้เหมาะสำหรับการเขียนโปรแกรมใน Java Content Connector SDK คือ Wrapper ของ REST API ที่ช่วยให้คุณสร้างตัวเชื่อมต่อได้อย่างรวดเร็ว หากต้องการสร้างตัวเชื่อมต่อเนื้อหาโดยใช้ SDK โปรดดูสร้างตัวเชื่อมต่อเนื้อหาโดยใช้ Content Connector SDK

  • REST API หรือไลบรารี API ระดับล่าง ใช้ตัวเลือกเหล่านี้หากคุณไม่ได้เขียนโปรแกรมใน Java หรือหากโค้ดเบสของคุณรองรับ REST API หรือไลบรารีได้ดีกว่า หากต้องการสร้างเครื่องมือเชื่อมต่อเนื้อหาโดยใช้ REST API โปรดดูหัวข้อสร้างเครื่องมือเชื่อมต่อเนื้อหาโดยใช้ REST API

ตัวเชื่อมต่อเนื้อหาทั่วไปจะทํางานต่อไปนี้

  1. อ่านและประมวลผลพารามิเตอร์การกําหนดค่า
  2. ดึงข้อมูลแบบแยกส่วนที่จัดทําดัชนีได้ ซึ่งเรียกว่า "รายการ" จากที่เก็บเนื้อหาของบุคคลที่สาม
  3. รวม ACL, ข้อมูลเมตา และข้อมูลเนื้อหาไว้ในรายการที่จัดทําดัชนีได้
  4. จัดทําดัชนีรายการในแหล่งข้อมูล Cloud Search
  5. (ไม่บังคับ) ฟังการแจ้งเตือนการเปลี่ยนแปลงจากที่เก็บเนื้อหาของบุคคลที่สาม ระบบจะแปลงการแจ้งเตือนการเปลี่ยนแปลงเป็นคำขอจัดทำดัชนีเพื่อให้แหล่งข้อมูล Cloud Search ซิงค์กับที่เก็บของบุคคลที่สามอยู่เสมอ ตัวเชื่อมต่อจะทํางานนี้เฉพาะในกรณีที่ที่เก็บข้อมูลรองรับการตรวจหาการเปลี่ยนแปลง

สร้างเครื่องมือเชื่อมต่อเนื้อหาโดยใช้ Content Connector SDK

ส่วนต่อไปนี้จะอธิบายวิธีสร้างเครื่องมือเชื่อมต่อเนื้อหาโดยใช้ Content Connector SDK

ตั้งค่าทรัพยากร Dependency

คุณต้องใส่ Dependency บางรายการในไฟล์บิลด์เพื่อใช้ SDK คลิกแท็บด้านล่างเพื่อดูรายการที่ต้องใช้สำหรับสภาพแวดล้อมการสร้าง

Maven

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

Gradle

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

สร้างการกําหนดค่าเครื่องมือเชื่อมต่อ

คอนเน็กเตอร์ทุกตัวจะมีไฟล์การกําหนดค่าซึ่งมีพารามิเตอร์ที่ใช้โดยคอนเน็กเตอร์ เช่น รหัสสําหรับที่เก็บข้อมูล พารามิเตอร์จะกําหนดเป็นคู่คีย์-ค่า เช่น api.sourceId=1234567890abcdef

Google Cloud Search SDK มีพารามิเตอร์การกําหนดค่าหลายรายการที่ Google ให้มา ซึ่งเครื่องมือเชื่อมต่อทั้งหมดใช้ คุณต้องประกาศพารามิเตอร์ต่อไปนี้ที่ Google มีให้ไว้ในไฟล์การกําหนดค่า

  • สําหรับตัวเชื่อมต่อเนื้อหา คุณต้องประกาศ api.sourceId และ api.serviceAccountPrivateKeyFile เนื่องจากพารามิเตอร์เหล่านี้ระบุตําแหน่งที่จัดเก็บและคีย์ส่วนตัวที่จําเป็นสําหรับเข้าถึงที่เก็บ
  • สําหรับตัวเชื่อมต่อข้อมูลประจําตัว คุณต้องประกาศ api.identitySourceId เนื่องจากพารามิเตอร์นี้จะระบุตําแหน่งแหล่งข้อมูลประจําตัวภายนอก หากซิงค์ผู้ใช้ คุณต้องประกาศ api.customerId เป็นรหัสที่ไม่ซ้ำกันสำหรับบัญชี Google Workspace ขององค์กรด้วย

คุณไม่จำเป็นต้องประกาศพารามิเตอร์เหล่านี้ในไฟล์การกําหนดค่า เว้นแต่ว่าคุณต้องการลบล้างค่าเริ่มต้นของพารามิเตอร์อื่นๆ ที่ Google ระบุ ดูข้อมูลเพิ่มเติมเกี่ยวกับพารามิเตอร์การกําหนดค่าที่ Google มีให้ เช่น วิธีสร้างรหัสและคีย์บางรายการได้ที่พารามิเตอร์การกําหนดค่าที่ Google มีให้

นอกจากนี้ คุณยังกําหนดพารามิเตอร์เฉพาะที่เก็บของตนเองเพื่อใช้ในไฟล์การกําหนดค่าได้ด้วย

ส่งไฟล์การกําหนดค่าไปยังเครื่องมือเชื่อมต่อ

ตั้งค่าพร็อพเพอร์ตี้ของระบบ config เพื่อส่งไฟล์การกําหนดค่าไปยังตัวเชื่อมต่อ คุณสามารถตั้งค่าพร็อพเพอร์ตี้ได้โดยใช้อาร์กิวเมนต์ -D เมื่อเริ่มใช้งานตัวเชื่อมต่อ ตัวอย่างเช่น คำสั่งต่อไปนี้จะเริ่มต้นเครื่องมือเชื่อมต่อด้วยไฟล์การกำหนดค่า MyConfig.properties

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

หากไม่มีอาร์กิวเมนต์นี้ SDK จะพยายามเข้าถึงไฟล์การกําหนดค่าเริ่มต้นชื่อ connector-config.properties

กำหนดกลยุทธ์การเรียกดู

ฟังก์ชันหลักของคอนเน็กเตอร์เนื้อหาคือการเรียกดูที่เก็บและจัดทำดัชนีข้อมูล คุณต้องใช้กลยุทธ์การเรียกดูตามขนาดและเลย์เอาต์ของข้อมูลในที่เก็บข้อมูล คุณสามารถออกแบบกลยุทธ์ของคุณเองหรือเลือกจากกลยุทธ์ต่อไปนี้ที่ติดตั้งใช้งานใน SDK

กลยุทธ์การเรียกดูทั้งหมด

กลยุทธ์การเรียกดูทั้งหมดจะสแกนทั้งพื้นที่เก็บข้อมูลและจัดทำดัชนีทุกรายการโดยไม่มีการกรอง กลยุทธ์นี้มักใช้เมื่อคุณมีที่เก็บข้อมูลขนาดเล็กและรับภาระงานเพิ่มเติมจากการเรียกดูทั้งหมดทุกครั้งที่จัดทำดัชนีได้

กลยุทธ์การเรียกใช้นี้เหมาะสำหรับที่เก็บข้อมูลขนาดเล็กที่มีข้อมูลแบบคงที่ซึ่งไม่เป็นลําดับชั้นส่วนใหญ่ นอกจากนี้ คุณยังใช้กลยุทธ์การเรียกดูนี้เมื่อการตรวจหาการเปลี่ยนแปลงทำได้ยากหรือที่เก็บไม่รองรับ

กลยุทธ์การเรียกดูรายการ

กลยุทธ์การเรียกดูรายการจะสแกนทั้งพื้นที่เก็บข้อมูล รวมถึงโหนดย่อยทั้งหมด เพื่อกำหนดสถานะของแต่ละรายการ จากนั้น ตัวเชื่อมต่อจะทำการเรียกใช้ครั้งที่ 2 และจัดทำดัชนีเฉพาะรายการใหม่หรือรายการที่อัปเดตตั้งแต่การจัดทำดัชนีครั้งล่าสุด กลยุทธ์นี้มักใช้เพื่อทำการอัปเดตแบบเพิ่มลงในดัชนีที่มีอยู่ (แทนที่จะต้องท่องไปยังทุกตำแหน่งทุกครั้งที่อัปเดตดัชนี)

กลยุทธ์การเรียกใช้นี้เหมาะสำหรับกรณีที่การตรวจหาการเปลี่ยนแปลงทำได้ยากหรือที่รีโพซิทอรีไม่รองรับ คุณมีข้อมูลที่ไม่เป็นลําดับชั้น และคุณกําลังทํางานกับชุดข้อมูลขนาดใหญ่มาก

การเรียกใช้กราฟ

กลยุทธ์การเรียกดูกราฟจะสแกนโหนดหลักทั้งหมดเพื่อระบุสถานะของแต่ละรายการ จากนั้นเครื่องมือเชื่อมต่อจะทํางานรอบที่ 2 และจัดทําดัชนีเฉพาะรายการในโหนดรูทที่เป็นรายการใหม่หรือได้รับการอัปเดตนับตั้งแต่การจัดทําดัชนีครั้งล่าสุด สุดท้าย ตัวเชื่อมต่อจะส่งรหัสย่อยแล้วจัดทำดัชนีรายการในโหนดย่อยซึ่งเป็นรายการใหม่หรืออัปเดตแล้ว ตัวเชื่อมต่อจะดำเนินการซ้ำๆ ผ่านโหนดย่อยทั้งหมดจนกว่าระบบจะจัดการกับรายการทั้งหมดแล้ว โดยปกติแล้ว การสํารวจดังกล่าวจะใช้กับที่เก็บข้อมูลแบบลําดับชั้นที่การระบุรหัสทั้งหมดไม่เหมาะ

กลยุทธ์นี้เหมาะสำหรับในกรณีที่คุณมีข้อมูลที่จัดลำดับชั้นซึ่งต้องมีการ Crawl เช่น ชุดไดเรกทอรีหรือหน้าเว็บ

กลยุทธ์การเรียกดูแต่ละรายการเหล่านี้จะใช้โดยคลาสเครื่องมือเชื่อมต่อเทมเพลตใน SDK แม้ว่าคุณจะใช้กลยุทธ์การเรียกดูของคุณเองได้ แต่เทมเพลตเหล่านี้จะช่วยเร่งการพัฒนาตัวเชื่อมต่อได้อย่างมาก หากต้องการสร้างตัวเชื่อมต่อโดยใช้เทมเพลต ให้ไปที่ส่วนที่เกี่ยวข้องกับกลยุทธ์การเรียกดู

สร้างเครื่องมือเชื่อมต่อแบบท่องเว็บทั้งหมดโดยใช้คลาสเทมเพลต

ส่วนนี้ของเอกสารจะอ้างอิงข้อมูลโค้ดจากตัวอย่าง FullTraversalSample

ใช้จุดแรกเข้าของเครื่องมือเชื่อมต่อ

จุดแรกเข้าของขั้วต่อคือเมธอด main() งานหลักของเมธอดนี้คือการสร้างอินสแตนซ์ของคลาส Application และเรียกใช้เมธอด start() เพื่อเรียกใช้เครื่องมือเชื่อมต่อ

ก่อนเรียกใช้ application.start() ให้ใช้คลาส IndexingApplication.Builder เพื่อสร้างอินสแตนซ์เทมเพลต FullTraversalConnector ฟังก์ชัน FullTraversalConnector รับออบเจ็กต์ Repository ที่มีเมธอดที่คุณใช้งาน ข้อมูลโค้ดต่อไปนี้แสดงวิธีใช้เมธอด main()

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 จะเรียกใช้วิธี initConfig() หลังจากที่วิธี main() ของคอนเน็กเตอร์เรียกใช้ Application.build เมธอด initConfig() ดําเนินการต่อไปนี้

  1. เรียกใช้เมธอด Configuation.isInitialized() เพื่อตรวจสอบว่า Configuration ยังไม่ได้เริ่มต้น
  2. เริ่มต้นออบเจ็กต์ Configuration ด้วยคู่คีย์-ค่าที่ Google ระบุ ระบบจะจัดเก็บคู่คีย์-ค่าแต่ละคู่ไว้ในออบเจ็กต์ ConfigValue ภายในออบเจ็กต์ Configuration

ใช้อินเทอร์เฟซ Repository

วัตถุประสงค์เดียวของออบเจ็กต์ Repository คือการดำเนินการเพรสเซอร์และการจัดทําดัชนีรายการที่เก็บ เมื่อใช้เทมเพลต คุณเพียงต้องลบล้างเมธอดบางอย่างภายในRepositoryตัวแปรติดต่อเพื่อสร้างตัวเชื่อมต่อเนื้อหา วิธีการที่คุณลบล้างจะขึ้นอยู่กับเทมเพลตและกลยุทธ์การเรียกใช้ สําหรับ FullTraversalConnector ให้ลบล้างวิธีการต่อไปนี้

  • init() เมธอด หากต้องการตั้งค่าและเริ่มต้นใช้งานที่เก็บข้อมูล ให้ลบล้างวิธีการ init()

  • getAllDocs() เมธอด หากต้องการเรียกดูและจัดทำดัชนีรายการทั้งหมดในที่เก็บข้อมูล ให้ลบล้างเมธอด getAllDocs() ระบบจะเรียกใช้เมธอดนี้ 1 ครั้งสําหรับการเรียกดูตามกำหนดการแต่ละครั้ง (ตามที่กําหนดโดยการกำหนดค่า)

  • (ไม่บังคับ) getChanges() วิธีการ หากที่เก็บข้อมูลรองรับการตรวจหาการเปลี่ยนแปลง ให้ลบล้างเมธอด getChanges() ระบบจะเรียกใช้เมธอดนี้ 1 ครั้งสําหรับการเรียกดูแบบเพิ่มทีละน้อยตามกำหนดการแต่ละรายการ (ตามที่กําหนดโดยการกำหนดค่า) เพื่อดึงข้อมูลรายการที่แก้ไขและจัดทำดัชนี

  • (ไม่บังคับ) close() วิธีการ หากต้องการล้างข้อมูลในที่เก็บ ให้ลบล้างclose()วิธีนี้ ระบบจะเรียกใช้เมธอดนี้ 1 ครั้งระหว่างการปิดเครื่องมือเชื่อมต่อ

เมธอดแต่ละรายการของออบเจ็กต์ Repository จะแสดงผลออบเจ็กต์ ApiOperation ประเภทใดประเภทหนึ่ง ออบเจ็กต์ ApiOperation จะดําเนินการในรูปแบบการเรียกใช้ IndexingService.indexItem() ครั้งเดียวหรือหลายครั้งเพื่อดําเนินการจัดทำดัชนีที่แท้จริงของที่เก็บ

รับพารามิเตอร์การกําหนดค่าที่กําหนดเอง

ในการจัดการการกําหนดค่าของเครื่องมือเชื่อมต่อ คุณจะต้องรับพารามิเตอร์ที่กําหนดเองจากออบเจ็กต์ Configuration โดยปกติแล้ว การดำเนินการนี้จะอยู่ในเมธอดของ Repository คลาส init()

คลาส Configuration มีเมธอดหลายวิธีในการรับข้อมูลประเภทต่างๆ จากการกำหนดค่า โดยแต่ละเมธอดจะแสดงผลออบเจ็กต์ ConfigValue จากนั้นจะใช้เมธอด get() ของออบเจ็กต์ ConfigValue เพื่อดึงค่าจริง ข้อมูลโค้ดต่อไปนี้จาก FullTraversalSample จะแสดงวิธีดึงค่าจำนวนเต็มที่กำหนดเองค่าเดียวจากออบเจ็กต์ Configuration

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

หากต้องการรับและแยกวิเคราะห์พารามิเตอร์ที่มีหลายค่า ให้ใช้โปรแกรมแยกวิเคราะห์ประเภทของคลาส Configuration รายการใดรายการหนึ่งเพื่อแยกวิเคราะห์ข้อมูลออกเป็นกลุ่มๆ ข้อมูลโค้ดต่อไปนี้จากเครื่องมือเชื่อมต่อบทแนะนำใช้เมธอด getMultiValue เพื่อรับรายการชื่อที่เก็บ GitHub

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

ทำการเรียกใช้แบบเต็ม

ลบล้าง getAllDocs() เพื่อเรียกใช้การเรียกดูทั้งหมดและจัดทำดัชนีที่เก็บ เมธอด getAllDocs() ยอมรับจุดตรวจสอบ ระบบจะใช้จุดตรวจสอบเพื่อจัดทําดัชนีต่อที่รายการที่เฉพาะเจาะจงในกรณีที่กระบวนการถูกขัดจังหวะ สําหรับรายการแต่ละรายการในที่เก็บ ให้ทําตามขั้นตอนต่อไปนี้ในgetAllDocs()เมธอด

  1. ตั้งค่าสิทธิ์
  2. ตั้งค่าข้อมูลเมตาของรายการที่คุณกําลังจัดทําดัชนี
  3. รวมข้อมูลเมตาและรายการเข้าด้วยกันเป็น RepositoryDoc ที่จัดทำดัชนีได้รายการเดียว
  4. แพ็กเกจรายการที่จัดทำดัชนีได้แต่ละรายการไว้ในตัวดำเนินการที่ getAllDocs() method แสดงผล โปรดทราบว่า getAllDocs() จะแสดงผลเป็น CheckpointCloseableIterable ซึ่งเป็นการวนซ้ำของ ApiOperation ออบเจ็กต์ โดยแต่ละออบเจ็กต์แสดงถึงคําขอ API ที่ดําเนินการกับ RepositoryDoc เช่น การจัดทําดัชนี

หากชุดรายการมีขนาดใหญ่เกินกว่าที่จะประมวลผลได้ในคอลเดียว ให้ใส่จุดตรวจสอบและตั้งค่า hasMore(true) เพื่อระบุว่ามีรายการอื่นๆ สำหรับการจัดทำดัชนีเพิ่มเติม

ตั้งค่าสิทธิ์สำหรับรายการ

ที่เก็บข้อมูลใช้รายการควบคุมการเข้าถึง (ACL) เพื่อระบุผู้ใช้หรือกลุ่มที่มีสิทธิ์เข้าถึงรายการ ACL คือรายการรหัสของกลุ่มหรือผู้ใช้ที่มีสิทธิ์เข้าถึงรายการ

คุณต้องทําซ้ำ ACL ที่ใช้โดยที่เก็บข้อมูลเพื่อให้มั่นใจว่ามีเพียงผู้ใช้ที่มีสิทธิ์เข้าถึงรายการเท่านั้นที่เห็นรายการนั้นในผลการค้นหา คุณต้องระบุ ACL ของรายการเมื่อจัดทำดัชนีรายการเพื่อให้ Google Cloud Search มีข้อมูลที่จำเป็นในการให้สิทธิ์เข้าถึงระดับที่เหมาะสมกับรายการ

Content Connector SDK มีคลาสและเมธอด ACL ที่หลากหลายเพื่อจำลอง ACL ของที่เก็บข้อมูลส่วนใหญ่ คุณต้องวิเคราะห์ ACL สำหรับแต่ละรายการในที่เก็บ และสร้าง ACL ที่เกี่ยวข้องสำหรับ Google Cloud Search เมื่อคุณจัดทำดัชนีรายการ หาก ACL ของที่เก็บข้อมูลใช้แนวคิดต่างๆ เช่น การสืบทอด ACL การจำลอง ACL นั้นอาจเป็นเรื่องยาก ดูข้อมูลเพิ่มเติมเกี่ยวกับ ACL ของ Google Cloud Search ได้ที่ACL ของ Google Cloud Search

หมายเหตุ: Cloud Search Indexing API รองรับ ACL โดเมนเดียว และไม่รองรับ ACL ข้ามโดเมน ใช้คลาส Acl.Builder เพื่อกำหนดสิทธิ์เข้าถึงแต่ละรายการโดยใช้ ACL ข้อมูลโค้ดต่อไปนี้ซึ่งนำมาจากตัวอย่างการเรียกใช้แบบเต็ม จะช่วยให้ผู้ใช้หรือ "ผู้ใช้หลัก" ทุกคน (getCustomerPrincipal()) เป็น "ผู้อ่าน" รายการทั้งหมด (.setReaders()) เมื่อทำการค้นหา

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

คุณต้องเข้าใจ ACL เพื่อกำหนดรูปแบบ ACL ให้กับที่เก็บอย่างเหมาะสม ตัวอย่างเช่น คุณอาจจัดทำดัชนีไฟล์ภายในระบบไฟล์ที่ใช้รูปแบบการสืบทอดสิทธิ์บางประเภท ซึ่งโฟลเดอร์ย่อยจะรับสิทธิ์มาจากโฟลเดอร์หลัก การประมาณการสืบทอด ACL ต้องใช้ข้อมูลเพิ่มเติมที่อธิบายไว้ในACL ของ Google Cloud Search

ตั้งค่าข้อมูลเมตาของรายการ

ระบบจะจัดเก็บข้อมูลเมตาไว้ในออบเจ็กต์ Item หากต้องการสร้าง Item คุณต้องมีรหัสสตริงที่ไม่ซ้ำกัน ประเภทรายการ ACL, URL และเวอร์ชันของรายการเป็นอย่างน้อย ข้อมูลโค้ดต่อไปนี้แสดงวิธีสร้าง Item โดยใช้คลาสตัวช่วย 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();

สร้างรายการที่จัดทําดัชนีได้

เมื่อตั้งค่าข้อมูลเมตาของรายการแล้ว คุณสามารถสร้างรายการที่จัดทำดัชนีได้จริงโดยใช้คลาส 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 คือ ApiOperation ประเภทหนึ่งที่ดำเนินการตามคำขอIndexingService.indexItem()จริง

นอกจากนี้ คุณยังใช้เมธอด setRequestMode() ของคลาส RepositoryDoc.Builder เพื่อระบุคําขอจัดทําดัชนีเป็น ASYNCHRONOUS หรือ SYNCHRONOUS ได้ด้วย

ASYNCHRONOUS
โหมดอะซิงโครนัสจะทำให้เวลาในการตอบสนองตั้งแต่การจัดทําดัชนีไปจนถึงการแสดงผลนานขึ้น และรองรับโควต้าอัตราข้อมูลที่สูงสําหรับคําขอจัดทําดัชนี เราขอแนะนําให้ใช้โหมดแบบไม่ประสานสําหรับการจัดทําดัชนีครั้งแรก (ทดแทน) ของที่เก็บข้อมูลทั้งหมด
SYNCHRONOUS
โหมดซิงค์จะทำให้เวลาในการตอบสนองจากการจัดทำดัชนีไปจนถึงการแสดงผลสั้นลงและรองรับโควต้าการรับส่งข้อมูลที่จำกัด เราขอแนะนำให้ใช้โหมดซิงค์สำหรับการจัดทำดัชนีการอัปเดตและการเปลี่ยนแปลงในที่เก็บข้อมูล หากไม่ได้ระบุ โหมดคำขอจะเป็น SYNCHRONOUS โดยค่าเริ่มต้น

แพ็กเกจรายการที่จัดทำดัชนีได้แต่ละรายการในตัวดำเนินการวนซ้ำ

เมธอด getAllDocs() จะแสดงผล Iterator โดยเฉพาะ CheckpointCloseableIterable ของออบเจ็กต์ RepositoryDoc คุณสามารถใช้คลาส CheckpointClosableIterableImpl.Builder เพื่อสร้างและแสดงผลตัวดำเนินการวนซ้ำ ข้อมูลโค้ดต่อไปนี้แสดงวิธีสร้างและแสดงผลตัวดำเนินการวนซ้ำ

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

SDK จะเรียกใช้การจัดทำดัชนีแต่ละรายการที่รวมอยู่ในตัวดำเนินการวน

ขั้นตอนถัดไป

ขั้นตอนถัดไปที่คุณอาจทำได้มีดังนี้

สร้างตัวเชื่อมต่อการวนรายการโดยใช้คลาสเทมเพลต

คิวการจัดทําดัชนีของ Cloud Search ใช้เก็บรหัสและค่าแฮชที่ไม่บังคับสําหรับแต่ละรายการในที่เก็บ เครื่องมือเชื่อมต่อการเรียกดูรายการจะส่ง ID รายการไปยังคิวการจัดทําดัชนีของ Google Cloud Search และดึงข้อมูลทีละรายการเพื่อจัดทําดัชนี Google Cloud Search จะดูแลคิวและเปรียบเทียบเนื้อหาของคิวเพื่อระบุสถานะของรายการ เช่น รายการถูกลบออกจากที่เก็บหรือไม่ ดูข้อมูลเพิ่มเติมเกี่ยวกับคิวการจัดทําดัชนีของ Cloud Search ได้ที่คิวการจัดทําดัชนีของ Cloud Search

ส่วนนี้ของเอกสารจะอ้างอิงถึงตัวอย่างโค้ดจากตัวอย่าง ListTraversalSample

ใช้จุดแรกเข้าของเครื่องมือเชื่อมต่อ

จุดแรกเข้าของขั้วต่อคือเมธอด main() งานหลักของเมธอดนี้คือการสร้างอินสแตนซ์ของคลาส Application และเรียกใช้เมธอด start() เพื่อเรียกใช้เครื่องมือเชื่อมต่อ

ก่อนเรียกใช้ application.start() ให้ใช้คลาส IndexingApplication.Builder เพื่อสร้างอินสแตนซ์เทมเพลต ListingConnector ListingConnector รับออบเจ็กต์ Repository ที่มีเมธอดที่คุณใช้ ข้อมูลโค้ดต่อไปนี้แสดงวิธีสร้างอินสแตนซ์ ListingConnector และ Repository ที่เชื่อมโยง

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

เบื้องหลัง SDK จะเรียกใช้วิธี initConfig() หลังจากที่วิธี main() ของคอนเน็กเตอร์เรียกใช้ Application.build เมธอด initConfig()

  1. เรียกใช้เมธอด Configuation.isInitialized() เพื่อตรวจสอบว่า Configuration ยังไม่ได้เริ่มต้น
  2. เริ่มต้นออบเจ็กต์ Configuration ด้วยคู่คีย์-ค่าที่ Google ระบุ ระบบจะจัดเก็บคู่คีย์-ค่าแต่ละคู่ไว้ในออบเจ็กต์ ConfigValue ภายในออบเจ็กต์ Configuration

ใช้อินเทอร์เฟซ Repository

วัตถุประสงค์เดียวของออบเจ็กต์ Repository คือการดำเนินการเพรสเซอร์และการจัดทําดัชนีรายการที่เก็บ เมื่อใช้เทมเพลต คุณเพียงต้องลบล้างวิธีการบางอย่างในRepositoryอินเทอร์เฟซเพื่อสร้างตัวเชื่อมต่อเนื้อหา วิธีการที่คุณลบล้างจะขึ้นอยู่กับเทมเพลตและกลยุทธ์การเรียกใช้ สําหรับ ListingConnector ให้ลบล้างวิธีการต่อไปนี้

  • init() เมธอด หากต้องการตั้งค่าและเริ่มต้นใช้งานที่เก็บข้อมูล ให้ลบล้างเมธอด init()

  • เมธอด getIds() หากต้องการเรียกข้อมูลรหัสและค่าแฮชของระเบียนทั้งหมดในที่เก็บ ให้ลบล้างเมธอด getIds()

  • เมธอด getDoc() หากต้องการเพิ่ม อัปเดต แก้ไข หรือลบรายการจากดัชนี ให้ลบล้างเมธอด getDoc()

  • (ไม่บังคับ) getChanges() วิธีการ หากที่เก็บข้อมูลรองรับการตรวจหาการเปลี่ยนแปลง ให้ลบล้างเมธอด getChanges() ระบบจะเรียกใช้เมธอดนี้ 1 ครั้งสําหรับการเรียกดูแบบเพิ่มทีละน้อยตามกำหนดการแต่ละครั้ง (ตามที่กําหนดโดยการกำหนดค่า) เพื่อดึงข้อมูลรายการที่แก้ไขและจัดทำดัชนี

  • (ไม่บังคับ) close() วิธีการ หากต้องการล้างข้อมูลในที่เก็บ ให้ลบล้างclose()วิธีนี้ ระบบจะเรียกใช้เมธอดนี้ 1 ครั้งระหว่างการปิดเครื่องมือเชื่อมต่อ

เมธอดแต่ละรายการของออบเจ็กต์ Repository จะแสดงผลออบเจ็กต์ ApiOperation ประเภทใดประเภทหนึ่ง ออบเจ็กต์ ApiOperation จะดําเนินการในรูปแบบการเรียกใช้ IndexingService.indexItem() ครั้งเดียวหรือหลายครั้งเพื่อดําเนินการจัดทำดัชนีที่แท้จริงของที่เก็บ

รับพารามิเตอร์การกําหนดค่าที่กําหนดเอง

ในการจัดการการกําหนดค่าของเครื่องมือเชื่อมต่อ คุณจะต้องรับพารามิเตอร์ที่กําหนดเองจากออบเจ็กต์ Configuration โดยปกติแล้ว การดำเนินการนี้จะอยู่ในเมธอดของ Repository คลาส init()

คลาส Configuration มีเมธอดหลายวิธีในการรับข้อมูลประเภทต่างๆ จากการกำหนดค่า โดยแต่ละเมธอดจะแสดงผลออบเจ็กต์ ConfigValue จากนั้นจะใช้เมธอด get() ของออบเจ็กต์ ConfigValue เพื่อดึงค่าจริง ข้อมูลโค้ดต่อไปนี้จาก FullTraversalSample จะแสดงวิธีดึงค่าจำนวนเต็มที่กำหนดเองค่าเดียวจากออบเจ็กต์ Configuration

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

หากต้องการรับและแยกวิเคราะห์พารามิเตอร์ที่มีหลายค่า ให้ใช้โปรแกรมแยกวิเคราะห์ประเภทของคลาส Configuration รายการใดรายการหนึ่งเพื่อแยกวิเคราะห์ข้อมูลออกเป็นกลุ่มๆ ข้อมูลโค้ดต่อไปนี้จากเครื่องมือเชื่อมต่อบทแนะนำใช้เมธอด getMultiValue เพื่อรับรายการชื่อที่เก็บ GitHub

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

ดำเนินการวนรายการ

ลบล้างวิธี getIds() เพื่อดึงข้อมูลรหัสและค่าแฮชของระเบียนทั้งหมดในที่เก็บ เมธอด getIds() ยอมรับจุดตรวจสอบ ระบบจะใช้จุดตรวจสอบเพื่อจัดทําดัชนีต่อที่รายการที่เฉพาะเจาะจงในกรณีที่กระบวนการถูกขัดจังหวะ

จากนั้นลบล้างวิธี getDoc() เพื่อจัดการแต่ละรายการในคิวการจัดทําดัชนีของ Cloud Search

พุชรหัสสินค้าและค่าแฮช

ลบล้าง getIds() เพื่อดึงข้อมูลรหัสรายการและค่าแฮชเนื้อหาที่เกี่ยวข้องจากที่เก็บ จากนั้นระบบจะรวมคู่รหัสและค่าแฮชเป็นคําขอการดำเนินการ Push ไปยังคิวการจัดทําดัชนีของ Cloud Search โดยปกติระบบจะพุชรหัสรูทหรือรหัสหลักก่อน ตามด้วยรหัสย่อยจนกว่าระบบจะประมวลผลลําดับชั้นของรายการทั้งหมดแล้ว

เมธอด getIds() จะยอมรับจุดตรวจสอบที่แสดงถึงรายการสุดท้ายที่จะได้รับการจัดทำดัชนี คุณสามารถใช้จุดตรวจสอบเพื่อจัดทําดัชนีต่อที่รายการที่เฉพาะเจาะจงได้หากกระบวนการถูกขัดจังหวะ สำหรับแต่ละรายการในที่เก็บข้อมูล ให้ทำตามขั้นตอนต่อไปนี้ในเมธอด getIds()

  • รับรหัสสินค้าแต่ละรายการและค่าแฮชที่เกี่ยวข้องจากที่เก็บ
  • แพ็กคู่รหัสและค่าแฮชแต่ละคู่ไว้ใน PushItems
  • รวม PushItems แต่ละรายการเข้าด้วยกันในตัวดำเนินการวนซ้ำที่แสดงผลโดยวิธี getIds() โปรดทราบว่า getIds() จะแสดงผลเป็น CheckpointCloseableIterable ซึ่งเป็นการวนซ้ำของ ApiOperation ออบเจ็กต์ โดยแต่ละออบเจ็กต์แสดงถึงคําขอ API ที่ดำเนินการใน RepositoryDoc เช่น พุชรายการไปยังคิว

ข้อมูลโค้ดต่อไปนี้แสดงวิธีรับรหัสรายการและค่าแฮชแต่ละรายการ แล้วแทรกลงใน PushItems PushItems คือคำขอ ApiOperation เพื่อส่งรายการไปยังคิวการจัดทําดัชนีของ Cloud Search

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

ข้อมูลโค้ดต่อไปนี้แสดงวิธีใช้คลาส PushItems.Builder เพื่อจัดแพ็กเกจรหัสและค่าแฮชไว้ใน Push เดียว ApiOperation

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

ระบบจะส่งรายการไปยังคิวการจัดทําดัชนีของ Cloud Search เพื่อประมวลผลต่อไป

เรียกข้อมูลและจัดการแต่ละรายการ

ลบล้าง getDoc() เพื่อจัดการแต่ละรายการในคิวการจัดทําดัชนีของ Cloud Search รายการอาจเป็นรายการใหม่ แก้ไขแล้ว ไม่เปลี่ยนแปลง หรือไม่มีอยู่ในที่เก็บข้อมูลต้นทางแล้ว ดึงข้อมูลและจัดทำดัชนีรายการใหม่หรือรายการที่แก้ไขแล้วแต่ละรายการ นำรายการออกจากดัชนีที่ไม่มีอยู่ในที่เก็บข้อมูลต้นทางแล้ว

เมธอด getDoc() จะยอมรับรายการจากคิวการจัดทําดัชนีของ Google Cloud Search สําหรับแต่ละรายการในคิว ให้ทําตามขั้นตอนต่อไปนี้ในเมธอด getDoc()

  1. ตรวจสอบว่ารหัสของรายการในคิวการจัดทําดัชนีของ Cloud Search มีอยู่ในที่เก็บหรือไม่ หากไม่ใช่ ให้ลบรายการออกจากดัชนี

  2. ตรวจสอบดัชนีเพื่อดูสถานะของรายการ และหากรายการไม่มีการเปลี่ยนแปลง (ACCEPTED) ก็ไม่ต้องดำเนินการใดๆ

  3. ดัชนีมีการเปลี่ยนแปลงหรือมีรายการใหม่

    1. ตั้งค่าสิทธิ์
    2. ตั้งค่าข้อมูลเมตาของรายการที่คุณจัดทําดัชนี
    3. รวมข้อมูลเมตาและรายการเข้าด้วยกันเป็น RepositoryDoc ที่จัดทำดัชนีได้รายการเดียว
    4. คืน RepositoryDoc

หมายเหตุ: เทมเพลต ListingConnector ไม่รองรับการแสดงผล null ในเมธอด getDoc() แสดงผลลัพธ์ null ใน NullPointerException.

จัดการรายการที่ลบแล้ว

ข้อมูลโค้ดต่อไปนี้แสดงวิธีตรวจสอบว่ารายการอยู่ในที่เก็บหรือไม่ หากไม่ ให้ลบรายการนั้น

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

โปรดทราบว่า documents คือโครงสร้างข้อมูลที่แสดงถึงที่เก็บ หากไม่พบ documentID ใน documents ให้กลับไปที่ APIOperations.deleteItem(resourceName) เพื่อลบรายการออกจากดัชนี

จัดการรายการที่ไม่มีการเปลี่ยนแปลง

ข้อมูลโค้ดต่อไปนี้แสดงวิธีตรวจสอบสถานะรายการในคิวการจัดทําดัชนีของ Cloud Search และจัดการรายการที่ไม่มีการเปลี่ยนแปลง

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

หากต้องการตรวจสอบว่ารายการไม่ได้รับการเปลี่ยนแปลงหรือไม่ ให้ตรวจสอบสถานะของรายการและข้อมูลเมตาอื่นๆ ที่อาจบ่งบอกถึงการเปลี่ยนแปลง ในตัวอย่างนี้ ระบบจะใช้แฮชของข้อมูลเมตาเพื่อระบุว่ามีการเปลี่ยนแปลงรายการหรือไม่

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

ตั้งค่าสิทธิ์สำหรับรายการ

ที่เก็บข้อมูลใช้รายการควบคุมการเข้าถึง (ACL) เพื่อระบุผู้ใช้หรือกลุ่มที่มีสิทธิ์เข้าถึงรายการ ACL คือรายการรหัสของกลุ่มหรือผู้ใช้ที่มีสิทธิ์เข้าถึงรายการ

คุณต้องทําซ้ำ ACL ที่ใช้โดยที่เก็บข้อมูลเพื่อให้มั่นใจว่ามีเพียงผู้ใช้ที่มีสิทธิ์เข้าถึงรายการเท่านั้นที่เห็นรายการนั้นในผลการค้นหา คุณต้องระบุ ACL ของรายการเมื่อจัดทำดัชนีรายการเพื่อให้ Google Cloud Search มีข้อมูลที่จำเป็นในการให้สิทธิ์เข้าถึงระดับที่เหมาะสมกับรายการ

Content Connector SDK มีคลาสและเมธอด ACL ที่หลากหลายเพื่อจำลอง ACL ของที่เก็บข้อมูลส่วนใหญ่ คุณต้องวิเคราะห์ ACL สำหรับแต่ละรายการในที่เก็บและสร้าง ACL ที่เกี่ยวข้องสำหรับ Google Cloud Search เมื่อคุณจัดทำดัชนีรายการ หาก ACL ของที่เก็บข้อมูลใช้แนวคิดต่างๆ เช่น การสืบทอด ACL การจำลอง ACL นั้นอาจเป็นเรื่องยาก ดูข้อมูลเพิ่มเติมเกี่ยวกับ ACL ของ Google Cloud Search ได้ที่ACL ของ Google Cloud Search

หมายเหตุ: Cloud Search Indexing API รองรับ ACL โดเมนเดียว และไม่รองรับ ACL ข้ามโดเมน ใช้คลาส Acl.Builder เพื่อกำหนดสิทธิ์เข้าถึงแต่ละรายการโดยใช้ ACL ข้อมูลโค้ดต่อไปนี้ซึ่งนำมาจากตัวอย่างการเรียกดูทั้งหมดจะอนุญาตให้ผู้ใช้หรือ "ผู้ใช้หลัก" ทุกคน (getCustomerPrincipal()) เป็น "ผู้อ่าน" รายการทั้งหมด (.setReaders()) เมื่อทำการค้นหา

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

คุณต้องเข้าใจ ACL เพื่อกำหนดรูปแบบ ACL ให้กับที่เก็บอย่างเหมาะสม ตัวอย่างเช่น คุณอาจจัดทำดัชนีไฟล์ภายในระบบไฟล์ที่ใช้รูปแบบการสืบทอดสิทธิ์บางประเภท ซึ่งโฟลเดอร์ย่อยจะรับสิทธิ์มาจากโฟลเดอร์หลัก การประมาณการสืบทอด ACL ต้องใช้ข้อมูลเพิ่มเติมที่อธิบายไว้ในACL ของ Google Cloud Search

ตั้งค่าข้อมูลเมตาของรายการ

ระบบจะจัดเก็บข้อมูลเมตาไว้ในออบเจ็กต์ Item หากต้องการสร้าง Item คุณต้องมีรหัสสตริงที่ไม่ซ้ำกัน ประเภทรายการ ACL, URL และเวอร์ชันของรายการเป็นอย่างน้อย ข้อมูลโค้ดต่อไปนี้แสดงวิธีสร้าง Item โดยใช้คลาสตัวช่วย IndexingItemBuilder

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

สร้างรายการที่จัดทําดัชนีได้

เมื่อตั้งค่าข้อมูลเมตาสำหรับรายการแล้ว คุณสามารถสร้างรายการที่จัดทำดัชนีได้จริงโดยใช้ RepositoryDoc.Builder ตัวอย่างต่อไปนี้แสดงวิธีสร้างรายการที่จัดทำดัชนีได้รายการเดียว

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

RepositoryDoc เป็นประเภทของ ApiOperation ที่จะดําเนินการตามคําขอจริง IndexingService.indexItem()

นอกจากนี้ คุณยังใช้เมธอด setRequestMode() ของคลาส RepositoryDoc.Builder เพื่อระบุคําขอจัดทําดัชนีเป็น ASYNCHRONOUS หรือ SYNCHRONOUS ได้ด้วย

ASYNCHRONOUS
โหมดอะซิงโครนัสจะทำให้เวลาในการตอบสนองตั้งแต่การจัดทําดัชนีไปจนถึงการแสดงผลนานขึ้น และรองรับโควต้าอัตราข้อมูลที่สูงสําหรับคําขอจัดทําดัชนี เราขอแนะนําให้ใช้โหมดแบบไม่ประสานสําหรับการจัดทําดัชนีครั้งแรก (ทดแทน) ของที่เก็บข้อมูลทั้งหมด
SYNCHRONOUS
โหมดซิงค์จะทำให้เวลาในการตอบสนองจากการจัดทำดัชนีไปจนถึงการแสดงผลสั้นลงและรองรับโควต้าการรับส่งข้อมูลที่จำกัด เราขอแนะนำให้ใช้โหมดซิงค์สำหรับการจัดทำดัชนีการอัปเดตและการเปลี่ยนแปลงในที่เก็บข้อมูล หากไม่ได้ระบุ โหมดคำขอจะเป็น SYNCHRONOUS โดยค่าเริ่มต้น

ขั้นตอนถัดไป

ขั้นตอนถัดไปที่คุณอาจทำได้มีดังนี้

สร้างตัวเชื่อมต่อการท่องกราฟโดยใช้คลาสเทมเพลต

คิวการจัดทําดัชนีของ Cloud Search ใช้เก็บรหัสและค่าแฮชที่ไม่บังคับสําหรับแต่ละรายการในที่เก็บ เครื่องมือเชื่อมต่อการท่องกราฟจะส่งรหัสรายการไปยังคิวการจัดทําดัชนีของ Google Cloud Search และดึงข้อมูลทีละรายการเพื่อจัดทําดัชนี Google Cloud Search จะดูแลคิวและเปรียบเทียบเนื้อหาของคิวเพื่อพิจารณาสถานะของรายการ เช่น มีการลบรายการออกจากที่เก็บหรือไม่ ดูข้อมูลเพิ่มเติมเกี่ยวกับคิวการจัดทําดัชนี Cloud Search ได้ที่คิวการจัดทําดัชนี Google Cloud Search

ในระหว่างการจัดทำดัชนี ระบบจะดึงข้อมูลเนื้อหาของรายการจากที่เก็บข้อมูล และระบบจะส่งรหัสรายการย่อยไปยังคิว ตัวเชื่อมต่อจะดำเนินการแบบย้อนกลับโดยประมวลผลรหัสหลักและรหัสย่อยจนกว่าระบบจะจัดการรายการทั้งหมดได้

ส่วนนี้ของเอกสารจะอ้างอิงข้อมูลโค้ดจากตัวอย่าง GraphTraversalSample

ใช้จุดแรกเข้าของเครื่องมือเชื่อมต่อ

จุดแรกเข้าของขั้วต่อคือเมธอด main() งานหลักของเมธอดนี้คือการสร้างอินสแตนซ์ของคลาส Application และเรียกใช้เมธอด start() เพื่อเรียกใช้เครื่องมือเชื่อมต่อ

ก่อนเรียกใช้ application.start() ให้ใช้คลาส IndexingApplication.Builder เพื่อสร้างอินสแตนซ์ของเทมเพลต ListingConnector ฟังก์ชัน ListingConnector รับออบเจ็กต์ Repository ที่มีเมธอดที่คุณใช้งาน

ข้อมูลโค้ดต่อไปนี้แสดงวิธีสร้างอินสแตนซ์ ListingConnector และ Repository ที่เชื่อมโยง

GraphTraversalSample.java
/**
 * This sample connector uses the Cloud Search SDK template class for a graph
 * 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();
}

เบื้องหลัง SDK จะเรียกใช้วิธี initConfig() หลังจากที่วิธี main() ของคอนเน็กเตอร์เรียกใช้ Application.build เมธอด initConfig()

  1. เรียกใช้เมธอด Configuation.isInitialized() เพื่อตรวจสอบว่า Configuration ยังไม่ได้เริ่มต้น
  2. เริ่มต้นออบเจ็กต์ Configuration ด้วยคู่คีย์-ค่าที่ Google ระบุ ระบบจะจัดเก็บคู่คีย์-ค่าแต่ละคู่ไว้ในออบเจ็กต์ ConfigValue ภายในออบเจ็กต์ Configuration

ใช้อินเทอร์เฟซ Repository

วัตถุประสงค์เดียวของออบเจ็กต์ Repository คือการดำเนินการวนและจัดทำดัชนีรายการในรีโพซิทอรี เมื่อใช้เทมเพลต คุณเพียงต้องลบล้างเมธอดบางอย่างภายในRepositoryอินเทอร์เฟซเพื่อสร้างตัวเชื่อมต่อเนื้อหา วิธีการที่คุณลบล้างจะขึ้นอยู่กับเทมเพลตและกลยุทธ์การเรียกใช้ สําหรับ ListingConnector คุณลบล้างวิธีการต่อไปนี้

  • init() เมธอด หากต้องการตั้งค่าและเริ่มต้นใช้งานที่เก็บข้อมูล ให้ลบล้างวิธีการ init()

  • เมธอด getIds() หากต้องการเรียกข้อมูลรหัสและค่าแฮชของระเบียนทั้งหมดในที่เก็บ ให้ลบล้างเมธอด getIds()

  • เมธอด getDoc() หากต้องการเพิ่ม อัปเดต แก้ไข หรือลบรายการจากดัชนี ให้ลบล้างเมธอด getDoc()

  • (ไม่บังคับ) getChanges() วิธีการ หากที่เก็บข้อมูลรองรับการตรวจหาการเปลี่ยนแปลง ให้ลบล้างเมธอด getChanges() ระบบจะเรียกใช้เมธอดนี้ 1 ครั้งสําหรับการเรียกดูแบบเพิ่มทีละน้อยตามกำหนดการแต่ละครั้ง (ตามที่กําหนดโดยการกำหนดค่า) เพื่อดึงข้อมูลรายการที่แก้ไขและจัดทำดัชนี

  • (ไม่บังคับ) close() วิธีการ หากต้องการล้างข้อมูลในที่เก็บ ให้ลบล้างclose()วิธีนี้ ระบบจะเรียกใช้เมธอดนี้ 1 ครั้งระหว่างการปิดเครื่องมือเชื่อมต่อ

เมธอดแต่ละรายการของออบเจ็กต์ Repository จะแสดงผลออบเจ็กต์ ApiOperation บางประเภท ApiOperation ออบเจ็กต์จะดําเนินการในรูปแบบการเรียกใช้IndexingService.indexItem()ครั้งเดียวหรือหลายครั้งเพื่อดําเนินการจัดทำดัชนีที่แท้จริงของที่เก็บ

รับพารามิเตอร์การกําหนดค่าที่กําหนดเอง

ในการกําหนดค่าของเครื่องมือเชื่อมต่อ คุณจะต้องรับพารามิเตอร์ที่กําหนดเองจากออบเจ็กต์ Configuration โดยปกติแล้ว การดำเนินการนี้จะอยู่ในเมธอดของ Repository คลาส init()

คลาส Configuration มีเมธอดหลายวิธีในการรับข้อมูลประเภทต่างๆ จากการกำหนดค่า โดยแต่ละเมธอดจะแสดงผลออบเจ็กต์ ConfigValue จากนั้นจะใช้เมธอด get() ของออบเจ็กต์ ConfigValue เพื่อดึงค่าจริง ข้อมูลโค้ดต่อไปนี้จาก FullTraversalSample จะแสดงวิธีดึงค่าจำนวนเต็มที่กำหนดเองค่าเดียวจากออบเจ็กต์ Configuration

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

หากต้องการรับและแยกวิเคราะห์พารามิเตอร์ที่มีหลายค่า ให้ใช้โปรแกรมแยกวิเคราะห์ประเภทของคลาส Configuration รายการใดรายการหนึ่งเพื่อแยกวิเคราะห์ข้อมูลออกเป็นกลุ่มๆ ข้อมูลโค้ดต่อไปนี้จากเครื่องมือเชื่อมต่อบทแนะนำใช้วิธี getMultiValue เพื่อรับรายการชื่อที่เก็บ GitHub

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

ดำเนินการผ่านกราฟ

ลบล้างวิธี getIds() เพื่อดึงข้อมูลรหัสและค่าแฮชของระเบียนทั้งหมดในที่เก็บ เมธอด getIds() ยอมรับจุดตรวจสอบ ระบบจะใช้จุดตรวจสอบเพื่อจัดทําดัชนีต่อที่รายการที่เฉพาะเจาะจงในกรณีที่กระบวนการถูกขัดจังหวะ

จากนั้นลบล้างวิธี getDoc() เพื่อจัดการแต่ละรายการในคิวการจัดทําดัชนีของ Cloud Search

พุชรหัสสินค้าและค่าแฮช

ลบล้าง getIds() เพื่อดึงข้อมูลรหัสรายการและค่าแฮชเนื้อหาที่เกี่ยวข้องจากที่เก็บ จากนั้นระบบจะรวมคู่รหัสและค่าแฮชเป็นคําขอการดำเนินการ Push ไปยังคิวการจัดทําดัชนีของ Cloud Search โดยปกติระบบจะพุชรหัสรูทหรือรหัสหลักก่อน ตามด้วยรหัสย่อยจนกว่าระบบจะประมวลผลลําดับชั้นของรายการทั้งหมดแล้ว

เมธอด getIds() จะยอมรับจุดตรวจสอบที่แสดงถึงรายการสุดท้ายที่จะได้รับการจัดทำดัชนี คุณสามารถใช้จุดตรวจสอบเพื่อจัดทําดัชนีต่อที่รายการที่เฉพาะเจาะจงได้หากกระบวนการถูกขัดจังหวะ สำหรับแต่ละรายการในที่เก็บข้อมูล ให้ทำตามขั้นตอนต่อไปนี้ในเมธอด getIds()

  • รับรหัสสินค้าแต่ละรายการและค่าแฮชที่เกี่ยวข้องจากที่เก็บ
  • แพ็กคู่รหัสและค่าแฮชแต่ละคู่ไว้ใน PushItems
  • รวม PushItems แต่ละรายการเข้าด้วยกันในตัวดำเนินการวนซ้ำที่แสดงผลโดยเมธอด getIds() โปรดทราบว่า getIds() จะแสดงผลเป็น CheckpointCloseableIterable ซึ่งเป็นการวนซ้ำของ ApiOperation ออบเจ็กต์ โดยแต่ละออบเจ็กต์แสดงถึงคําขอ API ที่ดำเนินการใน RepositoryDoc เช่น พุชรายการไปยังคิว

ข้อมูลโค้ดต่อไปนี้แสดงวิธีรับรหัสรายการและค่าแฮชแต่ละรายการ แล้วแทรกลงใน PushItems PushItems คือคำขอเพื่อส่งรายการไปยังคิวการจัดทําดัชนีของ Cloud Search ApiOperation

GraphTraversalSample.java
PushItems.Builder allIds = new PushItems.Builder();
PushItem item = new PushItem();
allIds.addPushItem("root", item);

ข้อมูลโค้ดต่อไปนี้แสดงวิธีใช้คลาส PushItems.Builder เพื่อจัดแพ็กเกจรหัสและค่าแฮชไว้ใน Push เดียว ApiOperation

GraphTraversalSample.java
ApiOperation pushOperation = allIds.build();
CheckpointCloseableIterable<ApiOperation> iterator =
  new CheckpointCloseableIterableImpl.Builder<>(
      Collections.singletonList(pushOperation))
  .build();

ระบบจะส่งรายการไปยังคิวการจัดทําดัชนีของ Cloud Search เพื่อประมวลผลต่อไป

เรียกข้อมูลและจัดการแต่ละรายการ

ลบล้าง getDoc() เพื่อจัดการแต่ละรายการในคิวการจัดทําดัชนีของ Cloud Search รายการอาจเป็นรายการใหม่ แก้ไขแล้ว ไม่เปลี่ยนแปลง หรือไม่มีอยู่ในที่เก็บข้อมูลต้นทางแล้ว ดึงข้อมูลและจัดทำดัชนีรายการใหม่หรือรายการที่แก้ไขแล้วแต่ละรายการ นำรายการออกจากดัชนีที่ไม่มีอยู่ในที่เก็บข้อมูลต้นทางแล้ว

เมธอด getDoc() จะรับรายการจากคิวการจัดทําดัชนี Cloud Search สําหรับแต่ละรายการในคิว ให้ทําตามขั้นตอนต่อไปนี้ในเมธอด getDoc()

  1. ตรวจสอบว่ารหัสของรายการในคิวการจัดทําดัชนีของ Cloud Search อยู่ในที่เก็บหรือไม่ หากไม่ใช่ ให้ลบรายการออกจากดัชนี หากมีรายการดังกล่าว ให้ทำตามขั้นตอนถัดไป

  2. ดัชนีมีการเปลี่ยนแปลงหรือมีรายการใหม่

    1. ตั้งค่าสิทธิ์
    2. ตั้งค่าข้อมูลเมตาของรายการที่คุณกําลังจัดทําดัชนี
    3. รวมข้อมูลเมตาและรายการเข้าด้วยกันเป็น RepositoryDoc ที่จัดทำดัชนีได้รายการเดียว
    4. ใส่รหัสย่อยในคิวการจัดทําดัชนีของ Cloud Search เพื่อดําเนินการต่อ
    5. คืน RepositoryDoc

จัดการรายการที่ลบแล้ว

ข้อมูลโค้ดต่อไปนี้แสดงวิธีตรวจสอบว่ารายการอยู่ในดัชนีหรือไม่ และหากไม่อยู่ ให้ลบรายการนั้น

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

ตั้งค่าสิทธิ์สำหรับรายการ

ที่เก็บข้อมูลใช้รายการควบคุมการเข้าถึง (ACL) เพื่อระบุผู้ใช้หรือกลุ่มที่มีสิทธิ์เข้าถึงรายการ ACL คือรายการรหัสของกลุ่มหรือผู้ใช้ที่มีสิทธิ์เข้าถึงรายการ

คุณต้องทําซ้ำ ACL ที่ใช้โดยที่เก็บข้อมูลเพื่อให้มั่นใจว่ามีเพียงผู้ใช้ที่มีสิทธิ์เข้าถึงรายการเท่านั้นที่เห็นรายการนั้นในผลการค้นหา คุณต้องระบุ ACL ของรายการเมื่อจัดทำดัชนีรายการเพื่อให้ Google Cloud Search มีข้อมูลที่จำเป็นในการให้สิทธิ์เข้าถึงระดับที่เหมาะสมกับรายการ

Content Connector SDK มีคลาสและเมธอด ACL ที่หลากหลายเพื่อจำลอง ACL ของที่เก็บข้อมูลส่วนใหญ่ คุณต้องวิเคราะห์ ACL สำหรับแต่ละรายการในที่เก็บ และสร้าง ACL ที่เกี่ยวข้องสำหรับ Google Cloud Search เมื่อคุณจัดทำดัชนีรายการ หาก ACL ของที่เก็บข้อมูลใช้แนวคิดต่างๆ เช่น การสืบทอด ACL การจำลอง ACL นั้นอาจเป็นเรื่องยาก ดูข้อมูลเพิ่มเติมเกี่ยวกับ ACL ของ Google Cloud Search ได้ที่ACL ของ Google Cloud Search

หมายเหตุ: Cloud Search Indexing API รองรับ ACL โดเมนเดียว และไม่รองรับ ACL ข้ามโดเมน ใช้คลาส Acl.Builder เพื่อกำหนดสิทธิ์เข้าถึงแต่ละรายการโดยใช้ ACL ข้อมูลโค้ดต่อไปนี้ซึ่งนำมาจากตัวอย่างการเรียกใช้แบบเต็ม จะช่วยให้ผู้ใช้หรือ "ผู้ใช้หลัก" ทุกคน (getCustomerPrincipal()) เป็น "ผู้อ่าน" รายการทั้งหมด (.setReaders()) เมื่อทำการค้นหา

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

คุณต้องเข้าใจ ACL เพื่อกำหนดรูปแบบ ACL ให้กับที่เก็บอย่างเหมาะสม ตัวอย่างเช่น คุณอาจจัดทำดัชนีไฟล์ภายในระบบไฟล์ที่ใช้รูปแบบการสืบทอดสิทธิ์บางประเภท ซึ่งโฟลเดอร์ย่อยจะรับสิทธิ์มาจากโฟลเดอร์หลัก การประมาณการสืบทอด ACL ต้องใช้ข้อมูลเพิ่มเติมที่อธิบายไว้ในACL ของ Google Cloud Search

ตั้งค่าข้อมูลเมตาของรายการ

ระบบจะจัดเก็บข้อมูลเมตาไว้ในออบเจ็กต์ Item หากต้องการสร้าง Item คุณต้องมีรหัสสตริงที่ไม่ซ้ำกัน ประเภทรายการ ACL, URL และเวอร์ชันของรายการเป็นอย่างน้อย ข้อมูลโค้ดต่อไปนี้แสดงวิธีสร้าง Item โดยใช้คลาสตัวช่วย IndexingItemBuilder

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

สร้างรายการที่จัดทําดัชนีได้

เมื่อตั้งค่าข้อมูลเมตาสำหรับรายการแล้ว คุณสามารถสร้างรายการที่จัดทำดัชนีได้จริงโดยใช้ RepositoryDoc.Builder ตัวอย่างต่อไปนี้แสดงวิธีสร้างรายการที่จัดทำดัชนีได้รายการเดียว

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

RepositoryDoc คือ ApiOperation ประเภทหนึ่งที่ดำเนินการตามคำขอIndexingService.indexItem()จริง

นอกจากนี้ คุณยังใช้เมธอด setRequestMode() ของคลาส RepositoryDoc.Builder เพื่อระบุคําขอจัดทําดัชนีเป็น ASYNCHRONOUS หรือ SYNCHRONOUS ได้ด้วย

ASYNCHRONOUS
โหมดอะซิงโครนัสจะทำให้เวลาในการตอบสนองจากการจัดทําดัชนีไปจนถึงการแสดงผลนานขึ้น และรองรับโควต้าอัตราข้อมูลที่สูงสําหรับคําขอจัดทําดัชนี เราขอแนะนําให้ใช้โหมดแบบไม่ประสานสําหรับการจัดทําดัชนีครั้งแรก (ทดแทน) ของที่เก็บข้อมูลทั้งหมด
SYNCHRONOUS
โหมดซิงค์จะทำให้เวลาในการตอบสนองจากการจัดทำดัชนีไปจนถึงการแสดงผลสั้นลงและรองรับโควต้าการรับส่งข้อมูลที่จำกัด เราขอแนะนำให้ใช้โหมดซิงค์สำหรับการจัดทำดัชนีการอัปเดตและการเปลี่ยนแปลงในที่เก็บข้อมูล หากไม่ได้ระบุ โหมดคำขอจะเป็น SYNCHRONOUS โดยค่าเริ่มต้น

ใส่รหัสย่อยในคิวการจัดทําดัชนีของ Cloud Search

ข้อมูลโค้ดต่อไปนี้แสดงวิธีรวมรหัสย่อยของรายการหลักที่ประมวลผลอยู่ในปัจจุบันไว้ในคิวเพื่อประมวลผล ระบบจะประมวลผลรหัสเหล่านี้หลังจากจัดทําดัชนีรายการหลักแล้ว

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

ขั้นตอนถัดไป

ขั้นตอนถัดไปที่คุณอาจทำได้มีดังนี้

สร้างเครื่องมือเชื่อมต่อเนื้อหาโดยใช้ REST API

ส่วนต่อไปนี้อธิบายวิธีสร้างตัวเชื่อมต่อเนื้อหาโดยใช้ REST API

กำหนดกลยุทธ์การเรียกดู

ฟังก์ชันหลักของคอนเน็กเตอร์เนื้อหาคือการเรียกดูที่เก็บและจัดทำดัชนีข้อมูล คุณต้องใช้กลยุทธ์การเรียกดูตามขนาดและเลย์เอาต์ของข้อมูลในที่เก็บข้อมูล กลยุทธ์การเรียกดูทั่วไป 3 ประการมีดังนี้

กลยุทธ์การเรียกดูทั้งหมด

กลยุทธ์การเรียกดูทั้งหมดจะสแกนทั้งพื้นที่เก็บข้อมูลและจัดทำดัชนีทุกรายการโดยไม่มีการกรอง กลยุทธ์นี้มักใช้เมื่อคุณมีที่เก็บข้อมูลขนาดเล็กและรับภาระงานเพิ่มเติมจากการเรียกดูทั้งหมดทุกครั้งที่จัดทำดัชนีได้

กลยุทธ์การเรียกใช้นี้เหมาะสำหรับที่เก็บข้อมูลขนาดเล็กที่มีข้อมูลแบบคงที่ซึ่งไม่เป็นลําดับชั้นส่วนใหญ่ นอกจากนี้ คุณยังใช้กลยุทธ์การเรียกดูนี้เมื่อการตรวจหาการเปลี่ยนแปลงทำได้ยากหรือที่เก็บไม่รองรับ

กลยุทธ์การเรียกดูรายการ

กลยุทธ์การเรียกดูรายการจะสแกนทั้งพื้นที่เก็บข้อมูล รวมถึงโหนดย่อยทั้งหมด เพื่อกำหนดสถานะของแต่ละรายการ จากนั้น ตัวเชื่อมต่อจะทำการเรียกใช้ครั้งที่ 2 และจัดทำดัชนีเฉพาะรายการใหม่หรือรายการที่อัปเดตตั้งแต่การจัดทำดัชนีครั้งล่าสุด กลยุทธ์นี้มักใช้เพื่อทำการอัปเดตแบบเพิ่มลงในดัชนีที่มีอยู่ (แทนที่จะต้องท่องไปยังทุกตำแหน่งทุกครั้งที่อัปเดตดัชนี)

กลยุทธ์การเรียกใช้นี้เหมาะสำหรับกรณีที่การตรวจหาการเปลี่ยนแปลงทำได้ยากหรือที่รีโพซิทอรีไม่รองรับ คุณมีข้อมูลที่ไม่เป็นลําดับชั้น และคุณกําลังทํางานกับชุดข้อมูลขนาดใหญ่มาก

การเรียกใช้กราฟ

กลยุทธ์การเรียกดูกราฟจะสแกนโหนดหลักทั้งหมดเพื่อระบุสถานะของแต่ละรายการ จากนั้นเครื่องมือเชื่อมต่อจะทํางานรอบที่ 2 และจัดทําดัชนีเฉพาะรายการในโหนดรูทที่เป็นรายการใหม่หรือได้รับการอัปเดตนับตั้งแต่การจัดทําดัชนีครั้งล่าสุด สุดท้าย ตัวเชื่อมต่อจะส่งรหัสย่อยแล้วจัดทำดัชนีรายการในโหนดย่อยซึ่งเป็นรายการใหม่หรืออัปเดตแล้ว ตัวเชื่อมต่อจะดำเนินการซ้ำๆ ผ่านโหนดย่อยทั้งหมดจนกว่าระบบจะจัดการกับรายการทั้งหมดแล้ว โดยปกติแล้ว การสํารวจดังกล่าวจะใช้กับที่เก็บข้อมูลแบบลําดับชั้นที่การระบุรหัสทั้งหมดไม่เหมาะ

กลยุทธ์นี้เหมาะสำหรับในกรณีที่คุณมีข้อมูลที่จัดลำดับชั้นซึ่งต้องมีการ Crawl เช่น ไดเรกทอรีชุดหนังสือหรือหน้าเว็บ

ใช้กลยุทธ์การเรียกใช้และจัดทำดัชนีรายการ

องค์ประกอบที่จัดทำดัชนีได้ทั้งหมดสำหรับ Cloud Search เรียกว่ารายการใน Cloud Search API รายการอาจเป็นไฟล์ โฟลเดอร์ บรรทัดในไฟล์ CSV หรือระเบียนฐานข้อมูล

เมื่อลงทะเบียนสคีมาแล้ว คุณจะป้อนข้อมูลลงในดัชนีได้โดยทำดังนี้

  1. (ไม่บังคับ) ใช้ items.upload เพื่ออัปโหลดไฟล์ที่มีขนาดใหญ่กว่า 100 KiB สำหรับการจัดทำดัชนี สำหรับไฟล์ขนาดเล็ก ให้ฝังเนื้อหาเป็น inlineContent โดยใช้ items.index

  2. (ไม่บังคับ) ใช้ media.upload เพื่ออัปโหลดไฟล์สื่อสำหรับการจัดทำดัชนี

  3. ใช้ items.index เพื่อจัดทำดัชนีรายการ เช่น หากสคีมาใช้คำจำกัดความของออบเจ็กต์ใน movie schema คำขอจัดทําดัชนีสําหรับรายการเดียวจะมีลักษณะดังนี้

    {
      "name": "datasource/<data_source_id>/items/titanic",
      "acl": {
        "readers": [
          {
            "gsuitePrincipal": {
              "gsuiteDomain": true
            }
          }
        ]
      },
      "metadata": {
        "title": "Titanic",
        "viewUrl": "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"
    }
    
  4. (ไม่บังคับ) ใช้การเรียกitems.getเพื่อยืนยันว่ารายการได้รับการจัดทําดัชนีแล้ว

หากต้องการทําการเรียกดูทั้งหมด คุณต้องจัดทําดัชนีทั้งที่เก็บข้อมูลใหม่เป็นระยะ หากต้องการทําการเรียกดูรายการหรือกราฟ คุณต้องติดตั้งใช้งานโค้ดเพื่อจัดการการเปลี่ยนแปลงที่เก็บ

จัดการการเปลี่ยนแปลงที่เก็บ

คุณสามารถรวบรวมและจัดทำดัชนีรายการแต่ละรายการจากที่เก็บเป็นระยะเพื่อทำการจัดทำดัชนีอย่างเต็มรูปแบบ แม้ว่าการจัดทำดัชนีอย่างเต็มรูปแบบจะมีประสิทธิภาพในการทำให้ดัชนีเป็นปัจจุบันอยู่เสมอ แต่อาจใช้ค่าใช้จ่ายสูงเมื่อจัดการกับที่เก็บขนาดใหญ่หรือแบบลําดับชั้น

คุณสามารถใช้คิวการจัดทําดัชนีของ Google Cloud เป็นกลไกในการติดตามการเปลี่ยนแปลงและจัดทําดัชนีเฉพาะรายการที่มีการเปลี่ยนแปลงแทนการใช้การเรียกดัชนีเพื่อจัดทําดัชนีทั้งพื้นที่เก็บข้อมูลเป็นครั้งคราว คุณสามารถใช้คําขอ items.push เพื่อส่งรายการไปยังคิวสําหรับการสอบถามและการอัปเดตในภายหลัง ดูข้อมูลเพิ่มเติมเกี่ยวกับคิวการจัดทําดัชนีของ Google Cloud ได้ที่คิวการจัดทําดัชนีของ Google Cloud

ดูข้อมูลเพิ่มเติมเกี่ยวกับ Google Cloud Search API ได้ที่Cloud Search API