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