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