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

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

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

  • ดูแลรายการรายการที่จะจัดทำดัชนีตามที่พบในระหว่างกระบวนการ การข้าม

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

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

คิวคือป้ายกำกับที่กำหนดให้กับรายการที่จัดทำดัชนี เช่น "ค่าเริ่มต้น" สำหรับคิวเริ่มต้น หรือ "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 เพื่อส่งรายการ (ข้อมูลเมตาและแฮช) ไปยังคิวการจัดทำดัชนี "คิว 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. ในการ Crawl แบบเต็มครั้งต่อๆ ไป ระบบจะสลับคิวที่ใช้สำหรับการจัดทำดัชนี และคิวที่ใช้สำหรับการลบ

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

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

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

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

การดำเนินการคิว (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