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

สคีมา 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 แสดงออบเจ็กต์ภาพยนตร์และบุคคล รวมถึงพร็อพเพอร์ตี้ที่เกี่ยวข้อง

ภาพการเชื่อมต่อสคีมาระหว่างเอนทิตี
รูปที่ 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 ครั้ง ครั้งหนึ่งในออบเจ็กต์ movie และอีกครั้งในออบเจ็กต์ย่อย filmography ของออบเจ็กต์ person สคีมานี้ใช้ฟิลด์ movieTitle ซ้ำ เพื่อให้สคีมารองรับลักษณะการค้นหา 2 ประเภท ได้แก่

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

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

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

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

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

  • isReturnable - ระบุว่าพร็อพเพอร์ตี้ระบุข้อมูลที่ควรแสดงในผลการค้นหาผ่าน Query API หรือไม่ พร็อพเพอร์ตี้ภาพยนตร์ตัวอย่างทั้งหมด จะแสดงผลได้ พร็อพเพอร์ตี้ที่ไม่สามารถส่งคืนได้อาจใช้สำหรับการค้นหา หรือการจัดอันดับผลลัพธ์โดยไม่ต้องส่งคืนให้ผู้ใช้
  • isRepeatable - ระบุว่าอนุญาตให้ใช้ค่าหลายค่าสำหรับพร็อพเพอร์ตี้หรือไม่ ตัวอย่างเช่น ภาพยนตร์มีวันที่เผยแพร่เพียงวันเดียว แต่มีนักแสดงได้หลายคน
  • isSortable - ระบุว่าใช้พร็อพเพอร์ตี้สำหรับการจัดเรียงได้ ซึ่งไม่เป็นความจริงสำหรับพร็อพเพอร์ตี้ที่ทำซ้ำได้ เช่น ผลการค้นหาภาพยนตร์ อาจจัดเรียงตามวันที่วางจำหน่ายหรือคะแนนจากผู้ชม
  • isFacetable - ระบุว่าใช้พร็อพเพอร์ตี้เพื่อสร้างแง่มุมได้ ระบบจะใช้ข้อมูลประกอบเพื่อปรับแต่งผลการค้นหา โดยผู้ใช้จะเห็น ผลการค้นหาเริ่มต้น แล้วเพิ่มเกณฑ์หรือข้อมูลประกอบเพื่อปรับแต่งผลการค้นหาเหล่านั้นเพิ่มเติม ตัวเลือกนี้ต้องเป็นจริงสำหรับพร็อพเพอร์ตี้ที่มีประเภทเป็นออบเจ็กต์ และisReturnable ต้องเป็นจริงจึงจะตั้งค่าตัวเลือกนี้ได้ สุดท้ายนี้ ตัวเลือกนี้ใช้ได้กับพร็อพเพอร์ตี้ประเภท Enum, บูลีน และข้อความเท่านั้น ตัวอย่างเช่น ในสคีมาตัวอย่าง เราอาจทำให้ 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) แต่เป็นทั้ง 2 อย่างไม่ได้

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

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

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

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

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

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

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

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

(ไม่บังคับ) เพิ่ม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 เพื่อลงทะเบียนสคีมา

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

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

การเพิ่มโอเปอเรเตอร์ลงในคำค้นหาจะจำกัดผลการค้นหาให้แสดงเฉพาะรายการที่ตรงกับค่าโอเปอเรเตอร์นั้น เช่น คุณอาจต้องการใช้โอเปอเรเตอร์ 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 ออบเจ็กต์
  • ความลึกสูงสุดของลำดับชั้นข้อมูลที่มีโครงสร้างคือ 10 ระดับ
  • จำนวนฟิลด์ทั้งหมดในออบเจ็กต์จำกัดไว้ที่ 1,000 รายการ ซึ่งรวมถึงจำนวนฟิลด์ดั้งเดิมและผลรวมของจำนวน ฟิลด์ในแต่ละออบเจ็กต์ที่ซ้อนกัน

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

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

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

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

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

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

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