สคีมาของ Google Cloud Search คือโครงสร้าง JSON ที่กำหนดออบเจ็กต์ พร็อพเพอร์ตี้ และตัวเลือกที่จะใช้ในการจัดทำดัชนีและการค้นหาข้อมูล เครื่องมือเชื่อมต่อเนื้อหาจะอ่านข้อมูลจากที่เก็บของคุณ รวมถึงโครงสร้างและจัดทำดัชนีข้อมูลตามสคีมาที่ลงทะเบียนไว้
คุณสร้างสคีมาได้โดยการระบุออบเจ็กต์สคีมา JSON ไปยัง API จากนั้นลงทะเบียนรายการดังกล่าว คุณต้องลงทะเบียนออบเจ็กต์สคีมาสำหรับที่เก็บแต่ละแห่งก่อน จึงจะจัดทำดัชนีข้อมูลได้
เอกสารนี้ครอบคลุมพื้นฐานการสร้างสคีมา ดูข้อมูลเกี่ยวกับวิธีปรับแต่งสคีมาเพื่อปรับปรุงประสบการณ์การค้นหาได้ที่ปรับปรุงคุณภาพการค้นหา
สร้างสคีมา
ต่อไปนี้คือรายการขั้นตอนที่ใช้ในการสร้างสคีมา Cloud Search
- ระบุพฤติกรรมของผู้ใช้ที่คาดหวัง
- เริ่มต้นแหล่งข้อมูล
- สร้างสคีมา
- ตัวอย่างสคีมาที่สมบูรณ์
- ลงทะเบียนสคีมา
- จัดทำดัชนีข้อมูล
- ทดสอบสคีมา
- ปรับแต่งสคีมา
ระบุพฤติกรรมที่คาดหวังของผู้ใช้
การคาดการณ์ประเภทของคำค้นหาที่ผู้ใช้สร้างจะช่วยกำหนดกลยุทธ์ในการสร้างสคีมา
ตัวอย่างเช่น เมื่อทำการค้นหาในฐานข้อมูลภาพยนตร์ คุณอาจคาดว่า ผู้ใช้อาจจะกำลังทำการค้นหา เช่น "ขอดูหนังทุกเรื่องที่มีคนนำแสดงโดยโรเบิร์ต เรดฟอร์ด" ดังนั้น สคีมาของคุณจึงต้องรองรับผลการค้นหาที่อิงตาม "ภาพยนตร์ทั้งหมดที่มีนักแสดงคนใดคนหนึ่ง"
หากต้องการกำหนดสคีมาให้แสดงถึงรูปแบบพฤติกรรมของผู้ใช้ ให้พิจารณาดำเนินการต่อไปนี้
- ประเมินชุดคำค้นหาที่ต้องการหลากหลายจากผู้ใช้ที่แตกต่างกัน
- ระบุออบเจ็กต์ที่อาจใช้ในการค้นหา ออบเจ็กต์คือชุดข้อมูลที่เกี่ยวข้องเชิงตรรกะ เช่น ภาพยนตร์ในฐานข้อมูลของภาพยนตร์
- ระบุพร็อพเพอร์ตี้และค่าที่ประกอบขึ้นเป็นออบเจ็กต์และอาจใช้ในการค้นหา พร็อพเพอร์ตี้คือแอตทริบิวต์ที่จัดทำดัชนีของออบเจ็กต์ได้ โดยอาจมีค่าพื้นฐานหรือออบเจ็กต์อื่นๆ เช่น ออบเจ็กต์ภาพยนตร์อาจมีพร็อพเพอร์ตี้ เช่น ชื่อภาพยนตร์และวันที่ฉายเป็นค่าพื้นฐาน ออบเจ็กต์ภาพยนตร์อาจมีออบเจ็กต์อื่นๆ เช่น นักแสดง ที่มีพร็อพเพอร์ตี้ของตนเอง เช่น ชื่อหรือบทบาท
- ระบุตัวอย่างค่าที่ถูกต้องสำหรับพร็อพเพอร์ตี้ ค่าคือข้อมูลจริงที่ได้รับการจัดทำดัชนีสำหรับพร็อพเพอร์ตี้ ตัวอย่างเช่น ชื่อภาพยนตร์เรื่องหนึ่งในฐานข้อมูลของคุณอาจมีชื่อว่า "Raiders of the Lost Ark"
- กำหนดตัวเลือกการจัดเรียงและการจัดลำดับที่ต้องการโดยผู้ใช้ ตัวอย่างเช่น เมื่อค้นหาภาพยนตร์ ผู้ใช้อาจต้องการจัดเรียงตามลำดับเวลาและจัดอันดับตามการให้คะแนนผู้ชม และไม่จำเป็นต้องจัดเรียงตามตัวอักษรของชื่อ
- (ไม่บังคับ) พิจารณาว่าพร็อพเพอร์ตี้รายการใดรายการหนึ่งของคุณแสดงถึงบริบทที่เฉพาะเจาะจงมากขึ้นซึ่งระบบอาจดำเนินการค้นหาหรือไม่ เช่น บทบาทหรือแผนกงานของผู้ใช้ เพื่อให้ระบบแสดงคำแนะนำที่เติมข้อความอัตโนมัติได้โดยอิงตามบริบท ตัวอย่างเช่น สำหรับผู้ใช้ที่ค้นหาฐานข้อมูลภาพยนตร์ ผู้ใช้อาจสนใจเฉพาะภาพยนตร์บางประเภท ผู้ใช้จะกำหนดประเภทที่ต้องการให้แสดงการค้นหา ซึ่งอาจเป็นส่วนหนึ่งของโปรไฟล์ผู้ใช้ของตน จากนั้น เมื่อผู้ใช้เริ่มพิมพ์ข้อความค้นหาภาพยนตร์ ระบบจะแนะนำเฉพาะภาพยนตร์ในประเภทที่ต้องการ เช่น "ภาพยนตร์แอ็กชัน" โดยเป็นส่วนหนึ่งของคำแนะนำในการเติมข้อความอัตโนมัติ
- สร้างรายการออบเจ็กต์ พร็อพเพอร์ตี้ และค่าตัวอย่างเหล่านี้ที่ใช้ในการค้นหาได้ (โปรดดูรายละเอียดเกี่ยวกับวิธีใช้รายการนี้ได้ที่ส่วนกำหนดตัวเลือกโอเปอเรเตอร์)
เริ่มต้นแหล่งข้อมูล
แหล่งข้อมูลแสดงถึงข้อมูลจากที่เก็บที่มีการจัดทำดัชนีและจัดเก็บไว้ใน Google Cloud สำหรับวิธีการเริ่มต้นแหล่งข้อมูล โปรดดูจัดการแหล่งข้อมูลของบุคคลที่สาม
ระบบจะแสดงผลการค้นหาของผู้ใช้จากแหล่งข้อมูล เมื่อผู้ใช้คลิกผลการค้นหา Cloud Search จะนำผู้ใช้ไปยังรายการจริงโดยใช้ URL ที่ให้ไว้ในคำขอการจัดทำดัชนี
กำหนดออบเจ็กต์
หน่วยพื้นฐานของข้อมูลในสคีมาคือออบเจ็กต์หรือที่เรียกว่า "ออบเจ็กต์สคีมา" ซึ่งเป็นโครงสร้างเชิงตรรกะของข้อมูล ในฐานข้อมูลของภาพยนตร์ โครงสร้างเชิงตรรกะของข้อมูลคือ "ภาพยนตร์" อีกวัตถุหนึ่งอาจเป็น "บุคคล" สำหรับนักแสดงและทีมงานที่มีส่วนเกี่ยวข้องกับภาพยนตร์
ออบเจ็กต์ทุกรายการในสคีมามีชุดพร็อพเพอร์ตี้หรือแอตทริบิวต์ที่อธิบายออบเจ็กต์ เช่น ชื่อและระยะเวลาของภาพยนตร์ หรือชื่อและวันเกิดของบุคคล คุณสมบัติของวัตถุอาจประกอบด้วยค่าพื้นฐาน หรือวัตถุอื่นๆ
รูปที่ 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
- ระบุว่าพร็อพเพอร์ตี้ระบุข้อมูลที่ควรแสดงผลในผลการค้นหาผ่าน 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 ง่ายๆ ถึงแม้ว่าคุณจะจัดทำดัชนีข้อมูลอีกครั้งแล้วก็ตาม
ในกรณีที่คุณต้องทำการเปลี่ยนแปลงกับสคีมาที่ไม่อนุญาตเป็นอย่างอื่น คุณมักจะทำชุดการเปลี่ยนแปลงที่ได้รับอนุญาตซึ่งให้ผลแบบเดียวกันได้ โดยทั่วไป ขั้นตอนนี้เกี่ยวข้องกับการย้ายพร็อพเพอร์ตี้ที่จัดทำดัชนีจากคำจำกัดความออบเจ็กต์ที่เก่ากว่าไปยังพร็อพเพอร์ตี้ที่ใหม่กว่าก่อน จากนั้นจึงส่งคำขอการจัดทำดัชนีที่ใช้เฉพาะพร็อพเพอร์ตี้ที่ใหม่กว่า
ขั้นตอนต่อไปนี้จะแสดงวิธีเปลี่ยนประเภทข้อมูลหรือชื่อของพร็อพเพอร์ตี้
- เพิ่มพร็อพเพอร์ตี้ใหม่ไปยังคำจำกัดความออบเจ็กต์ในสคีมา ใช้ชื่ออื่นที่ไม่ใช่พร็อพเพอร์ตี้ที่คุณต้องการเปลี่ยน
- ส่งคำขอ UpdateSchema พร้อมคำจำกัดความใหม่ อย่าลืมส่งสคีมาทั้งหมดรวมทั้งพร็อพเพอร์ตี้ใหม่ และพร็อพเพอร์ตี้เก่าในคำขอ
ทดแทนข้อมูลดัชนีจากที่เก็บข้อมูล หากต้องการทดแทนข้อมูลดัชนี ให้ส่งคำขอการจัดทำดัชนีทั้งหมดโดยใช้พร็อพเพอร์ตี้ใหม่ แต่ไม่ใช่พร็อพเพอร์ตี้เก่า เนื่องจากจะทำให้นับคำค้นหาที่ตรงกันซ้ำ
- ในระหว่างการจัดทําดัชนีโฆษณาทดแทน ให้ตรวจสอบพร็อพเพอร์ตี้ใหม่และค่าเริ่มต้นคือพร็อพเพอร์ตี้เก่าเพื่อหลีกเลี่ยงลักษณะการทำงานที่ไม่สอดคล้องกัน
- หลังจากโฆษณาทดแทนเสร็จสมบูรณ์แล้ว ให้เรียกใช้การค้นหาทดสอบเพื่อยืนยัน
ลบพร็อพเพอร์ตี้เดิม ออกคำขอ UpdateSchema อีกรายการหนึ่งโดยไม่ใช้ชื่อพร็อพเพอร์ตี้เดิม และหยุดใช้ชื่อพร็อพเพอร์ตี้เดิมในคำขอจัดทำดัชนีในอนาคต
ย้ายข้อมูลการใช้งานพร็อพเพอร์ตี้เดิมไปยังพร็อพเพอร์ตี้ใหม่ ตัวอย่างเช่น หากเปลี่ยนชื่อพร็อพเพอร์ตี้จาก "ครีเอเตอร์" เป็น "ผู้เขียน" คุณต้องอัปเดตโค้ดการค้นหาเพื่อใช้ชื่อ "ผู้แต่ง" จากที่ก่อนหน้านี้ใช้อ้างอิงถึงครีเอเตอร์
Cloud Search จะบันทึกพร็อพเพอร์ตี้หรือออบเจ็กต์ที่ลบไปแล้วเป็นเวลา 30 วันเพื่อป้องกันการใช้งานซ้ำซึ่งอาจทำให้เกิดผลการจัดทำดัชนีที่ไม่คาดคิด ภายใน 30 วันนั้น คุณควรย้ายข้อมูลออกจากการใช้งานออบเจ็กต์หรือพร็อพเพอร์ตี้ที่ถูกลบทั้งหมด รวมถึงละเว้นจากคำขอดัชนีในอนาคต วิธีนี้ช่วยรับประกันว่าหากในภายหลังคุณตัดสินใจคืนสถานะพร็อพเพอร์ตี้หรือออบเจ็กต์ดังกล่าวอีกครั้ง คุณจะทำได้ในลักษณะที่ยังคงความถูกต้องของดัชนีไว้
ทราบข้อจำกัดด้านขนาด
Cloud Search กำหนดขีดจำกัดขนาดของออบเจ็กต์และสคีมาข้อมูลที่มีโครงสร้าง ขีดจำกัดเหล่านี้ได้แก่
- จำนวนออบเจ็กต์ระดับบนสุดสูงสุดคือ 10 รายการ
- ความลึกสูงสุดของลำดับชั้นข้อมูลที่มีโครงสร้างคือ 10 ระดับ
- จำนวนช่องทั้งหมดในออบเจ็กต์หนึ่งถูกจำกัดไว้ที่ 1,000 ช่อง ซึ่งรวมถึงจำนวนช่องพื้นฐานและผลรวมของจำนวนช่องในออบเจ็กต์ที่ฝังอยู่แต่ละรายการ
ขั้นตอนถัดไป
ขั้นตอนถัดไป 2-3 อย่างที่คุณอาจดำเนินการมีดังนี้
สร้างอินเทอร์เฟซการค้นหาเพื่อทดสอบสคีมา
ปรับแต่งสคีมาเพื่อปรับปรุงคุณภาพการค้นหา
ดูวิธีใช้ประโยชน์จากสคีมา
_dictionaryEntry
เพื่อระบุคำพ้องความหมายสำหรับคำที่นิยมใช้ในบริษัทของคุณ หากต้องการใช้สคีมา_dictionaryEntry
โปรดดูกำหนดคำพ้องความหมายสร้างเครื่องมือเชื่อมต่อ