สร้างและลงทะเบียนสคีมา

สคีมา Google Cloud Search คือโครงสร้าง JSON ที่กำหนดออบเจ็กต์ พร็อพเพอร์ตี้ และตัวเลือกสำหรับการจัดทำดัชนีและการค้นหาข้อมูล โปรแกรมเชื่อมต่อเนื้อหาของคุณ ใช้สคีมาที่ลงทะเบียนเพื่อจัดโครงสร้างและจัดทำดัชนีข้อมูลที่เก็บ

คุณสร้างสคีมาได้โดยระบุออบเจ็กต์สคีมา JSON ให้กับ API คุณต้อง ลงทะเบียนสคีมาสำหรับแต่ละที่เก็บก่อนจัดทำดัชนีข้อมูล

เอกสารนี้ครอบคลุมพื้นฐานการสร้างสคีมา หากต้องการเพิ่มประสิทธิภาพประสบการณ์การค้นหา โปรดดูปรับปรุงคุณภาพการค้นหา

สร้างสคีมา

ทำตามขั้นตอนต่อไปนี้เพื่อสร้างสคีมา Cloud Search

  1. ระบุพฤติกรรมของผู้ใช้ที่คาดหวัง
  2. เริ่มต้นแหล่งข้อมูล
  3. กำหนดออบเจ็กต์
  4. กำหนดพร็อพเพอร์ตี้ออบเจ็กต์
  5. ลงทะเบียนสคีมา
  6. จัดทำดัชนีข้อมูล
  7. ทดสอบสคีมา
  8. ปรับแต่งสคีมา

ระบุพฤติกรรมของผู้ใช้ที่คาดไว้

การคาดการณ์วิธีที่ผู้ใช้ค้นหาจะช่วยกำหนดกลยุทธ์สคีมา สำหรับฐานข้อมูลภาพยนตร์ ผู้ใช้อาจค้นหา "ภาพยนตร์ที่โรเบิร์ต เรดฟอร์ดแสดง" สคีมาของคุณ ต้องรองรับการค้นหาภาพยนตร์ที่มีนักแสดงที่เฉพาะเจาะจง

วิธีปรับสคีมาให้สอดคล้องกับพฤติกรรมของผู้ใช้

  1. ประเมินคำค้นหาที่หลากหลายจากผู้ใช้ที่แตกต่างกัน
  2. ระบุชุดข้อมูลเชิงตรรกะหรือออบเจ็กต์ เช่น "ภาพยนตร์"
  3. ระบุพร็อพเพอร์ตี้ (แอตทริบิวต์) เช่น ชื่อหรือวันที่เผยแพร่
  4. ระบุค่าที่ถูกต้องสำหรับพร็อพเพอร์ตี้ เช่น "ขุมทรัพย์สุดขอบฟ้า"
  5. กำหนดความต้องการในการจัดเรียงและจัดอันดับ เช่น ลำดับตามเวลาหรือการจัดอันดับของผู้ชม
  6. ระบุพร็อพเพอร์ตี้บริบท เช่น บทบาทงาน เพื่อปรับปรุงคำแนะนำในการเติมข้อความอัตโนมัติ
  7. แสดงรายการออบเจ็กต์ พร็อพเพอร์ตี้ และค่าตัวอย่างเหล่านี้ ใช้รายการนี้เพื่อ กำหนดตัวเลือกโอเปอเรเตอร์

เริ่มต้นแหล่งข้อมูล

แหล่งข้อมูลแสดงถึงข้อมูลที่เก็บที่จัดทำดัชนีซึ่งจัดเก็บไว้ใน Google Cloud ดูจัดการแหล่งข้อมูลของบุคคลที่สาม เมื่อผู้ใช้คลิกผลการค้นหา Cloud Search จะนำผู้ใช้ไปยังรายการโดยใช้ URL จากคำขอการจัดทำดัชนี

กำหนดออบเจ็กต์

ออบเจ็กต์คือหน่วยพื้นฐานของสคีมา โครงสร้างเชิงตรรกะ เช่น "ภาพยนตร์" หรือ "บุคคล" คือออบเจ็กต์ ออบเจ็กต์แต่ละรายการมีพร็อพเพอร์ตี้ เช่น ชื่อ ระยะเวลา หรือชื่อ

ภาพการเชื่อมต่อสคีมาระหว่างเอนทิตี
รูปที่ 1 สคีมาตัวอย่างที่มีออบเจ็กต์ 2 รายการและ ออบเจ็กต์ย่อย

สคีมาคือรายการคำจำกัดความออบเจ็กต์ในแท็ก objectDefinitions

{
  "objectDefinitions": [
    { "name": "movie" },
    { "name": "person" }
  ]
}

ใช้ชื่อที่ไม่ซ้ำกันสำหรับแต่ละออบเจ็กต์ เช่น movie บริการสคีมาใช้ชื่อเหล่านี้ เป็นคีย์ ดู ObjectDefinition

กำหนดพร็อพเพอร์ตี้ของออบเจ็กต์

กำหนดพร็อพเพอร์ตี้ เช่น ชื่อและวันที่เผยแพร่ ในส่วน propertyDefinitions ใช้ options สำหรับ freshnessOptions (การจัดอันดับ) และ displayOptions (ป้ายกำกับ UI)

{
  "objectDefinitions": [{
    "name": "movie",
    "propertyDefinitions": [
      {
        "name": "movieTitle",
        "isReturnable": true,
        "textPropertyOptions": {
          "retrievalImportance": { "importance": "HIGHEST" },
          "operatorOptions": { "operatorName": "title" }
        },
        "displayOptions": { "displayLabel": "Title" }
      },
      {
        "name": "releaseDate",
        "isReturnable": true,
        "isSortable": true,
        "datePropertyOptions": {
          "operatorOptions": {
            "operatorName": "released",
            "lessThanOperatorName": "releasedbefore",
            "greaterThanOperatorName": "releasedafter"
          }
        }
      }
    ]
  }]
}

PropertyDefinition ประกอบด้วย

  • สตริง name
  • ตัวเลือกที่ไม่ขึ้นอยู่กับประเภท (เช่น isReturnable)
  • ประเภทและตัวเลือกเฉพาะประเภท (เช่น textPropertyOptions)
  • operatorOptions สำหรับโอเปอเรเตอร์การค้นหา
  • displayOptions สำหรับป้ายกำกับ UI

คุณสามารถนำชื่อพร็อพเพอร์ตี้มาใช้ซ้ำในออบเจ็กต์ต่างๆ ได้ เช่น movieTitle อาจปรากฏในทั้งออบเจ็กต์ movie และผลงานของออบเจ็กต์ person

เพิ่มตัวเลือกที่ไม่ขึ้นอยู่กับประเภท

PropertyDefinition มีตัวเลือกบูลีนเพื่อกำหนดค่าฟังก์ชันการค้นหาสำหรับพร็อพเพอร์ตี้ โดยไม่คำนึงถึงประเภทของพร็อพเพอร์ตี้ ตัวเลือกเหล่านี้มีค่าเริ่มต้นเป็น false และต้องตั้งค่าเป็น true จึงจะใช้งานได้

  • isReturnable: ตั้งค่าเป็น true หากควรแสดงข้อมูลพร็อพเพอร์ตี้ใน ผลการค้นหาโดยใช้ Query API คุณสมบัติที่ส่งคืนไม่ได้สามารถใช้ สำหรับการค้นหาหรือการจัดอันดับโดยไม่ต้องปรากฏในผลลัพธ์
  • isRepeatable: ตั้งค่าเป็น true หากพร็อพเพอร์ตี้มีค่าได้หลายค่า ตัวอย่างเช่น ภาพยนตร์มีวันที่เผยแพร่ 1 วันที่ แต่มีนักแสดงหลายคน
  • isSortable: ตั้งค่าเป็น true หากใช้พร็อพเพอร์ตี้เพื่อจัดเรียงได้ ต้องไม่ใช่ true หาก isRepeatable เป็น true หรือหากพร็อพเพอร์ตี้อยู่ภายใน ออบเจ็กต์ย่อยที่ทำซ้ำได้
  • isFacetable: ตั้งค่าเป็น true หากใช้พร็อพเพอร์ตี้เพื่อสร้างแง่มุม (แอตทริบิวต์ที่ใช้เพื่อปรับแต่งผลการค้นหา) ได้
    • ต้องตั้งค่า isReturnable เป็น true
    • รองรับเฉพาะพร็อพเพอร์ตี้ enum, บูลีน และข้อความ
  • isWildcardSearchable: ตั้งค่าเป็น true เพื่ออนุญาตให้ผู้ใช้ทำการค้นหาไวลด์การ์ด ในพร็อพเพอร์ตี้นี้ ตัวเลือกนี้ใช้ได้เฉพาะในพร็อพเพอร์ตี้ข้อความ และลักษณะการทำงานจะขึ้นอยู่กับการตั้งค่า exactMatchWithOperator ดังนี้
    • หาก exactMatchWithOperator เป็น true ระบบจะถือว่าค่าข้อความเป็นโทเค็นเดียว การค้นหา เช่น science-* จะตรงกับค่า science-fiction
    • หาก exactMatchWithOperator เป็น false ระบบจะทำโทเค็นค่าข้อความ คำค้นหา เช่น sci* หรือ fi* จะตรงกับ science-fiction แต่ science-* จะไม่ตรงกัน

กำหนดประเภท

ตั้งค่าประเภทข้อมูลโดยกำหนดออบเจ็กต์ตัวเลือกพร็อพเพอร์ตี้ที่เหมาะสม (เช่น textPropertyOptions) ใช้การแจงนับ (enumPropertyOptions) หากทราบค่าที่เป็นไปได้ทั้งหมด พร็อพเพอร์ตี้มีได้เพียงประเภทข้อมูลเดียว

กำหนดตัวเลือกโอเปอเรเตอร์

operatorOptions อธิบายวิธีการทำงานของพร็อพเพอร์ตี้เป็นตัวดำเนินการค้นหา

operatorOptions ทุกรายการต้องมี operatorName (เช่น title) ซึ่งเป็นพารามิเตอร์ที่ผู้ใช้พิมพ์ในการค้นหา (เช่น title:titanic) ใช้ชื่อที่ใช้งานง่ายและแสดงต่อผู้ใช้

คุณแชร์ operatorName ในพร็อพเพอร์ตี้ประเภทเดียวกันได้ การค้นหา ที่ใช้ชื่อนั้นจะดึงผลลัพธ์จากพร็อพเพอร์ตี้ที่ตรงกันทั้งหมด

พร็อพเพอร์ตี้ที่จัดเรียงได้อาจรวม lessThanOperatorName และ greaterThanOperatorName สำหรับการค้นหาเปรียบเทียบ พร็อพเพอร์ตี้ข้อความสามารถใช้ exactMatchWithOperator เพื่อถือว่าค่าทั้งหมดเป็นโทเค็นเดียว

เพิ่มตัวเลือกการแสดงผล

ส่วน displayOptions ที่ไม่บังคับมี displayLabel นี่คือป้ายกำกับที่ใช้งานง่ายซึ่งแสดงในผลการค้นหา

เพิ่มตัวดำเนินการกรองคำแนะนำ

ใช้ suggestionFilteringOperators[] เพื่อกำหนดพร็อพเพอร์ตี้ที่กรอง คำแนะนำการเติมข้อความอัตโนมัติ (เช่น กรองคำแนะนำภาพยนตร์ตาม ประเภทที่ผู้ใช้ต้องการ) คุณกำหนดตัวกรองคำแนะนำได้เพียง 1 รายการ

ลงทะเบียนสคีมา

ลงทะเบียนสคีมากับบริการสคีมาโดยใช้รหัสแหล่งข้อมูล ส่งคำขอ UpdateSchema

PUT https://cloudsearch.googleapis.com/v1/indexing/{name=datasources/*}/schema

ใช้ validateOnly: true เพื่อทดสอบสคีมาโดยไม่ต้องลงทะเบียน

จัดทำดัชนีข้อมูล

หลังจากลงทะเบียนแล้ว ให้ป้อนข้อมูลในแหล่งข้อมูลโดยใช้การเรียก Index ซึ่งมักจะใช้กับเครื่องมือเชื่อมต่อ

ตัวอย่างคำขอการจัดทำดัชนี

{
  "name": "datasource/<data_source_id>/items/titanic",
  "metadata": {
    "title": "Titanic",
    "objectType": "movie"
  },
  "structuredData": {
    "object": {
      "properties": [{
        "name": "movieTitle",
        "textValues": { "values": ["Titanic"] }
      }]
    }
  },
  "itemType": "CONTENT_ITEM"
}

ทดสอบสคีมา

ทดสอบกับที่เก็บขนาดเล็กก่อนที่จะใช้งานจริง สร้าง ACL ที่จำกัด ผลลัพธ์ให้เฉพาะผู้ใช้ทดสอบ

  • คำค้นหาทั่วไป: ค้นหาสตริง (เช่น "titanic") เพื่อดูรายการที่ตรงกันทั้งหมด
  • คำค้นหาโอเปอเรเตอร์: ใช้โอเปอเรเตอร์ (เช่น actor:Zane) เพื่อจำกัดผลการค้นหา

ปรับแต่งสคีมา

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

จัดทำดัชนีอีกครั้งหลังจากการเปลี่ยนแปลงสคีมา

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

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

คุณต้องจัดทำดัชนีอีกครั้งสำหรับรายการต่อไปนี้

  • การเพิ่มหรือนำพร็อพเพอร์ตี้หรือออบเจ็กต์ออก
  • การเปลี่ยน isReturnable, isFacetable หรือ isSortable เป็น true
  • การทำเครื่องหมายพร็อพเพอร์ตี้ isSuggestable

การเปลี่ยนแปลงพร็อพเพอร์ตี้ที่ไม่ได้รับอนุญาต

เราไม่อนุญาตให้ทำการเปลี่ยนแปลงที่ทำให้ดัชนีเสียหายหรือทำให้ผลลัพธ์ไม่สอดคล้องกัน ซึ่งรวมถึงการเปลี่ยนแปลงต่อไปนี้

  • ประเภทข้อมูลหรือชื่อพร็อพเพอร์ตี้
  • exactMatchWithOperatorหรือretrievalImportance

ทำการเปลี่ยนแปลงสคีมาที่ซับซ้อน

หากต้องการทำการเปลี่ยนแปลงที่ไม่ได้รับอนุญาต ให้ย้ายข้อมูลพร็อพเพอร์ตี้จากคำจำกัดความเก่าไปยังคำจำกัดความใหม่โดยทำดังนี้

  1. เพิ่มพร็อพเพอร์ตี้ใหม่ที่มีชื่ออื่นลงในสคีมา
  2. ลงทะเบียนสคีมาด้วยพร็อพเพอร์ตี้ทั้งใหม่และเก่า
  3. เติมดัชนีโดยใช้พร็อพเพอร์ตี้ใหม่เท่านั้น
  4. ลบพร็อพเพอร์ตี้เก่าออกจากสคีมา
  5. อัปเดตรหัสการค้นหาเพื่อใช้ชื่อพร็อพเพอร์ตี้ใหม่

Cloud Search จะบันทึกรายการที่ลบไปแล้วเป็นเวลา 30 วันเพื่อป้องกันปัญหาการนำกลับมาใช้ซ้ำ

ข้อจำกัดด้านขนาด

  • ออบเจ็กต์ระดับบนสุดสูงสุด 10 รายการ
  • ความลึกสูงสุด 10 ระดับ
  • ฟิลด์สูงสุด 1,000 รายการต่อออบเจ็กต์ (รวมฟิลด์ที่ซ้อนกัน)

ขั้นตอนถัดไป

  1. สร้างอินเทอร์เฟซการค้นหา
  2. ปรับปรุงคุณภาพการค้นหา
  3. จัดโครงสร้างสคีมาเพื่อให้ตีความคําค้นหาได้ดีที่สุด
  4. กำหนดคำพ้องความหมาย