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

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

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

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

สร้างสคีมา

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

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

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

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

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

หากต้องการกําหนดสคีมาให้สอดคล้องกับรูปแบบพฤติกรรมของผู้ใช้ ให้พิจารณาทํางานต่อไปนี้

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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 จำกัดขนาดของออบเจ็กต์ Structured Data และสคีมา ขีดจํากัดเหล่านี้มีดังนี้

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

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

ขั้นตอนถัดไปที่คุณอาจทำได้มีดังนี้

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

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

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

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

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