สคีมา Google Cloud Search คือโครงสร้าง JSON ที่กำหนดออบเจ็กต์ พร็อพเพอร์ตี้ และตัวเลือกสำหรับการจัดทำดัชนีและการค้นหาข้อมูล ตัวเชื่อมต่อเนื้อหา ใช้สคีมาที่ลงทะเบียนเพื่อจัดโครงสร้างและจัดทำดัชนีข้อมูลที่เก็บ
คุณสร้างสคีมาได้โดยระบุออบเจ็กต์สคีมา JSON ให้กับ API คุณต้อง ลงทะเบียนสคีมาสำหรับแต่ละที่เก็บก่อนจัดทำดัชนีข้อมูล
เอกสารนี้ครอบคลุมพื้นฐานการสร้างสคีมา หากต้องการเพิ่มประสิทธิภาพประสบการณ์การค้นหา โปรดดูปรับปรุงคุณภาพการค้นหา
สร้างสคีมา
ทำตามขั้นตอนต่อไปนี้เพื่อสร้างสคีมา Cloud Search
- ระบุพฤติกรรมของผู้ใช้ที่คาดหวัง
- เริ่มต้นแหล่งข้อมูล
- กำหนดออบเจ็กต์
- กำหนดพร็อพเพอร์ตี้ออบเจ็กต์
- ลงทะเบียนสคีมา
- จัดทำดัชนีข้อมูล
- ทดสอบสคีมา
- ปรับแต่งสคีมา
ระบุพฤติกรรมของผู้ใช้ที่คาดไว้
การคาดการณ์วิธีที่ผู้ใช้ค้นหาจะช่วยกำหนดกลยุทธ์สคีมา สำหรับฐานข้อมูลภาพยนตร์ ผู้ใช้อาจค้นหา "ภาพยนตร์ที่โรเบิร์ต เรดฟอร์ดแสดง" สคีมาของคุณ ต้องรองรับการค้นหาภาพยนตร์ที่มีนักแสดงที่เฉพาะเจาะจง
วิธีปรับสคีมาให้สอดคล้องกับพฤติกรรมของผู้ใช้
- ประเมินคำค้นหาที่หลากหลายจากผู้ใช้ที่แตกต่างกัน
- ระบุชุดข้อมูลเชิงตรรกะหรือออบเจ็กต์ เช่น "ภาพยนตร์"
- ระบุพร็อพเพอร์ตี้ (แอตทริบิวต์) เช่น ชื่อหรือวันที่เผยแพร่
- ระบุค่าที่ถูกต้องสำหรับพร็อพเพอร์ตี้ เช่น "ขุมทรัพย์สุดขอบฟ้า"
- พิจารณาความต้องการในการจัดเรียงและจัดอันดับ เช่น ลำดับตามเวลาหรือการจัดอันดับของผู้ชม
- ระบุพร็อพเพอร์ตี้บริบท เช่น บทบาทงาน เพื่อปรับปรุงคำแนะนำในการเติมข้อความอัตโนมัติ
- แสดงรายการออบเจ็กต์ พร็อพเพอร์ตี้ และค่าตัวอย่างเหล่านี้ ใช้รายการนี้เพื่อ กำหนดตัวเลือกโอเปอเรเตอร์
เริ่มต้นแหล่งข้อมูล
แหล่งข้อมูลแสดงข้อมูลที่เก็บซึ่งจัดทำดัชนีแล้วและจัดเก็บไว้ใน Google Cloud ดูจัดการแหล่งข้อมูลของบุคคลที่สาม เมื่อผู้ใช้คลิกผลการค้นหา Cloud Search จะนำผู้ใช้ไปยังรายการโดยใช้ URL จากคำขอการจัดทำดัชนี
กำหนดออบเจ็กต์
ออบเจ็กต์คือหน่วยพื้นฐานของสคีมา โครงสร้างเชิงตรรกะ เช่น "ภาพยนตร์" หรือ "บุคคล" คือออบเจ็กต์ ออบเจ็กต์แต่ละรายการมีพร็อพเพอร์ตี้ เช่น ชื่อ ระยะเวลา หรือชื่อ
สคีมาคือรายการคำจำกัดความออบเจ็กต์ในแท็ก objectDefinitions
{
"objectDefinitions": [
{ "name": "movie" },
{ "name": "person" }
]
}
ใช้ชื่อที่ไม่ซ้ำกันสำหรับแต่ละออบเจ็กต์ เช่น movie บริการสคีมาใช้ชื่อเหล่านี้
เป็นคีย์ ดู
ObjectDefinition
กำหนดคุณสมบัติของออบเจ็กต์
กำหนดพร็อพเพอร์ตี้ เช่น ชื่อและวันที่เผยแพร่ ในส่วน propertyDefinitions
ใช้
options
สำหรับ
freshnessOptions
(การจัดอันดับ) และ
displayOptions
(ป้ายกำกับ UI)
{
"objectDefinitions": [{
"name": "movie",
"propertyDefinitions": [
{
"name": "movieTitle",
"isReturnable": 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"
}
}
}
]
}]
}
PropertyDefinition ประกอบด้วย
nameสตริง- ตัวเลือกที่ไม่ขึ้นอยู่กับประเภท (เช่น
isReturnable) - ประเภทและตัวเลือกเฉพาะประเภท (เช่น
textPropertyOptions) operatorOptionsสำหรับโอเปอเรเตอร์การค้นหาdisplayOptionsสำหรับป้ายกำกับ UI
คุณสามารถนำชื่อพร็อพเพอร์ตี้มาใช้ซ้ำในออบเจ็กต์ต่างๆ ได้ เช่น movieTitle
อาจปรากฏทั้งในออบเจ็กต์ movie และผลงานของออบเจ็กต์ person
เพิ่มตัวเลือกที่ไม่ขึ้นอยู่กับประเภท
PropertyDefinition
มีตัวเลือกบูลีนเพื่อกำหนดค่าฟังก์ชันการค้นหาสำหรับพร็อพเพอร์ตี้
โดยไม่คำนึงถึงประเภทของพร็อพเพอร์ตี้ ตัวเลือกเหล่านี้มีค่าเริ่มต้นเป็น false และต้องตั้งค่าเป็น
true จึงจะใช้งานได้
isReturnable: ตั้งค่าเป็นtrueหากควรแสดงข้อมูลพร็อพเพอร์ตี้ใน ผลการค้นหาโดยใช้ Query API ใช้พร็อพเพอร์ตี้ที่ส่งคืนไม่ได้ เพื่อค้นหาหรือจัดอันดับได้โดยไม่ต้องปรากฏในผลการค้นหาisRepeatable: ตั้งค่าเป็นtrueหากพร็อพเพอร์ตี้มีได้หลายค่า ตัวอย่างเช่น ภาพยนตร์มีวันที่เผยแพร่ 1 วันที่ แต่มีนักแสดงหลายคนisSortable: ตั้งค่าเป็นtrueหากใช้พร็อพเพอร์ตี้เพื่อจัดเรียงได้ ต้องไม่ใช่trueหากisRepeatableเป็นtrueหรือหากพร็อพเพอร์ตี้อยู่ภายใน ออบเจ็กต์ย่อยที่ทำซ้ำได้isFacetable: ตั้งค่าเป็นtrueหากใช้พร็อพเพอร์ตี้เพื่อสร้างกลุ่มข้อมูล (แอตทริบิวต์ที่ใช้เพื่อปรับแต่งผลการค้นหา) ได้- ต้องมี
isReturnableเป็นtrue - รองรับเฉพาะพร็อพเพอร์ตี้ enum, บูลีน และข้อความ
- ต้องมี
isWildcardSearchable: ตั้งค่าเป็นtrueเพื่ออนุญาตให้ผู้ใช้ทำการค้นหาแบบไวลด์การ์ด ในพร็อพเพอร์ตี้นี้ ตัวเลือกนี้ใช้ได้เฉพาะในพร็อพเพอร์ตี้ข้อความ และลักษณะการทำงานจะขึ้นอยู่กับการตั้งค่าexactMatchWithOperatorดังนี้- หาก
exactMatchWithOperatorเป็นtrueระบบจะถือว่าค่าข้อความเป็นโทเค็นเดียว การค้นหา เช่นscience-*จะตรงกับค่าscience-fiction - หาก
exactMatchWithOperatorเป็นfalseระบบจะทำการโทเค็นค่าข้อความ คำค้นหา เช่นsci*หรือfi*จะตรงกับscience-fictionแต่science-*จะไม่ตรงกัน
- หาก
กำหนดประเภท
ตั้งค่าประเภทข้อมูลโดยกำหนดออบเจ็กต์ตัวเลือกพร็อพเพอร์ตี้ที่เหมาะสม (เช่น
textPropertyOptions) ใช้การแจงนับ (enumPropertyOptions) หากทราบค่าที่เป็นไปได้ทั้งหมด
พร็อพเพอร์ตี้หนึ่งจะมีได้เพียงประเภทข้อมูลเดียว
กำหนดตัวเลือกโอเปอเรเตอร์
operatorOptions อธิบายวิธีการทำงานของพร็อพเพอร์ตี้เป็นตัวดำเนินการค้นหา
operatorOptions ทุกรายการต้องมี operatorName (เช่น title) นี่คือ
พารามิเตอร์ที่ผู้ใช้พิมพ์ในคำค้นหา (เช่น title:titanic) ใช้ชื่อที่เข้าใจง่าย
และแสดงต่อผู้ใช้
คุณแชร์ operatorName ในพร็อพเพอร์ตี้ประเภทเดียวกันได้ การค้นหา
ที่ใช้ชื่อนั้นจะดึงผลลัพธ์จากพร็อพเพอร์ตี้ที่ตรงกันทั้งหมด
พร็อพเพอร์ตี้ที่จัดเรียงได้อาจรวม lessThanOperatorName และ greaterThanOperatorName สำหรับการค้นหาเปรียบเทียบ พร็อพเพอร์ตี้ข้อความสามารถใช้ exactMatchWithOperator เพื่อถือว่าค่าทั้งหมดเป็นโทเค็นเดียว
เพิ่มตัวเลือกการแสดงผล
ส่วน displayOptions ที่ไม่บังคับมี displayLabel ป้ายกำกับนี้เป็นป้ายกำกับที่
ใช้งานง่ายซึ่งแสดงในผลการค้นหา
เพิ่มตัวดำเนินการกรองคำแนะนำ
ใช้ suggestionFilteringOperators[] เพื่อกำหนดพร็อพเพอร์ตี้ที่กรอง
คำแนะนำในการเติมข้อความอัตโนมัติ (เช่น กรองคำแนะนำภาพยนตร์ตาม
ประเภทที่ผู้ใช้ต้องการ) คุณกำหนดตัวกรองคำแนะนำได้เพียง 1 รายการ
ลงทะเบียนสคีมา
ลงทะเบียนสคีมากับบริการสคีมาโดยใช้รหัสแหล่งข้อมูล ส่งคำขอ UpdateSchema
PUT https://cloudsearch.googleapis.com/v1/indexing/{name=datasources/*}/schema
ใช้ validateOnly: true เพื่อทดสอบสคีมาโดยไม่ต้องลงทะเบียน
จัดทำดัชนีข้อมูล
หลังจากลงทะเบียนแล้ว ให้ป้อนข้อมูลในแหล่งข้อมูลโดยใช้การเรียก Index ซึ่งมักจะใช้กับเครื่องมือเชื่อมต่อ
ตัวอย่างคำขอจัดทำดัชนี
{
"name": "datasource/<data_source_id>/items/titanic",
"metadata": {
"title": "Titanic",
"objectType": "movie"
},
"structuredData": {
"object": {
"properties": [{
"name": "movieTitle",
"textValues": { "values": ["Titanic"] }
}]
}
},
"itemType": "CONTENT_ITEM"
}
ทดสอบสคีมา
ทดสอบกับที่เก็บขนาดเล็กก่อนที่จะใช้งานจริง สร้าง ACL ที่จำกัด ผลลัพธ์ให้เฉพาะผู้ใช้ทดสอบ
- คำค้นหาทั่วไป: ค้นหาสตริง (เช่น "titanic") เพื่อดูรายการที่ตรงกันทั้งหมด
- การค้นหาโอเปอเรเตอร์: ใช้โอเปอเรเตอร์ (เช่น
actor:Zane) เพื่อจำกัดผลลัพธ์
ปรับแต่งสคีมา
ตรวจสอบความคิดเห็นของผู้ใช้และปรับสคีมา คุณอาจจัดทำดัชนีฟิลด์ใหม่หรือเปลี่ยนชื่อตัวดำเนินการเพื่อให้เข้าใจได้ง่ายขึ้น
จัดทำดัชนีอีกครั้งหลังจากการเปลี่ยนแปลงสคีมา
คุณไม่จำเป็นต้องจัดทำดัชนีอีกครั้งสำหรับการเปลี่ยนแปลงต่อไปนี้
- ชื่อผู้ให้บริการ
- ขีดจำกัดที่เป็นตัวเลข
- การจัดอันดับตามลำดับ
- ตัวเลือกความสดใหม่หรือการแสดง
คุณต้องจัดทำดัชนีอีกครั้งสำหรับรายการต่อไปนี้
- การเพิ่มหรือนำพร็อพเพอร์ตี้หรือออบเจ็กต์ออก
- การเปลี่ยน
isReturnable,isFacetableหรือisSortableเป็นtrue - การทำเครื่องหมายพร็อพเพอร์ตี้
isSuggestable
การเปลี่ยนแปลงพร็อพเพอร์ตี้ที่ไม่ได้รับอนุญาต
เราไม่อนุญาตให้ทำการเปลี่ยนแปลงที่ทำให้ดัชนีเสียหายหรือทำให้ผลลัพธ์ไม่สอดคล้องกัน ซึ่งรวมถึงการเปลี่ยนแปลงต่อไปนี้
- ชื่อหรือประเภทข้อมูลของพร็อพเพอร์ตี้
exactMatchWithOperatorหรือretrievalImportance
ทำการเปลี่ยนแปลงสคีมาที่ซับซ้อน
หากต้องการทำการเปลี่ยนแปลงที่ไม่ได้รับอนุญาต ให้ย้ายข้อมูลพร็อพเพอร์ตี้จากคำจำกัดความเก่าไปยังคำจำกัดความใหม่โดยทำดังนี้
- เพิ่มพร็อพเพอร์ตี้ใหม่ที่มีชื่ออื่นลงในสคีมา
- ลงทะเบียนสคีมาด้วยพร็อพเพอร์ตี้ทั้งใหม่และเก่า
- เติมดัชนีโดยใช้พร็อพเพอร์ตี้ใหม่เท่านั้น
- ลบพร็อพเพอร์ตี้เก่าออกจากสคีมา
- อัปเดตรหัสคำค้นหาให้ใช้ชื่อพร็อพเพอร์ตี้ใหม่
Cloud Search จะบันทึกรายการที่ถูกลบเป็นเวลา 30 วันเพื่อป้องกันปัญหาการนำกลับมาใช้ซ้ำ
ข้อจำกัดด้านขนาด
- ออบเจ็กต์ระดับบนสุดสูงสุด 10 รายการ
- ความลึกสูงสุด 10 ระดับ
- ฟิลด์สูงสุด 1,000 ฟิลด์ต่อออบเจ็กต์ (รวมฟิลด์ที่ซ้อนกัน)
ขั้นตอนถัดไป
- สร้างอินเทอร์เฟซการค้นหา
- ปรับปรุงคุณภาพการค้นหา
- จัดโครงสร้างสคีมาเพื่อการตีความคำค้นหาที่เหมาะสมที่สุด
- กำหนดคำพ้องความหมาย