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

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

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

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

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

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

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

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

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 และดัชนีเท่านั้น รายการในโหนดรากเป็นรายการใหม่หรือได้รับการอัปเดตแล้วตั้งแต่การจัดทำดัชนีครั้งล่าสุด สุดท้าย เครื่องมือเชื่อมต่อจะส่งรหัสย่อยแล้วจัดทำดัชนีรายการในโหนดย่อย ใหม่หรือได้รับการอัปเดตแล้ว ตัวเชื่อมจะค่อยๆ สิ้นสุดไปเรื่อยๆ ผ่าน โหนดย่อยทั้งหมดจนกว่าจะจัดการได้ครบทั้งหมด โดยปกติการส่งผ่านดังกล่าว ใช้สำหรับที่เก็บแบบลำดับชั้นที่ไม่ได้แสดงรายการรหัสทั้งหมด ใช้ได้จริง

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

แต่ละกลยุทธ์การข้ามผ่านเหล่านี้จะใช้โดยเครื่องมือเชื่อมต่อเทมเพลต ใน 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() วิธี เมธอดนี้จะถูกเรียกครั้งเดียวสำหรับการส่งผ่านตามกำหนดการแต่ละรายการ (ตามที่กำหนดโดยการกำหนดค่าของคุณ)

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

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

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

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

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

คลาส Configuration มีวิธีรับข้อมูลประเภทต่างๆ หลายวิธี จากการกำหนดค่า แต่ละวิธีจะแสดงผลออบเจ็กต์ ConfigValue จากนั้น คุณจะ ใช้ออบเจ็กต์ ConfigValue get() เพื่อดึงค่าจริงขึ้นมา ข้อมูลโค้ดต่อไปนี้จาก 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() ส่งคืน โปรดทราบว่า 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 อาจเป็นเรื่องยาก หากต้องการข้อมูลเพิ่มเติมเกี่ยวกับ Google ACL ของ 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 ใช้สำหรับเก็บรหัสและแฮชที่ไม่บังคับ สำหรับแต่ละรายการในที่เก็บ การพุชเครื่องมือเชื่อมต่อการข้ามผ่านรายการ รหัสรายการไปยังคิวการจัดทำดัชนีของ 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() วิธี เมธอดนี้จะถูกเรียกครั้งเดียวสำหรับส่วนเพิ่มที่ตั้งเวลาไว้แต่ละรายการ การส่งผ่าน (ตามที่กำหนดโดยการกำหนดค่าของคุณ) เพื่อเรียกรายการที่แก้ไขและ จัดทำดัชนี

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

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

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

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

คลาส Configuration มีวิธีรับข้อมูลประเภทต่างๆ หลายวิธี จากการกำหนดค่า แต่ละวิธีจะแสดงผลออบเจ็กต์ ConfigValue จากนั้น คุณจะ ใช้ออบเจ็กต์ ConfigValue get() เพื่อดึงค่าจริงขึ้นมา ข้อมูลโค้ดต่อไปนี้จาก 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() เพื่อดึงข้อมูลรหัสสินค้าและค่าแฮชเนื้อหาที่เชื่อมโยงจาก ที่เก็บได้ จากนั้นระบบจะรวมคู่รหัสและค่าแฮชไว้ในการดำเนินการพุช คำขอไปยังคิวการจัดทำดัชนีของ 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 เพื่อรวมรหัสและค่าแฮชไว้ในการพุชเพียงครั้งเดียว 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 อาจเป็นเรื่องยาก หากต้องการข้อมูลเพิ่มเติมเกี่ยวกับ Google ACL ของ 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() วิธี เมธอดนี้จะถูกเรียกครั้งเดียวสำหรับส่วนเพิ่มที่ตั้งเวลาไว้แต่ละรายการ การส่งผ่าน (ตามที่กำหนดโดยการกำหนดค่าของคุณ) เพื่อเรียกรายการที่แก้ไขและ จัดทำดัชนี

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

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

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

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

คลาส Configuration มีวิธีรับข้อมูลประเภทต่างๆ หลายวิธี จากการกำหนดค่า แต่ละวิธีจะแสดงผลออบเจ็กต์ ConfigValue จากนั้น คุณจะ ใช้ออบเจ็กต์ ConfigValue get() เพื่อดึงค่าจริงขึ้นมา ข้อมูลโค้ดต่อไปนี้จาก 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() เพื่อดึงข้อมูลรหัสสินค้าและค่าแฮชเนื้อหาที่เชื่อมโยงจาก ที่เก็บได้ จากนั้นระบบจะรวมคู่รหัสและค่าแฮชไว้ในการดำเนินการพุช คำขอไปยังคิวการจัดทำดัชนีของ Cloud Search โดยปกติรหัสรูทหรือรหัสระดับบนสุด พุชก่อนตามด้วยรหัสย่อยจนกว่าจะได้รายการทั้งลำดับชั้น ประมวลผลแล้ว

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

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

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

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

ข้อมูลโค้ดต่อไปนี้จะแสดงวิธีใช้ PushItems.Builder เพื่อรวมรหัสและค่าแฮชไว้ในการพุชเพียงครั้งเดียว 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 อาจเป็นเรื่องยาก หากต้องการข้อมูลเพิ่มเติมเกี่ยวกับ Google ACL ของ 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 และดัชนีเท่านั้น รายการในโหนดรากเป็นรายการใหม่หรือได้รับการอัปเดตแล้วตั้งแต่การจัดทำดัชนีครั้งล่าสุด สุดท้าย เครื่องมือเชื่อมต่อจะส่งรหัสย่อยแล้วจัดทำดัชนีรายการในโหนดย่อย ใหม่หรือได้รับการอัปเดตแล้ว ตัวเชื่อมจะค่อยๆ สิ้นสุดไปเรื่อยๆ ผ่าน โหนดย่อยทั้งหมดจนกว่าจะจัดการได้ครบทั้งหมด โดยปกติการส่งผ่านดังกล่าว ใช้สำหรับที่เก็บแบบลำดับชั้นที่ไม่ได้แสดงรายการรหัสทั้งหมด ใช้ได้จริง

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

ใช้กลยุทธ์การส่งผ่านและรายการดัชนี

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

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

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

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

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

    {
      "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