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

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

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

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

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

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

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

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

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

กลยุทธ์ Full-traversal ใช้กระบวนการ 2 คิวเพื่อจัดทำดัชนีรายการและตรวจหาการลบ รูปที่ 2 แสดงขั้นตอนการลบรายการโดยใช้คิวการจัดทำดัชนี 2 คิว โดยเฉพาะอย่างยิ่ง รูปที่ 2 แสดงให้เห็นการส่งผ่านรายการที่สอง โดยใช้กลยุทธ์การข้ามผ่านเต็มรูปแบบ ขั้นตอนเหล่านี้ใช้การเรียก API ของ REST สำหรับการเรียก 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. ในการข้ามผ่านแบบเต็มรายการที่สอง เครื่องมือเชื่อมต่อเนื้อหาจะใช้ 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 ของเครื่องมือเชื่อมต่อ)

Content Connector SDK จะดำเนินการต่างๆ สำหรับการพุชรายการไปยังและดึงรายการจากคิว

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

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