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

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

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

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

สร้างสคีมา

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

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

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

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

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

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

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

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

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

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

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

สคีมา คือรายการคำจำกัดความของ ออบเจ็กต์ในแท็ก 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 หากใช้พร็อพเพอร์ตี้สำหรับการสร้าง Facet (แอตทริบิวต์ที่ใช้เพื่อปรับแต่งผลการค้นหา) ได้
    • ต้องตั้งค่า isReturnable เป็น true
    • รองรับเฉพาะพร็อพเพอร์ตี้ enum, บูลีน และข้อความ
  • isWildcardSearchable: ตั้งค่าเป็น true เพื่ออนุญาตให้ผู้ใช้ทำการค้นหาแบบ Wildcard ในพร็อพเพอร์ตี้นี้ ตัวเลือกนี้ใช้ได้กับพร็อพเพอร์ตี้ข้อความเท่านั้น และลักษณะการทำงานจะขึ้นอยู่กับการตั้งค่า exactMatchWithOperator ดังนี้
    • หาก exactMatchWithOperator เป็น true ระบบจะถือว่าค่าข้อความเป็นโทเค็นเดียว การค้นหา เช่น science-* จะตรงกับค่า science-fiction
    • หาก exactMatchWithOperator เป็น false ระบบจะแยกค่าข้อความเป็นโทเค็น การค้นหา เช่น sci* หรือ fi* จะตรงกับ science-fiction แต่ science-* จะไม่ตรง

กำหนดประเภท

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

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

operatorOptions อธิบายวิธีที่พร็อพเพอร์ตี้ทำหน้าที่เป็นโอเปอเรเตอร์การค้นหา

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

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

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

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

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

เพิ่มโอเปอเรเตอร์การกรองคำแนะนำ

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

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

ลงทะเบียนสคีมากับบริการสคีมาโดยใช้รหัสแหล่งข้อมูล ส่งคำขอ 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. กำหนดคำพ้องความหมาย