คิวการจัดทำดัชนีของ Google Cloud Search

Connector SDK และ Google Cloud Search API อนุญาตให้สร้างคิวการจัดทําดัชนีของ Cloud Search ที่ใช้ทํางานต่อไปนี้

  • รักษาสถานะต่อเอกสาร (สถานะ ค่าแฮช และอื่นๆ) ซึ่งสามารถใช้เพื่อซิงค์ดัชนีกับที่เก็บข้อมูล

  • ดูแลรักษารายการที่จะจัดทำดัชนีตามที่ค้นพบระหว่างกระบวนการท่องเว็บ

  • จัดลําดับความสําคัญของรายการในคิวตามสถานะของรายการ

  • ดูแลรักษาข้อมูลเพิ่มเติมเกี่ยวกับสถานะเพื่อการผสานรวมที่มีประสิทธิภาพ เช่น ตรวจสอบจุดต่างๆ เปลี่ยนโทเค็น และอื่นๆ

คิวคือป้ายกำกับที่กำหนดให้กับรายการที่จัดทําดัชนี เช่น "default" สําหรับคิวเริ่มต้น หรือ "B" สําหรับคิว B

สถานะและลําดับความสําคัญ

ลำดับความสำคัญของเอกสารในคิวจะอิงตามโค้ดของเอกสารนั้นๆ ItemStatus รหัสที่เป็นไปได้เรียงตามลําดับความสําคัญ (จัดการก่อนจัดการทีหลัง) มีดังนี้ ItemStatus

  • ERROR - รายการพบข้อผิดพลาดแบบไม่พร้อมกันระหว่างกระบวนการจัดทำดัชนีและต้องได้รับการจัดทำดัชนีอีกครั้ง

  • MODIFIED - รายการที่จัดทําดัชนีไว้ก่อนหน้านี้และได้รับการแก้ไขในที่เก็บตั้งแต่การจัดทำดัชนีครั้งล่าสุด

  • NEW_ITEM - รายการที่ไม่ได้จัดทำดัชนี

  • ACCEPTED - เอกสารที่ได้รับการจัดทําดัชนีก่อนหน้านี้และไม่มีการเปลี่ยนแปลงในที่เก็บตั้งแต่การจัดทําดัชนีครั้งล่าสุด

เมื่อรายการ 2 รายการในคิวมีสถานะเดียวกัน ระบบจะให้ลำดับความสำคัญสูงกว่ากับรายการที่อยู่ในคิวนานที่สุด

ภาพรวมของการใช้คิวการจัดทําดัชนีเพื่อจัดทําดัชนีรายการใหม่หรือรายการที่มีการเปลี่ยนแปลง

รูปที่ 1 แสดงขั้นตอนการจัดทำดัชนีรายการใหม่หรือรายการที่มีการเปลี่ยนแปลงโดยใช้คิวการจัดทําดัชนี ขั้นตอนเหล่านี้แสดงการเรียก REST API สําหรับการเรียก SDK ที่เทียบเท่า โปรดดูหัวข้อการดำเนินการกับคิว (Connector SDK)

ภาพรวมของการจัดทำดัชนี Google Cloud Search
รูปที่ 1 ขั้นตอนการจัดทำดัชนีเพื่อเพิ่มหรืออัปเดตรายการ
  1. ตัวเชื่อมต่อเนื้อหาใช้ items.push เพื่อส่งรายการ (ข้อมูลเมตาและแฮช) ไปยังคิวการจัดทําดัชนีเพื่อสร้างสถานะของรายการ (MODIFIED, NEW_ITEM, DELETED) โดยเฉพาะอย่างยิ่ง

    • เมื่อมีการพุช ตัวเชื่อมต่อจะมีพุชอย่างชัดเจน type หรือ contentHash
    • หากเครื่องมือเชื่อมต่อไม่มี type อยู่ด้วย Cloud Search จะใช้ contentHash โดยอัตโนมัติเพื่อระบุสถานะของรายการ
    • หากระบบไม่รู้จักรายการ ระบบจะตั้งค่าสถานะรายการเป็น NEW_ITEM
    • หากรายการมีอยู่แล้วและค่าแฮชตรงกัน ระบบจะคงสถานะเป็น ACCEPTED
    • หากรายการมีอยู่แล้วและแฮชแตกต่างกัน สถานะจะเปลี่ยนเป็น MODIFIED

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

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

  2. ตัวเชื่อมต่อเนื้อหาใช้ items.poll เพื่อสำรวจคิวเพื่อระบุรายการที่จะจัดทำดัชนี Cloud Search จะบอกให้ตัวเชื่อมต่อทราบว่ารายการใดจำเป็นต้องได้รับการจัดทำดัชนีมากที่สุด โดยจัดเรียงตามรหัสสถานะก่อน แล้วจัดเรียงตามเวลาที่อยู่ในคิว

  3. เครื่องมือเชื่อมต่อจะดึงข้อมูลรายการเหล่านี้จากที่เก็บและสร้างคำขอ API ของดัชนี

  4. เครื่องมือเชื่อมต่อใช้ items.index เพื่อจัดทำดัชนีรายการ รายการจะเข้าสู่สถานะ ACCEPTED หลังจากที่ Cloud Search ประมวลผลรายการดังกล่าวเสร็จสมบูรณ์เท่านั้น

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

ภาพรวมของการใช้คิวการจัดทําดัชนีเพื่อลบรายการ

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

ภาพรวมของการจัดทำดัชนี Google Cloud Search
รูปที่ 2 การลบรายการ
  1. ในการเรียกดูครั้งแรก ตัวเชื่อมต่อเนื้อหาจะใช้ items.push เพื่อส่งรายการ (ข้อมูลเมตาและแฮช) ไปยังคิวการจัดทําดัชนี "คิว ก" ดังNEW_ITEMที่ยังไม่มีรายการดังกล่าวในคิว แต่ละรายการจะได้รับป้ายกำกับ "A" สำหรับ "คิว A" ระบบจะจัดทำดัชนีเนื้อหาใน Cloud Search

  2. ตัวเชื่อมต่อเนื้อหาใช้ items.poll เพื่อสำรวจคิว A เพื่อระบุรายการที่จะจัดทำดัชนี Cloud Search จะบอกให้ตัวเชื่อมต่อทราบว่ารายการใดจำเป็นต้องได้รับการจัดทำดัชนีมากที่สุด โดยจัดเรียงตามรหัสสถานะก่อน แล้วจัดเรียงตามเวลาที่อยู่ในคิว

  3. เครื่องมือเชื่อมต่อจะดึงข้อมูลรายการเหล่านี้จากที่เก็บและสร้างคำขอ API ของดัชนี

  4. เครื่องมือเชื่อมต่อใช้ items.index เพื่อจัดทำดัชนีรายการ รายการจะเข้าสู่สถานะ ACCEPTED หลังจากที่ Cloud Search ประมวลผลรายการดังกล่าวเสร็จสมบูรณ์เท่านั้น

  5. ระบบเรียกใช้เมธอด deleteQueueItems ใน "คิว ข." แต่ยังไม่มีการส่งรายการไปยังคิว ข. จึงลบรายการไม่ได้

  6. ในการเรียกดูทั้งหมดครั้งที่ 2 เครื่องมือเชื่อมต่อเนื้อหาจะใช้ items.push เพื่อส่งรายการ (ข้อมูลเมตาและแฮช) ไปยังคิว B ดังนี้

    • เมื่อมีการพุช ตัวเชื่อมต่อจะมีtype หรือ contentHash อย่างชัดเจน
    • หากเครื่องมือเชื่อมต่อไม่มี type อยู่ด้วย Cloud Search จะใช้ contentHash โดยอัตโนมัติเพื่อระบุสถานะของรายการ
    • หากไม่รู้จักรายการ ระบบจะตั้งค่าสถานะรายการเป็น NEW_ITEM และเปลี่ยนป้ายกำกับคิวเป็น "ข."
    • หากรายการมีอยู่แล้วและค่าแฮชตรงกัน ระบบจะคงสถานะเป็น ACCEPTED และเปลี่ยนป้ายกำกับคิวเป็น "ข."
    • หากรายการมีอยู่แล้วและแฮชแตกต่างกัน สถานะจะเปลี่ยนเป็น MODIFIED และเปลี่ยนป้ายกำกับคิวเป็น "ข."
  7. ตัวเชื่อมต่อเนื้อหาใช้ items.poll เพื่อสำรวจคิวเพื่อระบุรายการที่จะจัดทำดัชนี Cloud Search จะบอกให้ตัวเชื่อมต่อทราบว่ารายการใดจำเป็นต้องได้รับการจัดทำดัชนีมากที่สุด โดยจัดเรียงตามรหัสสถานะก่อน แล้วจัดเรียงตามเวลาที่อยู่ในคิว

  8. เครื่องมือเชื่อมต่อจะดึงข้อมูลรายการเหล่านี้จากที่เก็บและสร้างคำขอ API ของดัชนี

  9. เครื่องมือเชื่อมต่อใช้ items.index เพื่อจัดทำดัชนีรายการ รายการจะเข้าสู่สถานะ ACCEPTED หลังจากที่ Cloud Search ประมวลผลรายการดังกล่าวเสร็จสมบูรณ์เท่านั้น

  10. สุดท้าย ระบบจะเรียกใช้ deleteQueueItems ในคิว A เพื่อลบรายการ CCloud Search ทั้งหมดที่จัดทําดัชนีไว้ก่อนหน้านี้ซึ่งยังคงมีป้ายกํากับคิว "A"

  11. เมื่อทำการสแกนทั้งหมดครั้งถัดไป ระบบจะสลับคิวที่ใช้สำหรับการจัดทําดัชนีกับคิวที่ใช้สําหรับการลบ

การดำเนินการกับคิว (Connector SDK)

Content Connector SDK มีการดำเนินการสำหรับส่งรายการไปยังและดึงรายการออกจากคิว

หากต้องการแพ็กและพุชรายการไปยังคิว ให้ใช้คลาสpushItems บิลเดอร์

คุณไม่จำเป็นต้องดำเนินการใดๆ เป็นพิเศษเพื่อดึงรายการออกจากคิวเพื่อประมวลผล แต่ SDK จะดึงรายการจากคิวโดยอัตโนมัติตามลําดับความสําคัญ โดยใช้เมธอด getDoc ของคลาส Repository

การดำเนินการกับคิว (REST API)

REST API มี 2 วิธีในการส่งรายการไปยังและดึงรายการออกจากคิว ดังนี้

  • หากต้องการส่งรายการไปยังคิว ให้ใช้ Items.push
  • หากต้องการสำรวจรายการในคิว ให้ใช้ Items.poll

นอกจากนี้ คุณยังใช้ Items.index เพื่อส่งรายการไปยังคิวระหว่างการจัดทำดัชนีได้ด้วย รายการที่ส่งไปยังคิวระหว่างการจัดทําดัชนีไม่จําเป็นต้องระบุtype และระบบจะกําหนดสถานะเป็นACCEPTEDโดยอัตโนมัติ

Items.push

วิธีการ Items.push จะเพิ่มรหัสลงในคิว เรียกใช้เมธอดนี้ได้โดยใช้ค่า type ที่เฉพาะเจาะจง ซึ่งจะเป็นตัวกำหนดผลลัพธ์ของการดำเนินการ Push ดูรายการค่า type ได้ที่ช่อง item.type ในเมธอด Items.push

การพุชรหัสใหม่จะเพิ่มรายการใหม่ที่มีรหัส NEW_ITEM ItemStatus

ระบบจะจัดเก็บเพย์โหลดที่ไม่บังคับไว้เสมอ โดยถือว่าเป็นค่าแบบทึบแสงและแสดงผลจาก Items.poll

เมื่อมีการสำรวจรายการ ระบบจะจองรายการนั้นไว้ ซึ่งหมายความว่าการเรียกใช้Items.pollอีกครั้งจะแสดงรายการนั้นไม่ได้ การใช้ Items.push กับ type เป็น NOT_MODIFIED, REPOSITORY_ERROR หรือ REQUEUE จะยกเลิกการจองรายการที่โพล ดูข้อมูลเพิ่มเติมเกี่ยวกับรายการที่สงวนไว้และไม่ได้สงวนไว้ได้ในส่วน Items.poll

Items.push ที่มีแฮช

Google Cloud Search API รองรับการระบุค่าแฮชข้อมูลเมตาและเนื้อหาในคำขอItems.index คุณสามารถระบุข้อมูลเมตาและ/หรือค่าแฮชของเนื้อหาด้วยคําขอ Push แทนการระบุ type คิวการจัดทําดัชนีของ Cloud Search จะเปรียบเทียบค่าแฮชที่ระบุกับค่าที่จัดเก็บไว้ซึ่งพร้อมใช้งานกับรายการในแหล่งข้อมูล หากไม่ตรงกัน ระบบจะทำเครื่องหมายรายการนั้นว่า MODIFIED หากไม่มีรายการที่เกี่ยวข้องในดัชนี สถานะจะเป็น NEW_ITEM

Items.poll

เมธอด Items.poll จะดึงข้อมูลรายการที่มีลําดับความสําคัญสูงสุดออกจากคิว ค่าสถานะที่ขอและที่แสดงจะระบุสถานะของคิวที่มีลําดับความสําคัญที่ขอหรือสถานะของรหัสที่แสดง

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

  • การจองหมดเวลา
  • Items.index จัดคิวรายการอีกครั้ง
  • Items.push เรียกใช้ด้วยค่า type NOT_MODIFIED, REPOSITORY_ERROR หรือ REQUEUE