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

สคีมาของ 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 รายการและออบเจ็กต์ย่อย 1 รายการ

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

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

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

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

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

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

พร็อพเพอร์ตี้ ประเภท ตัวเลือกเฉพาะประเภท
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 สตริงการค้นหาต้องตรงกับค่าพร็อพเพอร์ตี้ทั้งหมด ไม่ใช่เฉพาะในข้อความ ระบบจะถือว่าค่าข้อความเป็นค่าอะตอมค่าหนึ่งในการค้นหาโอเปอเรเตอร์และการจับคู่ข้อมูลประกอบ

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

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

จัดทำดัชนีข้อมูลของคุณ

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

เมื่อใช้สคีมาภาพยนตร์ คำขอจัดทำดัชนี 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 ภาพยนตร์ทั้งหมดที่มีคำว่า "ไททานิก" ควรจะแสดงในผลการค้นหา

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

การเพิ่มโอเปอเรเตอร์ลงในการค้นหาจะจำกัดผลลัพธ์ให้เหลือเพียงรายการที่ตรงกับค่าของโอเปอเรเตอร์นั้น เช่น คุณอาจต้องการใช้โอเปอเรเตอร์ actor เพื่อค้นหาภาพยนตร์ทั้งหมดที่นำแสดงโดยนักแสดงคนใดคนหนึ่ง เมื่อใช้อินเทอร์เฟซการค้นหา คุณสามารถดำเนินการค้นหาโอเปอเรเตอร์นี้ได้ง่ายๆ โดยพิมพ์คู่ operator=value เช่น "actor:Zane" และกด Return ภาพยนตร์ทั้งหมดที่มี 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 ช่อง ซึ่งรวมถึงจำนวนช่องพื้นฐานและผลรวมของจำนวนช่องในออบเจ็กต์ที่ฝังแต่ละรายการ

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

ขั้นตอนถัดไปที่ทำได้มีดังนี้

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

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

  3. จัดโครงสร้างสคีมาเพื่อการแปลความหมายการค้นหาที่มีประสิทธิภาพสูงสุด

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

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