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

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

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

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

สร้างสคีมา

ต่อไปนี้คือรายการขั้นตอนที่ใช้ในการสร้างสคีมา Cloud Search

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

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

การคาดการณ์ประเภทของคำค้นหาที่ผู้ใช้สร้างจะช่วยกำหนดกลยุทธ์ในการสร้างสคีมา

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

หากต้องการกำหนดสคีมาให้แสดงถึงรูปแบบพฤติกรรมของผู้ใช้ ให้พิจารณาดำเนินการต่อไปนี้

  1. ประเมินชุดคำค้นหาที่ต้องการหลากหลายจากผู้ใช้ที่แตกต่างกัน
  2. ระบุออบเจ็กต์ที่อาจใช้ในการค้นหา ออบเจ็กต์คือชุดข้อมูลที่เกี่ยวข้องเชิงตรรกะ เช่น ภาพยนตร์ในฐานข้อมูลของภาพยนตร์
  3. ระบุพร็อพเพอร์ตี้และค่าที่ประกอบขึ้นเป็นออบเจ็กต์และอาจใช้ในการค้นหา พร็อพเพอร์ตี้คือแอตทริบิวต์ที่จัดทำดัชนีของออบเจ็กต์ได้ โดยอาจมีค่าพื้นฐานหรือออบเจ็กต์อื่นๆ เช่น ออบเจ็กต์ภาพยนตร์อาจมีพร็อพเพอร์ตี้ เช่น ชื่อภาพยนตร์และวันที่ฉายเป็นค่าพื้นฐาน ออบเจ็กต์ภาพยนตร์อาจมีออบเจ็กต์อื่นๆ เช่น นักแสดง ที่มีพร็อพเพอร์ตี้ของตนเอง เช่น ชื่อหรือบทบาท
  4. ระบุตัวอย่างค่าที่ถูกต้องสำหรับพร็อพเพอร์ตี้ ค่าคือข้อมูลจริงที่ได้รับการจัดทำดัชนีสำหรับพร็อพเพอร์ตี้ ตัวอย่างเช่น ชื่อภาพยนตร์เรื่องหนึ่งในฐานข้อมูลของคุณอาจมีชื่อว่า "Raiders of the Lost Ark"
  5. กำหนดตัวเลือกการจัดเรียงและการจัดลำดับที่ต้องการโดยผู้ใช้ ตัวอย่างเช่น เมื่อค้นหาภาพยนตร์ ผู้ใช้อาจต้องการจัดเรียงตามลำดับเวลาและจัดอันดับตามการให้คะแนนผู้ชม และไม่จำเป็นต้องจัดเรียงตามตัวอักษรของชื่อ
  6. (ไม่บังคับ) พิจารณาว่าพร็อพเพอร์ตี้รายการใดรายการหนึ่งของคุณแสดงถึงบริบทที่เฉพาะเจาะจงมากขึ้นซึ่งระบบอาจดำเนินการค้นหาหรือไม่ เช่น บทบาทหรือแผนกงานของผู้ใช้ เพื่อให้ระบบแสดงคำแนะนำที่เติมข้อความอัตโนมัติได้โดยอิงตามบริบท ตัวอย่างเช่น สำหรับผู้ใช้ที่ค้นหาฐานข้อมูลภาพยนตร์ ผู้ใช้อาจสนใจเฉพาะภาพยนตร์บางประเภท ผู้ใช้จะกำหนดประเภทที่ต้องการให้แสดงการค้นหา ซึ่งอาจเป็นส่วนหนึ่งของโปรไฟล์ผู้ใช้ของตน จากนั้น เมื่อผู้ใช้เริ่มพิมพ์ข้อความค้นหาภาพยนตร์ ระบบจะแนะนำเฉพาะภาพยนตร์ในประเภทที่ต้องการ เช่น "ภาพยนตร์แอ็กชัน" โดยเป็นส่วนหนึ่งของคำแนะนำในการเติมข้อความอัตโนมัติ
  7. สร้างรายการออบเจ็กต์ พร็อพเพอร์ตี้ และค่าตัวอย่างเหล่านี้ที่ใช้ในการค้นหาได้ (โปรดดูรายละเอียดเกี่ยวกับวิธีใช้รายการนี้ได้ที่ส่วนกำหนดตัวเลือกโอเปอเรเตอร์)

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

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

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

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

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

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

รูปที่ 1 แสดงออบเจ็กต์ภาพยนตร์และบุคคล รวมถึงพร็อพเพอร์ตี้ที่เกี่ยวข้อง

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

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

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

เมื่อกำหนดออบเจ็กต์สคีมา คุณต้องระบุ name สำหรับออบเจ็กต์ที่ต้องไม่ซ้ำกับออบเจ็กต์อื่นๆ ทั้งหมดในสคีมา โดยปกติแล้วคุณจะใช้ค่า name ที่อธิบายออบเจ็กต์ เช่น movie สำหรับออบเจ็กต์ภาพยนตร์ บริการสคีมาใช้ช่อง name เป็นตัวระบุคีย์สำหรับออบเจ็กต์ที่จัดทำดัชนีได้ สำหรับข้อมูลเพิ่มเติมเกี่ยวกับช่อง name โปรดดูคำจำกัดความของออบเจ็กต์

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

ตามที่ระบุไว้ในการอ้างอิงสำหรับ ObjectDefinition ชื่อออบเจ็กต์ตามด้วยชุด options และรายการ propertyDefinitions โดย options อาจประกอบด้วย freshnessOptions และ displayOptions freshnessOptions ใช้เพื่อปรับการจัดอันดับการค้นหาตามความใหม่ของสินค้า displayOptions ใช้เพื่อกำหนดว่าป้ายกำกับและพร็อพเพอร์ตี้เฉพาะจะปรากฏในผลการค้นหาออบเจ็กต์หรือไม่

ส่วน propertyDefinitions คือจุดที่คุณกำหนดพร็อพเพอร์ตี้สำหรับออบเจ็กต์ เช่น ชื่อภาพยนตร์และวันที่วางจำหน่าย

ข้อมูลโค้ดต่อไปนี้แสดงออบเจ็กต์ movie ที่มีพร็อพเพอร์ตี้ 2 รายการ ได้แก่ movieTitle และ releaseDate

{
  "objectDefinitions": [
    {
      "name": "movie",
      "propertyDefinitions": [
        {
          "name": "movieTitle",
          "isReturnable": true,
          "isWildcardSearchable": 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"
            }
          },
          "displayOptions": {
            "displayLabel": "Release date"
          }
      ...
      ]
    }
  ]
}

PropertyDefinition ประกอบด้วยรายการต่อไปนี้

  • สตริง name
  • รายการตัวเลือกที่ไม่ขึ้นอยู่กับประเภท เช่น isReturnable ในข้อมูลโค้ดก่อนหน้า
  • ประเภทและตัวเลือกเฉพาะประเภทที่เกี่ยวข้อง เช่น textPropertyOptions และ retrievalImportance ในข้อมูลโค้ดก่อนหน้า
  • operatorOptions ที่อธิบายวิธีใช้พร็อพเพอร์ตี้เป็นโอเปอเรเตอร์การค้นหา
  • displayOptions อย่างน้อย 1 รายการ เช่น displayLabel ในข้อมูลโค้ดก่อนหน้า

name ของพร็อพเพอร์ตี้ต้องไม่ซ้ำกันภายในออบเจ็กต์ที่มี แต่จะใช้ชื่อเดียวกันในออบเจ็กต์และออบเจ็กต์ย่อยอื่นๆ ได้ ในรูปที่ 1 ชื่อภาพยนตร์และวันที่เผยแพร่ได้กำหนดไว้ 2 ครั้ง คือ 1 ครั้งในออบเจ็กต์ movie และอีกครั้งในออบเจ็กต์ย่อย filmography ของออบเจ็กต์ person สคีมานี้ใช้ช่อง movieTitle ซ้ำเพื่อให้สคีมารองรับพฤติกรรมการค้นหา 2 ประเภทดังนี้

  • แสดงผลการค้นหาภาพยนตร์เมื่อผู้ใช้ค้นหาชื่อภาพยนตร์
  • แสดงผลการค้นหาบุคคลเมื่อผู้ใช้ค้นหาชื่อภาพยนตร์ที่นักแสดงเล่น

ในทำนองเดียวกัน สคีมาจะนำช่อง releaseDate มาใช้ซ้ำเนื่องจากมีความหมายเหมือนกันสำหรับช่อง movieTitle ทั้ง 2 ช่อง

ในการพัฒนาสคีมาของคุณเอง ให้พิจารณาวิธีที่ที่เก็บอาจมีช่องที่เกี่ยวข้องซึ่งมีข้อมูลที่คุณต้องการประกาศมากกว่า 1 ครั้งในสคีมา

เพิ่มตัวเลือกประเภทที่เข้าใจได้

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

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

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

ตารางต่อไปนี้แสดงพารามิเตอร์บูลีนที่ตั้งค่าเป็น true สำหรับพร็อพเพอร์ตี้ทั้งหมดของออบเจ็กต์ movie

พร็อพเพอร์ตี้ isReturnable isRepeatable isSortable isFacetable isWildcardSearchable
movieTitle จริง จริง
releaseDate จริง จริง
genre จริง จริง จริง
duration จริง
actorName จริง จริง จริง จริง
userRating จริง จริง
mpaaRating จริง จริง

ทั้ง genre และ actorName ตั้งค่า isRepeatable เป็น true เนื่องจากภาพยนตร์อาจอยู่ในประเภทมากกว่า 1 ประเภทและมักจะมีนักแสดงมากกว่า 1 คน พร็อพเพอร์ตี้ไม่สามารถจัดเรียงได้ หากพร็อพเพอร์ตี้เป็นแบบใช้ซ้ำได้หรืออยู่ในออบเจ็กต์ย่อยที่ทำซ้ำได้

กำหนดประเภท

ส่วนข้อมูลอ้างอิง PropertyDefinition จะแสดง xxPropertyOptions หลายรายการ โดยที่ xx เป็นประเภทที่เฉพาะเจาะจง เช่น boolean หากต้องการตั้งค่าประเภทข้อมูลของพร็อพเพอร์ตี้ คุณต้องกำหนดออบเจ็กต์ประเภทข้อมูลที่เหมาะสม การกำหนดออบเจ็กต์ประเภทข้อมูลสำหรับพร็อพเพอร์ตี้จะสร้างประเภทข้อมูลของพร็อพเพอร์ตี้นั้น ตัวอย่างเช่น การกำหนด textPropertyOptions สำหรับพร็อพเพอร์ตี้ movieTitle จะระบุว่าชื่อภาพยนตร์เป็นข้อความประเภท ข้อมูลโค้ดต่อไปนี้แสดงพร็อพเพอร์ตี้ movieTitle ที่มีการตั้งค่าประเภทข้อมูล textPropertyOptions

{
  "name": "movieTitle",
  "isReturnable": true,
  "isWildcardSearchable": true,
  "textPropertyOptions": {
    ...
  },
  ...
},

พร็อพเพอร์ตี้อาจมีข้อมูลที่เชื่อมโยงเพียงประเภทเดียว เช่น ในสคีมาภาพยนตร์ของเรา releaseDate ต้องเป็นวันที่เท่านั้น (เช่น 2016-01-13) หรือสตริง (เช่น January 13, 2016) แต่ไม่ใช่ทั้ง 2 อย่าง

ต่อไปนี้คือออบเจ็กต์ประเภทข้อมูลที่ใช้ระบุประเภทข้อมูลสําหรับพร็อพเพอร์ตี้ในสคีมาภาพยนตร์ตัวอย่าง

พร็อพเพอร์ตี้ ออบเจ็กต์ประเภทข้อมูล
movieTitle textPropertyOptions
releaseDate datePropertyOptions
genre enumPropertyOptions
duration textPropertyOptions
actorName textPropertyOptions
userRating integerPropertyOptions
mpaaRating textPropertyOptions

ประเภทข้อมูลที่คุณเลือกสําหรับพร็อพเพอร์ตี้จะขึ้นอยู่กับกรณีการใช้งานที่คาดไว้ ในสถานการณ์สมมติของสคีมาภาพยนตร์นี้ ผู้ใช้ต้องการจัดเรียงผลการค้นหาตามลําดับเวลา ดังนั้น releaseDate จึงเป็นออบเจ็กต์วันที่ ตัวอย่างเช่น หากคาดว่าการเปรียบเทียบรุ่นต่างๆ ในเดือนธันวาคมกับการเผยแพร่ในเดือนมกราคมจะมี Use Case ที่คาดหมาย รูปแบบสตริงก็อาจเป็นประโยชน์เช่นกัน

กำหนดค่าตัวเลือกที่เจาะจงประเภท

ส่วนข้อมูลอ้างอิง PropertyDefinition จะลิงก์ไปยังตัวเลือกสำหรับแต่ละประเภท ตัวเลือกเฉพาะประเภทส่วนใหญ่เป็นแบบไม่บังคับ ยกเว้นรายการ possibleValues ใน enumPropertyOptions นอกจากนี้ ตัวเลือก orderedRanking ยังให้คุณจัดอันดับค่าที่สัมพันธ์กันได้ด้วย ข้อมูลโค้ดต่อไปนี้แสดงพร็อพเพอร์ตี้ movieTitle ที่มีการตั้งค่าประเภทข้อมูล textPropertyOptions และมีตัวเลือกเฉพาะประเภท retrievalImportance

{
  "name": "movieTitle",
  "isReturnable": true,
  "isWildcardSearchable": true,
  "textPropertyOptions": {
    "retrievalImportance": { "importance": "HIGHEST" },
    ...
  },
  ...
}

ตัวเลือกแบบเจาะจงประเภทเพิ่มเติมที่ใช้ในสคีมาตัวอย่างมีดังนี้

พร็อพเพอร์ตี้ Type ตัวเลือกเฉพาะประเภท
movieTitle textPropertyOptions retrievalImportance
releaseDate datePropertyOptions
genre enumPropertyOptions
duration textPropertyOptions
actorName textPropertyOptions
userRating integerPropertyOptions orderedRanking maximumValue
mpaaRating textPropertyOptions

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

นอกจากตัวเลือกเฉพาะประเภทแล้ว แต่ละประเภทยังมีชุดตัวเลือกที่ไม่บังคับ operatorOptions ตัวเลือกเหล่านี้จะอธิบายวิธีการใช้พร็อพเพอร์ตี้เป็นโอเปอเรเตอร์การค้นหา ข้อมูลโค้ดต่อไปนี้แสดงพร็อพเพอร์ตี้ movieTitle ที่มีการตั้งค่าประเภทข้อมูล textPropertyOptions และมีตัวเลือกเฉพาะประเภท retrievalImportance และ operatorOptions

{
  "name": "movieTitle",
  "isReturnable": true,
  "isWildcardSearchable": true,
  "textPropertyOptions": {
    "retrievalImportance": { "importance": "HIGHEST" },
    "operatorOptions": {
      "operatorName": "title"
    }
  },
  ...
}

ทุกๆ operatorOptions จะมี operatorName เช่น title สำหรับ movieTitle ชื่อโอเปอเรเตอร์คือโอเปอเรเตอร์การค้นหาสําหรับพร็อพเพอร์ตี้นั้น โอเปอเรเตอร์การค้นหาคือพารามิเตอร์จริงที่คุณคาดหวังว่าผู้ใช้จะใช้เมื่อจำกัดการค้นหา เช่น หากต้องการค้นหาภาพยนตร์ตามชื่อภาพยนตร์ ผู้ใช้จะพิมพ์ title:movieName โดยที่ movieName คือชื่อของภาพยนตร์

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

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

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

สุดท้าย textOperatorOptions จะมีช่อง exactMatchWithOperator ใน operatorOptions หากคุณตั้งค่า exactMatchWithOperator เป็น true สตริงการค้นหาจะต้องตรงกับค่าของพร็อพเพอร์ตี้ทั้งหมด ไม่ใช่อยู่ในข้อความเท่านั้น ค่าข้อความจะถือเป็นค่าอะตอม 1 ในการค้นหาโอเปอเรเตอร์และการจับคู่ข้อมูลประกอบ

เช่น ลองจัดทำดัชนีออบเจ็กต์หนังสือหรือภาพยนตร์ที่มีพร็อพเพอร์ตี้ประเภท ประเภทอาจเป็น "นิยายวิทยาศาสตร์" "วิทยาศาสตร์" และ "เรื่องแต่ง" เมื่อกำหนด exactMatchWithOperator เป็น false หรือละเว้น การค้นหาประเภทหรือการเลือกแง่มุมหนึ่งของ "วิทยาศาสตร์" หรือ "เรื่องแต่ง" จะแสดงผลการค้นหา "Science-Fiction" ด้วยเนื่องจากข้อความได้รับการแปลงเป็นโทเค็น และมีโทเค็น "Science" และ "Fiction" ใน "Science-Fiction" ด้วย เมื่อ exactMatchWithOperator คือ true ระบบจะถือว่าข้อความดังกล่าวเป็นโทเค็นเดียว ดังนั้นทั้ง "วิทยาศาสตร์" และ "เรื่องแต่ง" จะตรงกับ "Science-Fiction"

(ไม่บังคับ) เพิ่มส่วน displayOptions

มีส่วน displayOptions (ไม่บังคับ) ที่ส่วนท้ายของส่วน propertyDefinition ส่วนนี้มีสตริง displayLabel 1 รายการ โดยใช้ displayLabel เป็นป้ายกำกับข้อความที่แนะนำสำหรับพร็อพเพอร์ตี้ หากมีการกำหนดค่าพร็อพเพอร์ตี้เพื่อแสดงผลโดยใช้ ObjectDisplayOptions ป้ายกำกับนี้จะแสดงข้างหน้าพร็อพเพอร์ตี้ หากมีการกำหนดค่าพร็อพเพอร์ตี้สำหรับโฆษณาแบบดิสเพลย์และไม่ได้กำหนด displayLabel ระบบจะแสดงเฉพาะค่าของพร็อพเพอร์ตี้เท่านั้น

ข้อมูลโค้ดต่อไปนี้แสดงพร็อพเพอร์ตี้ movieTitle โดยมี displayLabel ซึ่งตั้งค่าเป็น "ชื่อ"

{
  "name": "movieTitle",
  "isReturnable": true,
  "isWildcardSearchable": true,
  "textPropertyOptions": {
    "retrievalImportance": { "importance": "HIGHEST" },
    "operatorOptions": {
       "operatorName": "title"
    }
},
  "displayOptions": {
    "displayLabel": "Title"
  }
},

ค่า displayLabel สำหรับพร็อพเพอร์ตี้ทั้งหมดของออบเจ็กต์ movie ในสคีมาตัวอย่างมีดังนี้

พร็อพเพอร์ตี้ displayLabel
movieTitle Title
releaseDate Release date
genre Genre
duration Run length
actorName Actor
userRating Audience score
mpaaRating MPAA rating

(ไม่บังคับ) เพิ่มส่วน suggestionFilteringOperators[]

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

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

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

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

ตามที่ระบุไว้ในหน้าข้อมูลอ้างอิง UpdateSchema ให้ออกคำขอ HTTP ต่อไปนี้เพื่อลงทะเบียนสคีมา

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

เนื้อหาของคำขอควรมีข้อมูลต่อไปนี้

{
  "validateOnly": // true or false,
  "schema": {
    // ... Your complete schema object ...
  }
}

ใช้ตัวเลือก validateOnly เพื่อทดสอบความถูกต้องของสคีมาโดยไม่ต้องลงทะเบียนจริง

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

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

เมื่อใช้สคีมาภาพยนตร์ คำขอจัดทำดัชนี REST API สำหรับภาพยนตร์เรื่องเดียวจะมีลักษณะดังนี้

{
  "name": "datasource/<data_source_id>/items/titanic",
  "acl": {
    "readers": [
      {
        "gsuitePrincipal": {
          "gsuiteDomain": true
        }
      }
    ]
  },
  "metadata": {
    "title": "Titanic",
    "sourceRepositoryUrl": "http://www.imdb.com/title/tt2234155/?ref_=nv_sr_1",
    "objectType": "movie"
  },
  "structuredData": {
    "object": {
      "properties": [
        {
          "name": "movieTitle",
          "textValues": {
            "values": [
              "Titanic"
            ]
          }
        },
        {
          "name": "releaseDate",
          "dateValues": {
            "values": [
              {
                "year": 1997,
                "month": 12,
                "day": 19
              }
            ]
          }
        },
        {
          "name": "actorName",
          "textValues": {
            "values": [
              "Leonardo DiCaprio",
              "Kate Winslet",
              "Billy Zane"
            ]
          }
        },
        {
          "name": "genre",
          "enumValues": {
            "values": [
              "Drama",
              "Action"
            ]
          }
        },
        {
          "name": "userRating",
          "integerValues": {
            "values": [
              8
            ]
          }
        },
        {
          "name": "mpaaRating",
          "textValues": {
            "values": [
              "PG-13"
            ]
          }
        },
        {
          "name": "duration",
          "textValues": {
            "values": [
              "3 h 14 min"
            ]
          }
        }
      ]
    }
  },
  "content": {
    "inlineContent": "A seventeen-year-old aristocrat falls in love with a kind but poor artist aboard the luxurious, ill-fated R.M.S. Titanic.",
    "contentFormat": "TEXT"
  },
  "version": "01",
  "itemType": "CONTENT_ITEM"
}

สังเกตว่าค่าของ movie ในช่อง objectType ตรงกับชื่อการกำหนดออบเจ็กต์ในสคีมาอย่างไร การจับคู่ 2 ค่านี้ทำให้ Cloud Search รู้ว่าต้องใช้ออบเจ็กต์สคีมาใดระหว่างการจัดทำดัชนี

นอกจากนี้ โปรดสังเกตวิธีที่การจัดทำดัชนีพร็อพเพอร์ตี้สคีมา releaseDate ใช้พร็อพเพอร์ตี้ย่อยของ year, month และ day ที่รับช่วงมาเนื่องจากกำหนดเป็นประเภทข้อมูล date โดยใช้ datePropertyOptions เพื่อกำหนด แต่เนื่องจาก year, month และ day ไม่ได้กำหนดไว้ในสคีมา คุณจึงค้นหาพร็อพเพอร์ตี้รายการใดรายการหนึ่งไม่ได้ (เช่น year) แยกกัน

และอย่าลืมวิธีจัดทำดัชนีพร็อพเพอร์ตี้ actorName ที่ทำซ้ำได้โดยใช้รายการค่า

การระบุปัญหาการจัดทำดัชนีที่อาจเกิดขึ้น

ปัญหาที่พบบ่อยที่สุด 2 ข้อเกี่ยวกับสคีมาและการจัดทำดัชนี ได้แก่

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

  • คำขอจัดทำดัชนีของคุณมีพร็อพเพอร์ตี้ที่มีค่าประเภทต่างจากประเภทที่ลงทะเบียนไว้ในสคีมา ปัญหานี้ทำให้ Cloud Search แสดงผลข้อผิดพลาดในเวลาจัดทำดัชนี

ทดสอบสคีมาด้วยการค้นหาหลายประเภท

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

หากต้องการสร้างอินเทอร์เฟซการค้นหาเพื่อตรวจสอบคำค้นหา โปรดดูอินเทอร์เฟซการค้นหา

ส่วนนี้มีตัวอย่างการค้นหาที่แตกต่างกันหลายรายการที่คุณอาจใช้เพื่อทดสอบสคีมาภาพยนตร์

ทดสอบด้วยคำค้นหาทั่วไป

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

ทดสอบกับโอเปอเรเตอร์

การเพิ่มโอเปอเรเตอร์ไปยังการค้นหาจะจำกัดผลลัพธ์ให้เหลือแค่รายการที่ตรงกับค่าโอเปอเรเตอร์ดังกล่าว เช่น คุณอาจต้องการใช้โอเปอเรเตอร์ actor เพื่อค้นหาภาพยนตร์ทั้งหมดที่แสดงโดยนักแสดงคนใดคนหนึ่ง คุณสามารถใช้อินเทอร์เฟซการค้นหาในการค้นหาโดยใช้โอเปอเรเตอร์นี้ได้ง่ายๆ ด้วยการพิมพ์คู่ โอเปอเรเตอร์=value เช่น "actor:Zane" แล้วกด "actor:Zane" ภาพยนตร์ทั้งหมดที่มี Zane ในฐานะนักแสดง ควรปรากฏในผลการค้นหา

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

หลังจากใช้สคีมาและข้อมูลแล้ว ให้ตรวจสอบต่อไปว่าสิ่งใดใช้ได้ผลและไม่ได้ผลสำหรับผู้ใช้ คุณควรพิจารณาปรับสคีมาสําหรับสถานการณ์ต่อไปนี้

  • การจัดทําดัชนีช่องที่ยังไม่ได้จัดทําดัชนีมาก่อน ตัวอย่างเช่น ผู้ใช้อาจค้นหาภาพยนตร์ซ้ำๆ โดยอิงจากชื่อผู้กำกับ คุณจึงอาจปรับสคีมาให้รองรับชื่อผู้กำกับในฐานะโอเปอเรเตอร์
  • การเปลี่ยนชื่อโอเปอเรเตอร์การค้นหาตามความคิดเห็นของผู้ใช้ ชื่อของโอเปอเรเตอร์ ควรเป็นชื่อที่ใช้ง่าย หากผู้ใช้ของคุณ "จำ" ชื่อโอเปอเรเตอร์ที่ไม่ถูกต้อง อย่างต่อเนื่อง คุณอาจลองเปลี่ยนชื่อได้

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

การเปลี่ยนค่าต่อไปนี้ในสคีมาไม่กำหนดให้คุณต้องจัดทำดัชนีข้อมูลอีกครั้ง คุณเพียงแค่ส่งคำขอ UpdateSchema ใหม่ แล้วดัชนีของคุณจะยังคงทำงานต่อไป

  • ชื่อโอเปอเรเตอร์
  • ค่าต่ำสุดและสูงสุดของจำนวนเต็ม
  • การจัดอันดับจำนวนเต็มและ Enum
  • ตัวเลือกความใหม่
  • ตัวเลือกการแสดงผล

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

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

คุณควรตั้งค่า isFacetable หรือ isSortable เป็น true เฉพาะเมื่อมีกรณีการใช้งานที่ชัดเจนและจำเป็น

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

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

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

  • ประเภทข้อมูลพร็อพเพอร์ตี้
  • ชื่อพร็อพเพอร์ตี้
  • การตั้งค่า exactMatchWithOperator
  • การตั้งค่า retrievalImportance

อย่างไรก็ตาม ข้อจำกัดนี้ก็มีบางส่วน

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

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

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

ขั้นตอนต่อไปนี้จะแสดงวิธีเปลี่ยนประเภทข้อมูลหรือชื่อของพร็อพเพอร์ตี้

  1. เพิ่มพร็อพเพอร์ตี้ใหม่ไปยังคำจำกัดความออบเจ็กต์ในสคีมา ใช้ชื่ออื่นที่ไม่ใช่พร็อพเพอร์ตี้ที่คุณต้องการเปลี่ยน
  2. ส่งคำขอ UpdateSchema พร้อมคำจำกัดความใหม่ อย่าลืมส่งสคีมาทั้งหมดรวมทั้งพร็อพเพอร์ตี้ใหม่ และพร็อพเพอร์ตี้เก่าในคำขอ
  3. ทดแทนข้อมูลดัชนีจากที่เก็บข้อมูล หากต้องการทดแทนข้อมูลดัชนี ให้ส่งคำขอการจัดทำดัชนีทั้งหมดโดยใช้พร็อพเพอร์ตี้ใหม่ แต่ไม่ใช่พร็อพเพอร์ตี้เก่า เนื่องจากจะทำให้นับคำค้นหาที่ตรงกันซ้ำ

    1. ในระหว่างการจัดทําดัชนีโฆษณาทดแทน ให้ตรวจสอบพร็อพเพอร์ตี้ใหม่และค่าเริ่มต้นคือพร็อพเพอร์ตี้เก่าเพื่อหลีกเลี่ยงลักษณะการทำงานที่ไม่สอดคล้องกัน
    2. หลังจากโฆษณาทดแทนเสร็จสมบูรณ์แล้ว ให้เรียกใช้การค้นหาทดสอบเพื่อยืนยัน
  4. ลบพร็อพเพอร์ตี้เดิม ออกคำขอ UpdateSchema อีกรายการหนึ่งโดยไม่ใช้ชื่อพร็อพเพอร์ตี้เดิม และหยุดใช้ชื่อพร็อพเพอร์ตี้เดิมในคำขอจัดทำดัชนีในอนาคต

  5. ย้ายข้อมูลการใช้งานพร็อพเพอร์ตี้เดิมไปยังพร็อพเพอร์ตี้ใหม่ ตัวอย่างเช่น หากเปลี่ยนชื่อพร็อพเพอร์ตี้จาก "ครีเอเตอร์" เป็น "ผู้เขียน" คุณต้องอัปเดตโค้ดการค้นหาเพื่อใช้ชื่อ "ผู้แต่ง" จากที่ก่อนหน้านี้ใช้อ้างอิงถึงครีเอเตอร์

Cloud Search จะบันทึกพร็อพเพอร์ตี้หรือออบเจ็กต์ที่ลบไปแล้วเป็นเวลา 30 วันเพื่อป้องกันการใช้งานซ้ำซึ่งอาจทำให้เกิดผลการจัดทำดัชนีที่ไม่คาดคิด ภายใน 30 วันนั้น คุณควรย้ายข้อมูลออกจากการใช้งานออบเจ็กต์หรือพร็อพเพอร์ตี้ที่ถูกลบทั้งหมด รวมถึงละเว้นจากคำขอดัชนีในอนาคต วิธีนี้ช่วยรับประกันว่าหากในภายหลังคุณตัดสินใจคืนสถานะพร็อพเพอร์ตี้หรือออบเจ็กต์ดังกล่าวอีกครั้ง คุณจะทำได้ในลักษณะที่ยังคงความถูกต้องของดัชนีไว้

ทราบข้อจำกัดด้านขนาด

Cloud Search กำหนดขีดจำกัดขนาดของออบเจ็กต์และสคีมาข้อมูลที่มีโครงสร้าง ขีดจำกัดเหล่านี้ได้แก่

  • จำนวนออบเจ็กต์ระดับบนสุดสูงสุดคือ 10 รายการ
  • ความลึกสูงสุดของลำดับชั้นข้อมูลที่มีโครงสร้างคือ 10 ระดับ
  • จำนวนช่องทั้งหมดในออบเจ็กต์หนึ่งถูกจำกัดไว้ที่ 1,000 ช่อง ซึ่งรวมถึงจำนวนช่องพื้นฐานและผลรวมของจำนวนช่องในออบเจ็กต์ที่ฝังอยู่แต่ละรายการ

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

ขั้นตอนถัดไป 2-3 อย่างที่คุณอาจดำเนินการมีดังนี้

  1. สร้างอินเทอร์เฟซการค้นหาเพื่อทดสอบสคีมา

  2. ปรับแต่งสคีมาเพื่อปรับปรุงคุณภาพการค้นหา

  3. วางโครงสร้างสคีมาเพื่อการตีความการค้นหาที่ดีที่สุด

  4. ดูวิธีใช้ประโยชน์จากสคีมา _dictionaryEntry เพื่อระบุคำพ้องความหมายสำหรับคำที่นิยมใช้ในบริษัทของคุณ หากต้องการใช้สคีมา _dictionaryEntry โปรดดูกำหนดคำพ้องความหมาย

  5. สร้างเครื่องมือเชื่อมต่อ