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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

รูปที่ 1 แสดงขั้นตอนในการจัดทำดัชนีรายการใหม่หรือที่มีการเปลี่ยนแปลงโดยใช้คิวการจัดทำดัชนี ขั้นตอนเหล่านี้แสดงการเรียก API ของ REST สำหรับการเรียก SDK ที่เทียบเท่า โปรดดูการดำเนินการตามคิว (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 ที่เทียบเท่า โปรดดูการดำเนินการในคิว (SDK เครื่องมือเชื่อมต่อ)

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

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

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

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

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

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

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

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

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

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

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

การดำเนินการตามคิว (SDK เครื่องมือเชื่อมต่อ)

SDK เครื่องมือเชื่อมต่อเนื้อหามีการดำเนินการสำหรับการพุชรายการไปยังและดึงรายการจากคิว

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

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

การดำเนินการตามคิว (REST API)

REST API มี 2 วิธีต่อไปนี้สำหรับการพุชรายการและดึงรายการจากคิว

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

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

Items.push

เมธอด Items.push จะเพิ่มรหัสลงในคิว เมธอดนี้สามารถเรียกได้ด้วยค่า type เฉพาะซึ่งเป็นตัวกําหนดผลลัพธ์ของการดำเนินการพุช ดูรายการค่า 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 แทนที่จะระบุ type คุณจะระบุค่าข้อมูลเมตาและ/หรือแฮชเนื้อหาได้ด้วยคำขอพุช คิวการจัดทำดัชนีของ Cloud Search จะเปรียบเทียบค่าแฮชที่ระบุกับค่าที่เก็บไว้ซึ่งมาพร้อมกับรายการในแหล่งข้อมูล หากไม่ตรงกัน ระบบจะทำเครื่องหมายรายการนั้นเป็น MODIFIED หากรายการที่เกี่ยวข้องไม่อยู่ในดัชนี สถานะจะเป็น NEW_ITEM

Items.poll

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

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

  • การจองหมดเวลา
  • รายการจะได้รับการจัดคิวอีกครั้งโดย Items.index
  • Items.push จะถูกเรียกด้วยค่า type เป็น NOT_MODIFIED, REPOSITORY_ERROR หรือ REQUEUE