สคีมาของ Google Cloud Search เป็นโครงสร้าง JSON ที่กำหนดออบเจ็กต์ พร็อพเพอร์ตี้ และตัวเลือกที่จะใช้ในการจัดทำดัชนีและการค้นหาข้อมูลของคุณ เครื่องมือเชื่อมต่อเนื้อหาจะอ่านข้อมูลจากที่เก็บ โดยอิงตามสคีมาที่ลงทะเบียน โครงสร้าง และจัดทำดัชนีข้อมูล
คุณสร้างสคีมาได้โดยการระบุออบเจ็กต์สคีมา JSON ให้กับ API แล้วลงทะเบียนออบเจ็กต์ดังกล่าว คุณต้องลงทะเบียนออบเจ็กต์สคีมาสำหรับที่เก็บแต่ละแห่งก่อนจึงจะจัดทำดัชนีข้อมูลได้
เอกสารนี้ครอบคลุมพื้นฐานการสร้างสคีมา ดูข้อมูลเกี่ยวกับวิธีปรับแต่งสคีมาเพื่อปรับปรุงประสบการณ์การค้นหาได้ที่ปรับปรุงคุณภาพการค้นหา
สร้างสคีมา
ขั้นตอนในการสร้างสคีมาของ Cloud Search มีดังนี้
- ระบุพฤติกรรมของผู้ใช้ที่คาดหวัง
- เริ่มต้นแหล่งข้อมูล
- สร้างสคีมา
- ตัวอย่างสคีมาที่สมบูรณ์
- ลงทะเบียนสคีมา
- จัดทำดัชนีข้อมูล
- ทดสอบสคีมา
- ปรับแต่งสคีมา
ระบุพฤติกรรมของผู้ใช้ที่คาดหวัง
การคาดเดาประเภทของการค้นหาที่ผู้ใช้สร้างจะช่วยกำหนดกลยุทธ์ในการสร้างสคีมาของคุณ
ตัวอย่างเช่น เมื่อออกข้อความค้นหากับฐานข้อมูลภาพยนตร์ คุณอาจคาดว่าผู้ใช้จะทำข้อความค้นหา เช่น "ขอดูหนังทั้งหมดที่นำแสดงโดยโรเบิร์ต เรดฟอร์ดหน่อย" สคีมาของคุณจึงต้องรองรับผลการค้นหาที่มาจาก "ภาพยนตร์ทั้งหมดที่มีนักแสดงที่เฉพาะเจาะจง"
หากต้องการกำหนดสคีมาให้สอดคล้องกับรูปแบบพฤติกรรมของผู้ใช้ ให้พิจารณาดำเนินการต่อไปนี้
- ประเมินชุดคำค้นหาที่ต้องการที่หลากหลายจากผู้ใช้ต่างๆ
- ระบุออบเจ็กต์ที่อาจใช้ในการค้นหา ออบเจ็กต์คือชุดข้อมูลที่เกี่ยวข้องเชิงตรรกะ เช่น ภาพยนตร์ในฐานข้อมูลของภาพยนตร์
- ระบุพร็อพเพอร์ตี้และค่าที่เป็นส่วนประกอบของออบเจ็กต์และอาจใช้ในการค้นหา คุณสมบัติคือแอตทริบิวต์ที่จัดทำดัชนีได้ของออบเจ็กต์ โดยอาจรวมค่าดั้งเดิมหรือออบเจ็กต์อื่นๆ ก็ได้ เช่น ออบเจ็กต์ภาพยนตร์อาจมีพร็อพเพอร์ตี้อย่างชื่อภาพยนตร์และวันที่เผยแพร่เป็นค่าพื้นฐาน ออบเจ็กต์ภาพยนตร์อาจมีวัตถุอื่นๆ ด้วย เช่น นักแสดง ซึ่งมีพร็อพเพอร์ตี้ของตนเอง เช่น ชื่อหรือบทบาท
- ระบุค่าที่ถูกต้องสำหรับพร็อพเพอร์ตี้ ค่าคือข้อมูลจริงที่มีการจัดทำดัชนีสำหรับพร็อพเพอร์ตี้หนึ่งๆ เช่น ชื่อภาพยนตร์ในฐานข้อมูลของคุณอาจเป็น "Raiders of the Lost Ark"
- กำหนดตัวเลือกการจัดเรียงและการจัดอันดับที่ผู้ใช้ของคุณต้องการ ตัวอย่างเช่น เมื่อค้นหาภาพยนตร์ ผู้ใช้อาจต้องการจัดเรียงตามลำดับเวลาและจัดอันดับตามการจัดประเภทผู้ชม และไม่จำเป็นต้องจัดเรียงตามตัวอักษรของชื่อ
- (ไม่บังคับ) พิจารณาว่าพร็อพเพอร์ตี้รายการใดรายการหนึ่งแสดงบริบทที่เฉพาะเจาะจงซึ่งจะมีการดำเนินการค้นหาหรือไม่ เช่น บทบาทหรือฝ่ายในงานของผู้ใช้ เพื่อให้ระบบแสดงคำแนะนำที่เติมข้อความอัตโนมัติได้ตามบริบทดังกล่าว ตัวอย่างเช่น สำหรับคนที่ค้นหาฐานข้อมูลภาพยนตร์ ผู้ใช้อาจสนใจภาพยนตร์บางเรื่องเท่านั้น ผู้ใช้จะระบุประเภทที่ต้องการค้นหาได้ ซึ่งอาจเป็นส่วนหนึ่งของโปรไฟล์ผู้ใช้ จากนั้น เมื่อผู้ใช้เริ่มพิมพ์คำค้นหาภาพยนตร์ ระบบจะแนะนำเฉพาะภาพยนตร์ในประเภทที่ต้องการ เช่น "ภาพยนตร์แอ็กชัน" เท่านั้นเป็นส่วนหนึ่งของคำแนะนำในการเติมข้อความอัตโนมัติ
- สร้างรายการออบเจ็กต์ พร็อพเพอร์ตี้ และค่าตัวอย่างเหล่านี้ที่ใช้ในการค้นหาได้ (โปรดดูรายละเอียดเกี่ยวกับวิธีใช้รายการนี้ในส่วนกำหนดตัวเลือกโอเปอเรเตอร์)
เริ่มต้นแหล่งข้อมูล
แหล่งข้อมูลแสดงถึงข้อมูลจากที่เก็บที่ได้รับการจัดทำดัชนีและจัดเก็บไว้ใน Google Cloud ดูวิธีการเริ่มต้นใช้งานแหล่งข้อมูลได้ที่จัดการแหล่งข้อมูลของบุคคลที่สาม
ระบบจะแสดงผลการค้นหาของผู้ใช้จากแหล่งข้อมูล เมื่อผู้ใช้คลิกผลการค้นหา Cloud Search จะนำผู้ใช้ไปยังรายการจริงโดยใช้ URL ที่ระบุในคำขอจัดทำดัชนี
กำหนดออบเจ็กต์
หน่วยพื้นฐานของข้อมูลในสคีมาคือออบเจ็กต์หรือที่เรียกว่า "ออบเจ็กต์สคีมา" ซึ่งเป็นโครงสร้างเชิงตรรกะของข้อมูล ในฐานข้อมูลของภาพยนตร์ โครงสร้างเชิงตรรกะของข้อมูลคือ "ภาพยนตร์" อีกวัตถุหนึ่งอาจเป็น "คน" เพื่อแสดงถึงนักแสดงและทีมงานในภาพยนตร์
ออบเจ็กต์ทุกรายการในสคีมาจะมีชุดพร็อพเพอร์ตี้หรือแอตทริบิวต์ที่อธิบายออบเจ็กต์ เช่น ชื่อและระยะเวลาของภาพยนตร์ หรือชื่อและวันเกิดของบุคคล คุณสมบัติของออบเจ็กต์อาจรวมถึงค่าพื้นฐานหรือออบเจ็กต์อื่นๆ
รูปที่ 1 แสดงวัตถุภาพยนตร์และบุคคล รวมถึงคุณสมบัติที่เกี่ยวข้อง
![ภาพวาดการเชื่อมต่อสคีมาระหว่างเอนทิตี](https://developers.google.cn/static/cloud-search/images/schemaExample.png?authuser=6&hl=th)
สคีมา Cloud Search เป็นรายการคำสั่งคำจำกัดความออบเจ็กต์ที่กำหนดไว้ภายในแท็ก objectDefinitions
ตัวอย่างข้อมูลสคีมาต่อไปนี้จะแสดงคำสั่ง objectDefinitions
สำหรับออบเจ็กต์สคีมาภาพยนตร์และบุคคล
{
"objectDefinitions": [
{
"name": "movie",
...
},
{
"name": "person",
...
}
]
}
เมื่อกำหนดออบเจ็กต์สคีมา คุณต้องระบุ name
สำหรับออบเจ็กต์ที่ต้องไม่ซ้ำกันกับออบเจ็กต์อื่นๆ ทั้งหมดในสคีมา โดยทั่วไปแล้วคุณจะใช้ค่า name
ที่อธิบายออบเจ็กต์ เช่น movie
สำหรับออบเจ็กต์ภาพยนตร์ บริการสคีมาใช้ช่อง name
เป็นตัวระบุคีย์สำหรับออบเจ็กต์ที่จัดทำดัชนีได้ ดูข้อมูลเพิ่มเติมเกี่ยวกับช่อง name
ได้ที่คำจำกัดความของออบเจ็กต์
กำหนดพร็อพเพอร์ตี้ของออบเจ็กต์
ตามที่ระบุไว้ในข้อมูลอ้างอิงสำหรับ ObjectDefinition ชื่อออบเจ็กต์ตามด้วยชุด options
และรายการ propertyDefinitions
options
อาจประกอบไปด้วย freshnessOptions
และ displayOptions
freshnessOptions
จะใช้เพื่อปรับการจัดอันดับการค้นหาตามความใหม่ของรายการ displayOptions
ใช้เพื่อกำหนดว่าจะแสดงป้ายกำกับและพร็อพเพอร์ตี้ที่เจาะจงในผลการค้นหาสำหรับออบเจ็กต์หรือไม่
ส่วน propertyDefinitions
คือจุดที่คุณกำหนดพร็อพเพอร์ตี้สำหรับออบเจ็กต์ เช่น ชื่อภาพยนตร์และวันที่ฉาย
ข้อมูลโค้ดต่อไปนี้แสดงออบเจ็กต์ movie
ที่มีพร็อพเพอร์ตี้ 2 รายการ ได้แก่ movieTitle
และ releaseDate
{
"objectDefinitions": [
{
"name": "movie",
"propertyDefinitions": [
{
"name": "movieTitle",
"isReturnable": true,
"isWildcardSearchable": true,
"textPropertyOptions": {
"retrievalImportance": { "importance": "HIGHEST" },
"operatorOptions": {
"operatorName": "title"
}
},
"displayOptions": {
"displayLabel": "Title"
}
},
{
"name": "releaseDate",
"isReturnable": true,
"isSortable": true,
"datePropertyOptions": {
"operatorOptions": {
"operatorName": "released",
"lessThanOperatorName": "releasedbefore",
"greaterThanOperatorName": "releasedafter"
}
},
"displayOptions": {
"displayLabel": "Release date"
}
...
]
}
]
}
PropertyDefinition ประกอบด้วยรายการต่อไปนี้
- สตริง
name
- รายการตัวเลือกที่ไม่จำเป็นต้องเข้าใจประเภทก็ได้ เช่น
isReturnable
ในข้อมูลโค้ดก่อนหน้า - ประเภทและตัวเลือกเฉพาะประเภทที่เกี่ยวข้องของประเภทนั้นๆ เช่น
textPropertyOptions
และretrievalImportance
ในข้อมูลโค้ดก่อนหน้านี้ operatorOptions
ที่อธิบายวิธีใช้พร็อพเพอร์ตี้เป็นโอเปอเรเตอร์การค้นหาdisplayOptions
อย่างน้อย 1 รายการ เช่นdisplayLabel
ในข้อมูลโค้ดก่อนหน้า
name
ของพร็อพเพอร์ตี้ต้องไม่ซ้ำกันภายในออบเจ็กต์ที่มีอยู่ แต่สามารถใช้ชื่อเดียวกันในออบเจ็กต์และออบเจ็กต์ย่อยอื่นๆ ได้
ในรูปที่ 1 มีการกำหนดชื่อและวันที่เผยแพร่ของภาพยนตร์ 2 ครั้ง คือ 1 ครั้งในออบเจ็กต์ movie
และอีกครั้งในออบเจ็กต์ย่อย filmography
ของออบเจ็กต์ person
สคีมานี้ใช้ช่อง movieTitle
ซ้ำเพื่อให้สคีมารองรับลักษณะการค้นหา 2 ประเภทดังนี้
- แสดงผลการค้นหาภาพยนตร์เมื่อผู้ใช้ค้นหาชื่อภาพยนตร์
- แสดงผลการค้นหาบุคคลเมื่อผู้ใช้ค้นหาชื่อภาพยนตร์ที่นักแสดงแสดง
ในทํานองเดียวกัน สคีมาจะใช้ช่อง releaseDate
ซ้ำเนื่องจากมีความหมายเหมือนกันสำหรับช่อง movieTitle
ทั้ง 2 ช่อง
ในการพัฒนาสคีมาของคุณเอง ให้พิจารณาวิธีที่ที่เก็บของคุณอาจมีช่องที่เกี่ยวข้องซึ่งมีข้อมูลที่คุณต้องการประกาศมากกว่า 1 ครั้งในสคีมา
เพิ่มตัวเลือกที่เข้าใจได้โดยไม่จำเป็นต้องเข้าใจการพิมพ์
PropertyDefinition จะแสดงรายการตัวเลือกฟังก์ชันการค้นหาทั่วไปที่พบได้ทั่วไปสำหรับพร็อพเพอร์ตี้ทั้งหมด โดยไม่คำนึงถึงประเภทข้อมูล
isReturnable
- ระบุว่าพร็อพเพอร์ตี้ระบุข้อมูลที่ควรจะแสดงในผลการค้นหาผ่าน API การค้นหาหรือไม่ พร็อพเพอร์ตี้ภาพยนตร์ตัวอย่าง ทั้งหมดสามารถแสดงผลได้ พร็อพเพอร์ตี้ที่ส่งกลับไม่ได้อาจใช้ในการค้นหาหรือจัดอันดับผลการค้นหาโดยไม่ส่งกลับไปให้ผู้ใช้isRepeatable
- ระบุว่าพร็อพเพอร์ตี้นั้นอนุญาตให้มีหลายค่าหรือไม่ เช่น ภาพยนตร์มีวันที่เผยแพร่เพียงวันเดียว แต่มีนักแสดงหลายคนได้isSortable
- ระบุว่าพร็อพเพอร์ตี้นี้ใช้จัดเรียงได้ ซึ่งไม่เป็นความจริงสำหรับพร็อพเพอร์ตี้ที่ใช้ซ้ำได้ เช่น ผลลัพธ์ของภาพยนตร์อาจจัดเรียงตามวันที่เผยแพร่หรือการจัดประเภทผู้ชมisFacetable
- ระบุว่าสามารถใช้พร็อพเพอร์ตี้ในการสร้างfacets Facet จะใช้เพื่อปรับแต่งผลการค้นหาที่ผู้ใช้จะเห็นผลการค้นหาเบื้องต้น แล้วเพิ่มเกณฑ์หรือข้อมูลประกอบเพื่อปรับแต่งผลการค้นหาเหล่านั้นเพิ่มเติม ตัวเลือกนี้ไม่สามารถเป็นจริงสำหรับพร็อพเพอร์ตี้ที่มีประเภทเป็นออบเจ็กต์ และisReturnable
ต้องเป็น "จริง" เพื่อตั้งค่าตัวเลือกนี้ สุดท้าย ตัวเลือกนี้รองรับเฉพาะคุณสมบัติ enum, บูลีน และข้อความเท่านั้น เช่น ในสคีมาตัวอย่าง เราอาจสร้าง Facetable ของgenre
,actorName
,userRating
และmpaaRating
เพื่ออนุญาตให้มีการใช้สำหรับการปรับแต่งผลการค้นหาแบบอินเทอร์แอกทีฟisWildcardSearchable
จะระบุว่าผู้ใช้ค้นหาพร็อพเพอร์ตี้นี้โดยใช้ไวลด์การ์ดได้ ตัวเลือกนี้ใช้ได้เฉพาะกับคุณสมบัติของข้อความเท่านั้น วิธีการทำงานของการค้นหาโดยใช้ไวลด์การ์ดในช่องข้อความจะขึ้นอยู่กับค่าที่ตั้งค่าไว้ในช่อง exactMatchWithOperator หากตั้งค่าexactMatchWithOperator
เป็นtrue
ระบบจะแปลงค่าข้อความเป็นค่าอะตอมค่าหนึ่งและจะใช้การค้นหาโดยใช้ไวลด์การ์ดกับค่าดังกล่าว เช่น หากค่าข้อความคือscience-fiction
คำค้นหาไวลด์การ์ดscience-*
จะตรงกับค่าดังกล่าว หากตั้งค่าexactMatchWithOperator
เป็นfalse
ค่าข้อความจะมีการแปลงเป็นโทเค็นและจะทำการค้นหาโดยใช้สัญลักษณ์ตัวแทนกับโทเค็นแต่ละรายการ ตัวอย่างเช่น หากค่าข้อความคือ "นิยายวิทยาศาสตร์" การค้นหาไวลด์การ์ดsci*
หรือfi*
จะจับคู่กับรายการ แต่science-*
จะไม่ตรง
พารามิเตอร์ฟังก์ชันการค้นหาทั่วไปเหล่านี้เป็นค่าบูลีนทั้งหมด โดยมีค่าเริ่มต้นเป็น false
และต้องตั้งค่าเป็น true
จึงจะใช้ได้
ตารางต่อไปนี้แสดงพารามิเตอร์บูลีนที่ตั้งค่าเป็น true
สำหรับพร็อพเพอร์ตี้ทั้งหมดของออบเจ็กต์ movie
พร็อพเพอร์ตี้ | isReturnable |
isRepeatable |
isSortable |
isFacetable |
isWildcardSearchable |
---|---|---|---|---|---|
movieTitle |
จริง | จริง | |||
releaseDate |
จริง | จริง | |||
genre |
จริง | จริง | จริง | ||
duration |
จริง | ||||
actorName |
จริง | จริง | จริง | จริง | |
userRating |
จริง | จริง | |||
mpaaRating |
จริง | จริง |
ทั้ง genre
และ actorName
ตั้งค่า isRepeatable
เป็น true
เนื่องจากภาพยนตร์อาจมีมากกว่า 1 ประเภทและมักจะมีนักแสดงมากกว่า 1 คน ไม่สามารถจัดเรียงพร็อพเพอร์ตี้ได้หากเป็นพร็อพเพอร์ตี้ที่ทำซ้ำได้หรืออยู่ในออบเจ็กต์ย่อยที่ซ้ำได้
กำหนดประเภท
ส่วนข้อมูลอ้างอิง PropertyDefinition จะแสดงรายการ xxPropertyOptions
หลายรายการโดยที่ xx
เป็นประเภทที่เฉพาะเจาะจง เช่น boolean
ในการตั้งค่าประเภทข้อมูลของพร็อพเพอร์ตี้ คุณต้องกำหนดออบเจ็กต์ประเภทข้อมูลที่เหมาะสม การกำหนดออบเจ็กต์ประเภทข้อมูลสำหรับพร็อพเพอร์ตี้จะสร้างประเภทข้อมูลของพร็อพเพอร์ตี้นั้น เช่น การกำหนด textPropertyOptions
สำหรับพร็อพเพอร์ตี้ movieTitle
บ่งบอกว่าชื่อภาพยนตร์เป็นข้อความประเภท ข้อมูลโค้ดต่อไปนี้แสดงพร็อพเพอร์ตี้ movieTitle
ที่มี textPropertyOptions
ตั้งค่าประเภทข้อมูล
{
"name": "movieTitle",
"isReturnable": true,
"isWildcardSearchable": true,
"textPropertyOptions": {
...
},
...
},
พร็อพเพอร์ตี้หนึ่งมีข้อมูลเชื่อมโยงได้เพียงประเภทเดียว ตัวอย่างเช่น ในสคีมาภาพยนตร์ของเรา releaseDate
จะเป็นได้เฉพาะวันที่ (เช่น 2016-01-13
) หรือสตริง
(เช่น January 13, 2016
) แต่ไม่ใช่ทั้ง 2 อย่าง
ออบเจ็กต์ประเภทข้อมูลที่ใช้ระบุประเภทข้อมูลสำหรับพร็อพเพอร์ตี้ในสคีมาภาพยนตร์ตัวอย่างมีดังนี้
พร็อพเพอร์ตี้ | ออบเจ็กต์ประเภทข้อมูล |
---|---|
movieTitle |
textPropertyOptions |
releaseDate |
datePropertyOptions |
genre |
enumPropertyOptions |
duration |
textPropertyOptions |
actorName |
textPropertyOptions |
userRating |
integerPropertyOptions |
mpaaRating |
textPropertyOptions |
ประเภทข้อมูลที่คุณเลือกสําหรับพร็อพเพอร์ตี้จะขึ้นอยู่กับ Use Case ที่คาดไว้
ในสถานการณ์ที่จินตนาการไว้ของสคีมาภาพยนตร์นี้ ผู้ใช้ต้องการจัดเรียงผลการค้นหาตามลำดับเวลา ดังนั้น releaseDate
จึงเป็นออบเจ็กต์วันที่
ตัวอย่างเช่น หากมีกรณีการใช้งานที่คาดไว้สำหรับการเปรียบเทียบการเผยแพร่ในเดือนธันวาคมตลอดหลายปีที่ผ่านมากับการเผยแพร่ในเดือนมกราคม รูปแบบสตริงก็อาจเป็นประโยชน์
กำหนดค่าตัวเลือกที่เจาะจงประเภท
ส่วนข้อมูลอ้างอิง PropertyDefinition จะลิงก์ไปยังตัวเลือกสำหรับแต่ละประเภท ตัวเลือกที่เจาะจงประเภทส่วนใหญ่จะไม่บังคับ ยกเว้นรายการ possibleValues
ใน enumPropertyOptions
นอกจากนี้ ตัวเลือก orderedRanking
ยังช่วยให้คุณจัดอันดับค่าเปรียบเทียบกันเองได้ด้วย ข้อมูลต่อไปนี้แสดงพร็อพเพอร์ตี้ movieTitle
ที่มี textPropertyOptions
การตั้งค่าประเภทข้อมูล และตัวเลือกเฉพาะประเภท retrievalImportance
{
"name": "movieTitle",
"isReturnable": true,
"isWildcardSearchable": true,
"textPropertyOptions": {
"retrievalImportance": { "importance": "HIGHEST" },
...
},
...
}
ตัวเลือกเฉพาะประเภทเพิ่มเติมที่ใช้ในสคีมาตัวอย่างมีดังนี้
พร็อพเพอร์ตี้ | ประเภท | ตัวเลือกเฉพาะประเภท |
---|---|---|
movieTitle |
textPropertyOptions |
retrievalImportance |
releaseDate |
datePropertyOptions |
|
genre |
enumPropertyOptions |
|
duration |
textPropertyOptions |
|
actorName |
textPropertyOptions |
|
userRating |
integerPropertyOptions |
orderedRanking maximumValue |
mpaaRating |
textPropertyOptions |
กำหนดตัวเลือกโอเปอเรเตอร์
นอกเหนือจากตัวเลือกที่เจาะจงประเภทแล้ว แต่ละประเภทยังมีชุดตัวเลือกที่ไม่บังคับ
operatorOptions
ตัวเลือกเหล่านี้อธิบายวิธีใช้พร็อพเพอร์ตี้เป็นโอเปอเรเตอร์การค้นหา ข้อมูลโค้ดต่อไปนี้แสดงพร็อพเพอร์ตี้ movieTitle
ที่มี textPropertyOptions
ตั้งค่าประเภทข้อมูล พร้อมตัวเลือกที่เจาะจงประเภท retrievalImportance
และ operatorOptions
{
"name": "movieTitle",
"isReturnable": true,
"isWildcardSearchable": true,
"textPropertyOptions": {
"retrievalImportance": { "importance": "HIGHEST" },
"operatorOptions": {
"operatorName": "title"
}
},
...
}
ทุกๆ operatorOptions
มี operatorName
เช่น title
สำหรับ movieTitle
ชื่อโอเปอเรเตอร์คือโอเปอเรเตอร์การค้นหาสำหรับพร็อพเพอร์ตี้ โอเปอเรเตอร์การค้นหาคือพารามิเตอร์จริงที่คุณคาดว่าผู้ใช้จะใช้เมื่อจำกัดการค้นหา เช่น ในการค้นหาภาพยนตร์ตามชื่อเรื่อง ผู้ใช้ต้องพิมพ์ title:movieName
ซึ่ง movieName
คือชื่อของภาพยนตร์
ชื่อโอเปอเรเตอร์ไม่จำเป็นต้องเหมือนกับชื่อพร็อพเพอร์ตี้ คุณควรใช้ชื่อโอเปอเรเตอร์ที่แสดงถึงคำทั่วไปที่ผู้ใช้ในองค์กรใช้ ตัวอย่างเช่น หากผู้ใช้เลือกใช้คำว่า "name" แทน "title" สำหรับภาพยนตร์ ชื่อโอเปอเรเตอร์ก็ควรตั้งค่าเป็น "name"
คุณใช้ชื่อโอเปอเรเตอร์เดียวกันสำหรับพร็อพเพอร์ตี้หลายรายการได้ตราบใดที่พร็อพเพอร์ตี้ทั้งหมดแก้ไขเป็นประเภทเดียวกัน เมื่อใช้ชื่อโอเปอเรเตอร์ที่แชร์ระหว่างการค้นหา ระบบจะดึงข้อมูลพร็อพเพอร์ตี้ทั้งหมดที่ใช้ชื่อโอเปอเรเตอร์ดังกล่าว ตัวอย่างเช่น สมมติว่าออบเจ็กต์ภาพยนตร์มีพร็อพเพอร์ตี้ plotSummary
และ plotSynopsis
และพร็อพเพอร์ตี้แต่ละรายการมี operatorName
เป็น plot
ตราบใดที่พร็อพเพอร์ตี้ทั้ง 2 รายการนี้เป็นข้อความ (textPropertyOptions
) คำค้นหาเดียวที่ใช้โอเปอเรเตอร์การค้นหา plot
จะเรียกข้อมูลทั้ง 2 รายการ
นอกเหนือจาก operatorName
พร็อพเพอร์ตี้ที่จัดเรียงได้อาจมีช่อง lessThanOperatorName
และ greaterThanOperatorName
ใน operatorOptions
ผู้ใช้สามารถใช้ตัวเลือกเหล่านี้เพื่อสร้างการค้นหาโดยเปรียบเทียบกับค่าที่ส่ง
สุดท้าย textOperatorOptions
มีช่อง exactMatchWithOperator
ใน operatorOptions
หากตั้งค่า exactMatchWithOperator
เป็น true
สตริงการค้นหาต้องตรงกับค่าพร็อพเพอร์ตี้ทั้งหมด ไม่ใช่เฉพาะในข้อความ
ระบบจะถือว่าค่าข้อความเป็นค่าอะตอมค่าหนึ่งในการค้นหาโอเปอเรเตอร์และการจับคู่ข้อมูลประกอบ
เช่น ลองจัดทำดัชนีออบเจ็กต์หนังสือหรือภาพยนตร์ด้วยพร็อพเพอร์ตี้ประเภท
ประเภทข่าวอาจรวมถึง "นิยายวิทยาศาสตร์" "วิทยาศาสตร์" และ "เรื่องแต่ง" หากตั้งค่า exactMatchWithOperator
เป็น false
หรือละเว้นไว้ การค้นหาประเภทหรือเลือกข้อมูลประกอบ "วิทยาศาสตร์" หรือ "นิยาย" จะแสดงผลลัพธ์สำหรับ "นิยายวิทยาศาสตร์" ด้วย เนื่องจากข้อความแปลงเป็นโทเค็น และโทเค็น "วิทยาศาสตร์" และ "เรื่องแต่ง" มีอยู่ใน "นิยายวิทยาศาสตร์"
เมื่อ exactMatchWithOperator
คือ true
ระบบจะถือว่าข้อความเป็นโทเค็นเดียว ดังนั้นทั้ง "วิทยาศาสตร์" และ "นิยาย" จะไม่จับคู่กับ "นิยายวิทยาศาสตร์"
(ไม่บังคับ) เพิ่มส่วน displayOptions
ส่วน displayOptions
จะมีหรือไม่ก็ได้ในตอนท้ายของส่วน propertyDefinition
ส่วนนี้ประกอบด้วยสตริง displayLabel
1 รายการ
displayLabel
เป็นป้ายกำกับข้อความที่แนะนำและใช้งานง่ายสำหรับพร็อพเพอร์ตี้ หากกำหนดค่าพร็อพเพอร์ตี้สำหรับการแสดงผลโดยใช้ ObjectDisplayOptions ป้ายกำกับนี้จะแสดงที่ด้านหน้าของพร็อพเพอร์ตี้ หากมีการกำหนดค่าพร็อพเพอร์ตี้สำหรับจอแสดงผลและไม่ได้กำหนด displayLabel
ระบบจะแสดงเฉพาะค่าพร็อพเพอร์ตี้เท่านั้น
ข้อมูลโค้ดต่อไปนี้แสดงพร็อพเพอร์ตี้ movieTitle
ที่ตั้งค่า displayLabel
เป็น "ชื่อ"
{
"name": "movieTitle",
"isReturnable": true,
"isWildcardSearchable": true,
"textPropertyOptions": {
"retrievalImportance": { "importance": "HIGHEST" },
"operatorOptions": {
"operatorName": "title"
}
},
"displayOptions": {
"displayLabel": "Title"
}
},
ต่อไปนี้คือค่า displayLabel
สำหรับพร็อพเพอร์ตี้ทั้งหมดของออบเจ็กต์ movie
ในสคีมาตัวอย่าง
พร็อพเพอร์ตี้ | displayLabel |
---|---|
movieTitle |
Title |
releaseDate |
Release date |
genre |
Genre |
duration |
Run length |
actorName |
Actor |
userRating |
Audience score |
mpaaRating |
MPAA rating |
(ไม่บังคับ) เพิ่มส่วน suggestionFilteringOperators[]
จะมีส่วน suggestionFilteringOperators[]
ที่ไม่บังคับอยู่ในตอนท้ายของส่วน propertyDefinition
ใดๆ ใช้ส่วนนี้เพื่อกำหนดพร็อพเพอร์ตี้ที่ใช้กรองคำแนะนำที่เติมข้อความอัตโนมัติ เช่น คุณอาจกำหนดโอเปอเรเตอร์ของ genre
เพื่อกรองคำแนะนำตามประเภทภาพยนตร์ที่ผู้ใช้ต้องการ จากนั้น เมื่อผู้ใช้พิมพ์คำค้นหา ระบบจะแสดงเฉพาะภาพยนตร์ที่ตรงกับประเภทที่ต้องการเท่านั้น ซึ่งเป็นส่วนหนึ่งของการแนะนำการเติมข้อความอัตโนมัติ
ลงทะเบียนสคีมา
หากต้องการให้ข้อมูลที่มีโครงสร้างแสดงผลจากคำค้นหา Cloud Search คุณต้องลงทะเบียนสคีมากับบริการสคีมา Cloud Search การลงทะเบียนสคีมาต้องใช้รหัสแหล่งข้อมูลที่คุณได้รับในขั้นตอนเริ่มต้นแหล่งข้อมูล
ออกคำขอ UpdateSchema เพื่อลงทะเบียนสคีมาโดยใช้รหัสแหล่งข้อมูล
ตามรายละเอียดในหน้าอ้างอิง UpdateSchema โปรดออกคำขอ HTTP ต่อไปนี้เพื่อลงทะเบียนสคีมา
PUT https://cloudsearch.googleapis.com/v1/indexing/{name=datasources/*}/schema
ส่วนเนื้อหาของคำขอควรมีข้อมูลต่อไปนี้
{ "validateOnly": // true or false, "schema": { // ... Your complete schema object ... } }
ใช้ตัวเลือก validateOnly
เพื่อทดสอบความถูกต้องของสคีมาโดยไม่ต้องลงทะเบียนสคีมานั้นจริง
จัดทำดัชนีข้อมูลของคุณ
เมื่อลงทะเบียนสคีมาแล้ว ให้เติมแหล่งข้อมูลโดยใช้การเรียกดัชนี การจัดทำดัชนีมักจะทำในเครื่องมือเชื่อมต่อเนื้อหา
เมื่อใช้สคีมาภาพยนตร์ คำขอจัดทำดัชนี REST API สำหรับภาพยนตร์เรื่องเดียวจะมีลักษณะดังนี้
{
"name": "datasource/<data_source_id>/items/titanic",
"acl": {
"readers": [
{
"gsuitePrincipal": {
"gsuiteDomain": true
}
}
]
},
"metadata": {
"title": "Titanic",
"sourceRepositoryUrl": "http://www.imdb.com/title/tt2234155/?ref_=nv_sr_1",
"objectType": "movie"
},
"structuredData": {
"object": {
"properties": [
{
"name": "movieTitle",
"textValues": {
"values": [
"Titanic"
]
}
},
{
"name": "releaseDate",
"dateValues": {
"values": [
{
"year": 1997,
"month": 12,
"day": 19
}
]
}
},
{
"name": "actorName",
"textValues": {
"values": [
"Leonardo DiCaprio",
"Kate Winslet",
"Billy Zane"
]
}
},
{
"name": "genre",
"enumValues": {
"values": [
"Drama",
"Action"
]
}
},
{
"name": "userRating",
"integerValues": {
"values": [
8
]
}
},
{
"name": "mpaaRating",
"textValues": {
"values": [
"PG-13"
]
}
},
{
"name": "duration",
"textValues": {
"values": [
"3 h 14 min"
]
}
}
]
}
},
"content": {
"inlineContent": "A seventeen-year-old aristocrat falls in love with a kind but poor artist aboard the luxurious, ill-fated R.M.S. Titanic.",
"contentFormat": "TEXT"
},
"version": "01",
"itemType": "CONTENT_ITEM"
}
ดูว่าค่า movie
ในช่อง objectType
ตรงกับชื่อคำจำกัดความออบเจ็กต์ในสคีมาอย่างไร เมื่อจับคู่ทั้ง 2 ค่านี้ Cloud Search จะรู้ว่าต้องใช้ออบเจ็กต์สคีมาใดระหว่างการจัดทำดัชนี
นอกจากนี้ โปรดสังเกตวิธีที่การจัดทำดัชนีของพร็อพเพอร์ตี้สคีมา releaseDate
ใช้พร็อพเพอร์ตี้ย่อย year
, month
และ day
ที่รับช่วงมาเนื่องจากถูกกำหนดเป็นประเภทข้อมูล date
ผ่านการใช้ datePropertyOptions
ในการกำหนด
แต่เนื่องจากไม่ได้กำหนด year
, month
และ day
ในสคีมา คุณจึงค้นหาพร็อพเพอร์ตี้รายการใดรายการหนึ่งเหล่านั้นไม่ได้ (เช่น year
) แยกกัน
รวมทั้งระบุวิธีจัดทำดัชนีพร็อพเพอร์ตี้ที่ทำซ้ำได้ actorName
โดยใช้รายการค่า
การระบุปัญหาที่อาจเกิดขึ้นกับการจัดทำดัชนี
ปัญหาที่พบบ่อยที่สุด 2 ประการเกี่ยวกับสคีมาและการจัดทำดัชนี ได้แก่
คำขอจัดทำดัชนีของคุณมีออบเจ็กต์สคีมาหรือชื่อพร็อพเพอร์ตี้ที่ไม่ได้ลงทะเบียนกับบริการสคีมา ปัญหานี้ทำให้พร็อพเพอร์ตี้หรือออบเจ็กต์ ถูกละเว้น
คำขอจัดทำดัชนีของคุณมีพร็อพเพอร์ตี้ที่มีค่าประเภทแตกต่างจากประเภทที่ลงทะเบียนในสคีมา ซึ่งปัญหานี้ทำให้ Cloud Search แสดงผลข้อผิดพลาดขณะจัดทำดัชนี
ทดสอบสคีมาด้วยคำค้นหาหลายประเภท
ก่อนที่จะลงทะเบียนสคีมาสำหรับที่เก็บข้อมูลที่ใช้งานจริงขนาดใหญ่ ลองทดสอบกับที่เก็บข้อมูลทดสอบขนาดเล็กกว่า การทดสอบด้วยที่เก็บทดสอบขนาดเล็กจะช่วยให้คุณปรับเปลี่ยนสคีมาได้อย่างรวดเร็วและลบข้อมูลที่จัดทำดัชนีแล้ว โดยไม่ส่งผลกระทบต่อดัชนีขนาดใหญ่กว่าหรือดัชนีเวอร์ชันที่ใช้งานจริงที่มีอยู่ สำหรับที่เก็บข้อมูลทดสอบ ให้สร้าง ACL ที่ให้สิทธิ์เฉพาะผู้ใช้ทดสอบเพื่อให้ผู้ใช้รายอื่นไม่เห็นข้อมูลนี้ในผลการค้นหาของ Search
หากต้องการสร้างอินเทอร์เฟซการค้นหาเพื่อตรวจสอบความถูกต้องของคำค้นหา โปรดดูอินเทอร์เฟซการค้นหา
ส่วนนี้ประกอบด้วยตัวอย่างคำค้นหาต่างๆ มากมายที่คุณอาจใช้เพื่อทดสอบสคีมาภาพยนตร์
ทดสอบด้วยคำค้นหาทั่วไป
คำค้นหาทั่วไปจะแสดงรายการทั้งหมดในแหล่งข้อมูลที่มีสตริงที่เฉพาะเจาะจง คุณอาจใช้อินเทอร์เฟซการค้นหาในการค้นหาทั่วไปกับแหล่งข้อมูลภาพยนตร์ได้โดยพิมพ์คำว่า "titanic" แล้วกด Return ภาพยนตร์ทั้งหมดที่มีคำว่า "ไททานิก" ควรจะแสดงในผลการค้นหา
ทดสอบกับโอเปอเรเตอร์
การเพิ่มโอเปอเรเตอร์ลงในการค้นหาจะจำกัดผลลัพธ์ให้เหลือเพียงรายการที่ตรงกับค่าของโอเปอเรเตอร์นั้น เช่น คุณอาจต้องการใช้โอเปอเรเตอร์ actor
เพื่อค้นหาภาพยนตร์ทั้งหมดที่นำแสดงโดยนักแสดงคนใดคนหนึ่ง เมื่อใช้อินเทอร์เฟซการค้นหา คุณสามารถดำเนินการค้นหาโอเปอเรเตอร์นี้ได้ง่ายๆ โดยพิมพ์คู่ operator=value เช่น "actor:Zane" และกด Return ภาพยนตร์ทั้งหมดที่มี Zane เป็นนักแสดง
ควรจะแสดงในผลการค้นหา
ปรับแต่งสคีมาของคุณ
หลังจากมีการใช้สคีมาและข้อมูลของคุณแล้ว ให้ตรวจสอบสิ่งที่ใช้งานได้และไม่ได้ผลสำหรับผู้ใช้ต่อไป คุณควรพิจารณาปรับสคีมาในสถานการณ์ต่อไปนี้
- การจัดทําดัชนีช่องที่ไม่เคยมีการจัดทำดัชนีมาก่อน เช่น ผู้ใช้อาจค้นหาภาพยนตร์ตามชื่อผู้กำกับซ้ำๆ คุณจึงอาจปรับสคีมาเพื่อรองรับชื่อผู้กำกับเป็นโอเปอเรเตอร์
- การเปลี่ยนชื่อโอเปอเรเตอร์การค้นหาตามความคิดเห็นของผู้ใช้ ชื่อโอเปอเรเตอร์ ควรเข้าใจง่าย ถ้าผู้ใช้ของคุณ "จำ" ชื่อโอเปอเรเตอร์ผิด อย่างต่อเนื่อง คุณอาจพิจารณาเปลี่ยนชื่อ
การจัดทำดัชนีอีกครั้งหลังการเปลี่ยนแปลงสคีมา
การเปลี่ยนค่าต่อไปนี้ในสคีมาไม่กำหนดให้คุณต้องจัดทำดัชนีข้อมูลอีกครั้ง คุณเพียงแค่ส่งคำขอ UpdateSchema ใหม่ จากนั้นดัชนีของคุณจะยังคงทำงานต่อไป โดยทำดังนี้
- ชื่อโอเปอเรเตอร์
- จำนวนเต็มต่ำสุดและสูงสุด
- การจัดอันดับแบบเรียงตามลำดับจำนวนเต็มและ enum
- ตัวเลือกความใหม่
- ตัวเลือกการแสดงผล
สำหรับการเปลี่ยนแปลงต่อไปนี้ ข้อมูลที่จัดทำดัชนีไว้ก่อนหน้านี้จะยังคงทำงานต่อไปตามสคีมาที่ลงทะเบียนไว้ก่อนหน้า อย่างไรก็ตาม คุณต้องจัดทำดัชนีรายการที่มีอยู่อีกครั้งเพื่อดูการเปลี่ยนแปลงตามสคีมาที่อัปเดต หากมีการเปลี่ยนแปลงต่อไปนี้
- การเพิ่มหรือนําพร็อพเพอร์ตี้หรือออบเจ็กต์ใหม่ออก
- กำลังเปลี่ยน
isReturnable
,isFacetable
หรือisSortable
จากfalse
เป็นtrue
คุณควรตั้งค่า isFacetable
หรือ isSortable
เป็น true
เฉพาะเมื่อมีกรณีการใช้งานที่ชัดเจนและจำเป็น
และสุดท้าย เมื่อคุณอัปเดตสคีมาด้วยการทำเครื่องหมายพร็อพเพอร์ตี้ isSuggestable
คุณจะต้องจัดทำดัชนีข้อมูลอีกครั้ง ซึ่งทำให้เกิดความล่าช้าในการใช้การเติมข้อความอัตโนมัติในพร็อพเพอร์ตี้นั้น
การเปลี่ยนแปลงพร็อพเพอร์ตี้ที่ไม่อนุญาต
ไม่อนุญาตให้เปลี่ยนแปลงสคีมาบางอย่าง แม้ว่าคุณจะจัดทำดัชนีข้อมูลอีกครั้งก็ตาม เนื่องจากการเปลี่ยนแปลงจะทำให้ดัชนีเสียหายหรือสร้างผลการค้นหาที่ไม่ดีหรือไม่สอดคล้องกัน ซึ่งรวมถึงการเปลี่ยนแปลงต่างๆ ต่อไปนี้
- ประเภทข้อมูลพร็อพเพอร์ตี้
- ชื่อพร็อพเพอร์ตี้
- การตั้งค่า
exactMatchWithOperator
- การตั้งค่า
retrievalImportance
อย่างไรก็ตาม ก็มีวิธีการหลีกเลี่ยงข้อจำกัดนี้
เปลี่ยนแปลงสคีมาที่ซับซ้อน
Cloud Search ป้องกันการเปลี่ยนแปลงบางประเภทในคำขอ UpdateSchema หลังจากจัดทำดัชนีที่เก็บแล้ว เพื่อหลีกเลี่ยงการเปลี่ยนแปลงที่อาจสร้างผลการค้นหาที่ไม่มีคุณภาพหรือดัชนีการค้นหาที่ไม่สมบูรณ์ เช่น คุณจะไม่สามารถเปลี่ยนแปลงประเภทข้อมูลหรือชื่อพร็อพเพอร์ตี้หลังจากตั้งค่าแล้ว การเปลี่ยนแปลงเหล่านี้ไม่สามารถทำได้ผ่านคำขอ UpdateSchema แบบง่ายๆ แม้ว่าคุณจะจัดทำดัชนีข้อมูลอีกครั้งแล้วก็ตาม
ในสถานการณ์ที่คุณต้องทำการเปลี่ยนแปลงที่ไม่อนุญาตกับสคีมา โดยมักจะทำชุดการเปลี่ยนแปลงที่อนุญาตเพื่อให้มีผลแบบเดียวกันได้ โดยทั่วไปการดำเนินการนี้จะย้ายข้อมูลพร็อพเพอร์ตี้ที่จัดทำดัชนีจากคำจำกัดความออบเจ็กต์เก่าไปยังพร็อพเพอร์ตี้ที่ใหม่กว่า จากนั้นจึงส่งคำขอจัดทำดัชนีที่ใช้เฉพาะพร็อพเพอร์ตี้ที่ใหม่กว่า
ขั้นตอนต่อไปนี้แสดงวิธีเปลี่ยนประเภทข้อมูลหรือชื่อของพร็อพเพอร์ตี้
- เพิ่มพร็อพเพอร์ตี้ใหม่ลงในคำจำกัดความของออบเจ็กต์ในสคีมา ใช้ชื่ออื่นจากพร็อพเพอร์ตี้ที่ต้องการเปลี่ยน
- ส่งคำขอ UpdateSchema ด้วยคำจำกัดความใหม่ อย่าลืมส่งสคีมาทั้งหมดรวมถึงพร็อพเพอร์ตี้ใหม่และพร็อพเพอร์ตี้เก่าไปในคำขอ
ทดแทนดัชนีจากที่เก็บข้อมูล ในการทดแทนดัชนี ให้ส่งคำขอการจัดทำดัชนีทั้งหมดโดยใช้พร็อพเพอร์ตี้ใหม่ แต่ไม่ใช่พร็อพเพอร์ตี้เก่า เนื่องจากจะทำให้ระบบนับการค้นหาที่ตรงกันซ้ำ
- ในระหว่างการทดแทนการจัดทำดัชนี ให้ตรวจสอบพร็อพเพอร์ตี้ใหม่และตั้งค่าค่าเริ่มต้นเป็นพร็อพเพอร์ตี้เก่าเพื่อหลีกเลี่ยงลักษณะการทำงานที่ไม่สอดคล้องกัน
- หลังจากโฆษณาทดแทนเสร็จสมบูรณ์แล้ว ให้เรียกใช้การค้นหาทดสอบเพื่อยืนยัน
ลบพร็อพเพอร์ตี้เดิม ส่งคำขอ UpdateSchema อีกครั้งโดยไม่มีชื่อพร็อพเพอร์ตี้เดิม และหยุดใช้ชื่อพร็อพเพอร์ตี้เดิมในคำขอจัดทำดัชนีในอนาคต
ย้ายข้อมูลการใช้งานพร็อพเพอร์ตี้เดิมไปยังพร็อพเพอร์ตี้ใหม่ ตัวอย่างเช่น หากคุณเปลี่ยนชื่อพร็อพเพอร์ตี้จากผู้สร้างเป็นผู้แต่ง คุณต้องอัปเดตโค้ดการค้นหาเพื่อใช้ผู้เขียนที่ก่อนหน้านี้อ้างอิงถึงผู้สร้าง
Cloud Search จะเก็บบันทึกพร็อพเพอร์ตี้หรือออบเจ็กต์ที่ลบไปแล้วเป็นเวลา 30 วันเพื่อป้องกันการใช้งานซ้ำซึ่งอาจก่อให้เกิดผลการจัดทำดัชนีที่ไม่คาดคิด ภายใน 30 วันดังกล่าว คุณควรย้ายข้อมูลออกจากการใช้งานออบเจ็กต์หรือพร็อพเพอร์ตี้ที่ถูกลบทั้งหมด รวมถึงยกเว้นไม่ให้มีการขอจัดทำดัชนีในอนาคต วิธีนี้ช่วยให้มั่นใจว่าคุณตัดสินใจที่จะคืนสถานะพร็อพเพอร์ตี้หรือออบเจ็กต์นั้นในภายหลังได้ในลักษณะที่รักษาความถูกต้องของดัชนีไว้
ทราบข้อจำกัดด้านขนาด
Cloud Search กำหนดขีดจำกัดขนาดของออบเจ็กต์และสคีมาของข้อมูลที่มีโครงสร้าง ขีดจำกัดเหล่านี้ ได้แก่
- จำนวนออบเจ็กต์ระดับบนสุดสูงสุดคือ 10 ออบเจ็กต์
- ความลึกสูงสุดของลำดับชั้นข้อมูลที่มีโครงสร้างคือ 10 ระดับ
- จำนวนช่องทั้งหมดในออบเจ็กต์จำกัดอยู่ที่ 1,000 ช่อง ซึ่งรวมถึงจำนวนช่องพื้นฐานและผลรวมของจำนวนช่องในออบเจ็กต์ที่ฝังแต่ละรายการ
ขั้นตอนถัดไป
ขั้นตอนถัดไปที่ทำได้มีดังนี้
สร้างอินเทอร์เฟซการค้นหาเพื่อทดสอบสคีมา
ปรับแต่งสคีมาเพื่อปรับปรุงคุณภาพการค้นหา
จัดโครงสร้างสคีมาเพื่อการแปลความหมายการค้นหาที่มีประสิทธิภาพสูงสุด
ดูวิธีใช้ประโยชน์จากสคีมา
_dictionaryEntry
เพื่อกำหนดคำพ้องความหมายของคำที่ใช้กันโดยทั่วไปในบริษัทของคุณ หากต้องการใช้สคีมา_dictionaryEntry
โปรดดูกำหนดคำพ้องความหมายสร้างเครื่องมือเชื่อมต่อ