API การค้นหามีวิธีการค้นหาและแนะนำสำหรับการสร้างอินเทอร์เฟซการค้นหาหรือฝังผลการค้นหาในแอปพลิเคชัน
สำหรับเว็บแอปพลิเคชันที่มีข้อกำหนดเพียงเล็กน้อย ให้ลองใช้วิดเจ็ต Search ดูข้อมูลเพิ่มเติมได้ที่สร้างอินเทอร์เฟซการค้นหาด้วยวิดเจ็ต Search
สร้างอินเทอร์เฟซการค้นหา
การสร้างอินเทอร์เฟซการค้นหาแบบเรียบง่ายมีหลายขั้นตอน ดังนี้
- กำหนดค่าแอปพลิเคชันการค้นหา
- สร้างข้อมูลเข้าสู่ระบบ OAuth สำหรับแอปพลิเคชัน
- ค้นหาดัชนี
- แสดงผลลัพธ์การค้นหา
นอกจากนี้ คุณยังปรับปรุงอินเทอร์เฟซการค้นหาได้ด้วยฟีเจอร์ต่างๆ เช่น การแบ่งหน้า การจัดเรียง การกรอง ข้อมูลประกอบ และการแนะนำอัตโนมัติ
กำหนดค่าแอปพลิเคชันการค้นหา
คุณต้องสร้างแอปพลิเคชันการค้นหาอย่างน้อย 1 รายการเพื่อเชื่อมโยงกับอินเทอร์เฟซการค้นหาแต่ละรายการที่คุณสร้าง แอปพลิเคชันการค้นหามีพารามิเตอร์เริ่มต้นสำหรับการค้นหา เช่น แหล่งข้อมูลที่จะใช้ ลำดับการจัดเรียง ตัวกรอง และข้อมูลประกอบที่จะขอ คุณลบล้างพารามิเตอร์เหล่านี้ได้โดยใช้ API การค้นหา หากจำเป็น
โปรดดูข้อมูลเพิ่มเติมเกี่ยวกับแอปพลิเคชันการค้นหาที่หัวข้อปรับแต่งประสบการณ์การค้นหาใน Cloud Search
สร้างข้อมูลเข้าสู่ระบบ OAuth สำหรับแอปพลิเคชัน
นอกจากขั้นตอนในกำหนดค่าการเข้าถึง Google Cloud Search API คุณต้องสร้างข้อมูลเข้าสู่ระบบ OAuth สำหรับเว็บแอปพลิเคชันด้วย ประเภทข้อมูลเข้าสู่ระบบที่คุณสร้างขึ้นอยู่กับบริบทที่ใช้ API
ใช้ข้อมูลเข้าสู่ระบบเพื่อขอสิทธิ์ในนามของผู้ใช้ ให้ใช้ขอบเขต https://www.googleapis.com/auth/cloud_search.query
เมื่อขอสิทธิ์
ดูข้อมูลเพิ่มเติมเกี่ยวกับตัวเลือก OAuth และไลบรารีของไคลเอ็นต์ได้ที่ [Google Identity Platform](https://developers.google.com/identity/choose-auth{: .external target="_blank"}
ค้นหาดัชนี
ใช้วิธี search
เพื่อทำการค้นหาตามดัชนี
คำขอทุกรายการต้องมีข้อมูล 2 ส่วน ได้แก่ ข้อความ query
สำหรับจับคู่รายการ และ searchApplicationId
ที่ระบุรหัสสำหรับแอปพลิเคชันการค้นหาที่จะใช้
ตัวอย่างข้อมูลต่อไปนี้แสดงคำค้นหาสำหรับภาพยนตร์ต้นฉบับของภาพยนตร์เรื่อง Titanic
{
"query": "titanic",
"requestOptions": {
"searchApplicationId": "searchapplications/<search_app_id>"
},
}
แสดงผลการค้นหาคำค้นหา
อย่างน้อยที่สุด อินเทอร์เฟซการค้นหาควรแสดงรายการ title
รวมถึงลิงก์ไปยังรายการต้นฉบับ คุณเพิ่มประสิทธิภาพการแสดงผลการค้นหาได้อีกโดยใช้ประโยชน์จากข้อมูลเพิ่มเติมที่แสดงในผลการค้นหา เช่น ตัวอย่างข้อมูลและข้อมูลเมตา
จัดการผลลัพธ์เสริม
โดยค่าเริ่มต้น Cloud Search จะแสดงผลการค้นหาเสริมเมื่อมีผลการค้นหาของผู้ใช้ไม่เพียงพอ ช่อง queryInterpretation
ในการตอบกลับจะระบุเวลาที่ระบบแสดงผลการค้นหาเสริม หากแสดงเฉพาะผลลัพธ์เสริม ระบบจะตั้งค่า InterpretationType
เป็น REPLACE
หากมีการแสดงผลลัพธ์ 2-3 รายการสำหรับการค้นหาต้นฉบับพร้อมกับผลลัพธ์เสริม ระบบจะตั้งค่า InterpretationType
เป็น BLEND
ไม่ว่าจะเป็นกรณีใด
QueryInterpretation.Reason = NOT_ENOUGH_RESULTS_FOUND_FOR_USER_QUERY
เมื่อแสดงผลการค้นหาเสริมบางรายการ ให้พิจารณาระบุข้อความเพื่อระบุว่าระบบแสดงผลการค้นหาเสริม ตัวอย่างเช่น ในกรณีของ REPLACE
คุณอาจแสดงสตริง "การค้นหาของคุณสำหรับข้อความค้นหาเดิมของคุณไม่ตรงกับผลการค้นหาใดๆ กำลังแสดงผลการค้นหาที่คล้ายกัน"
ในกรณีของ BLEND
คุณอาจแสดงสตริง "การค้นหาของคุณสำหรับข้อความค้นหาเดิมของคุณไม่ตรงกับผลการค้นหาที่เพียงพอ รวมผลการค้นหา
ที่คล้ายกัน"
จัดการผลการค้นหาบุคคล
Cloud Search จะแสดง "ผลการค้นหาบุคคล" 2 ประเภท ได้แก่ เอกสารที่เกี่ยวข้องกับบุคคลที่ใช้ชื่อในการค้นหาและข้อมูลพนักงานของบุคคลที่ใช้ชื่อในการค้นหา ผลการค้นหาประเภทหลังคือฟังก์ชันของฟีเจอร์การค้นหาบุคคลของ Cloud Search และดูผลลัพธ์สําหรับคําค้นหาดังกล่าวได้ในช่อง structuredResults
ของคำตอบจาก API การค้นหา
{
"results": [...],
"structuredResults": [{
"person": {...}
}]
}
การจับคู่รายงานโดยตรง
การจับคู่รายงานโดยตรงเป็นฟีเจอร์การค้นหาบุคคลของ Cloud Search ซึ่งช่วยให้ผู้ใช้ดูรายงานโดยตรงของบุคคลในองค์กรได้
ผลลัพธ์จะอยู่ในช่อง structuredResults
สำหรับคำถามเกี่ยวกับผู้จัดการหรือผู้ใต้บังคับบัญชาของบุคคล คำตอบจะมี assistCardProtoHolder
ภายใน structuredResults
assistCardProtoHolder
มีช่องชื่อ cardType
ซึ่งเท่ากับ RELATED_PEOPLE_ANSWER_CARD
assistCardProtoHolder
มีการ์ดชื่อ relatedPeopleAnswerCard
ซึ่งมีการตอบกลับจริง
ซึ่งประกอบด้วย subject
(บุคคลที่อยู่ในคำค้นหา) และ relatedPeople
ซึ่งเป็นกลุ่มบุคคลที่เกี่ยวข้องกับเรื่องนี้ ช่อง relationType
จะแสดงค่า MANAGER
หรือ DIRECT_REPORTS
โค้ดต่อไปนี้แสดงตัวอย่างการตอบกลับสำหรับรายงานโดยตรงที่ตรงกับคำค้นหา
{
"results": [],
"structuredResults": [{
"assistCardProtoHolder": {
"extensions": {
"@type": "type.googleapis.com/enterprise.topaz.sidekick.AssistCardProto",
"cardMetadata": {
"cardCategory": "ANSWER"
},
"cardType": "RELATED_PEOPLE_ANSWER_CARD",
"relatedPeopleAnswerCard": {
"subject": {
"email": "AdamStanford@psincs-test01.newjnj.com",
"displayName": "Adam Stanford"
"manager": {
"email": "simonsais@psincs-test01.newjnj.com"
}
},
"relatedPeople": [{
"email": "EdgarMountainRamirez@psincs-test01.newjnj.com",
"displayName": "Edgar Mountain Ramirez"
}, {
"email": "FranciscoJoseMartinez@psincs-test01.newjnj.com",
"displayName": "Francisco Jose Martinez"
}],
"relationType": "DIRECT_REPORTS",
}
}
}
}]
}
ปิดการเพิ่มประสิทธิภาพ รวมถึงผลลัพธ์เสริม
โดยค่าเริ่มต้น การเพิ่มประสิทธิภาพ เช่น ผลลัพธ์เสริม จะเปิดใช้งาน อย่างไรก็ตาม คุณสามารถปิดการเพิ่มประสิทธิภาพทั้งหมดหรือเฉพาะผลลัพธ์เสริมทั้งในระดับแอปพลิเคชันการค้นหาและระดับข้อความค้นหา โดยทำดังนี้
หากต้องการปิดการเพิ่มประสิทธิภาพทั้งหมดในระดับแอปพลิเคชันการค้นหา ซึ่งรวมถึงผลลัพธ์เสริม คำพ้องความหมาย และการแก้ไขตัวสะกด ให้ตั้งค่า
QueryInterpretationConfig.force_verbatim_mode
เป็นtrue
ในแอปพลิเคชันการค้นหาหากต้องการปิดการเพิ่มประสิทธิภาพทั้งหมดที่ระดับคำค้นหา รวมถึงผลลัพธ์เสริม คำพ้องความหมาย และการแก้ไขตัวสะกด ให้ตั้งค่า
QueryInterpretationOptions.enableVerbatimMode
เป็นtrue
ในคำค้นหาหากต้องการปิดผลการค้นหาเสริมที่ระดับแอปพลิเคชันการค้นหา ให้ตั้งค่า
QueryInterpretationOptions.forceDisableSupplementalResults
เป็นtrue
ในคำค้นหาหากต้องการปิดผลการค้นหาเสริมที่ระดับคำค้นหา ให้ตั้งค่า
QueryInterpretationOptions.disableSupplementalResults
เป็นtrue
ในคำค้นหา
ไฮไลต์ตัวอย่าง
สำหรับรายการที่ส่งกลับซึ่งมีข้อความหรือเนื้อหา HTML ที่จัดทำดัชนีแล้ว ตัวอย่างข้อมูลของเนื้อหาจะปรากฏขึ้น เนื้อหานี้ช่วยให้ผู้ใช้ระบุความเกี่ยวข้องของสินค้าที่ส่งคืนได้
หากข้อความค้นหามีอยู่ในข้อมูลโค้ด ช่วงการจับคู่อย่างน้อย 1 ช่วงที่ระบุตำแหน่งของคำเหล่านั้นจะแสดงผลด้วย
ใช้ matchRanges
เพื่อไฮไลต์ข้อความที่ตรงกันเมื่อแสดงผลลัพธ์ ตัวอย่าง JavaScript ต่อไปนี้จะแปลงข้อมูลโค้ดเป็นมาร์กอัป HTML โดยแต่ละช่วงที่ตรงกันซึ่งรวมอยู่ในแท็ก <span>
function highlightSnippet(snippet) {
let text = snippet.snippet;
let formattedText = text;
if (snippet.matchRanges) {
let parts = [];
let index = 0;
for (let match of snippet.matchRanges) {
let start = match.start || 0; // Default to 0 if omitted
let end = match.end;
if (index < start) { // Include any leading text before/between ranges
parts.push(text.slice(index, start));
}
parts.push('<span class="highlight">');
parts.push(text.slice(start, end));
parts.push('</span>');
index = end;
}
parts.push(text.slice(index)); // Include any trailing text after last range
formattedText = parts.join('');
}
return formattedText;
}
ได้รับข้อมูลโค้ด:
{
"snippet": "This is an example snippet...",
"matchRanges": [
{
"start": 11,
"end": 18
}
]
}
สตริง HTML ที่ได้คือ
This is an <span class="highlight">example</span> snippet...
ข้อมูลเมตาของการแสดงผล
ใช้ช่อง metadata
เพื่อแสดงข้อมูลเพิ่มเติมเกี่ยวกับสินค้าที่ส่งคืนซึ่งอาจเกี่ยวข้องกับผู้ใช้ ช่อง metadata
ประกอบด้วย createTime
และ updateTime
ของสินค้า รวมถึง Structured Data ที่ส่งคืนได้ซึ่งเชื่อมโยงกับสินค้าดังกล่าว
หากต้องการแสดง Structured Data ให้ใช้ช่อง displayOptions
ช่อง displayOptions
มีป้ายกำกับที่แสดงสำหรับประเภทออบเจ็กต์และชุด metalines
แต่ละเมตาไลน์คืออาร์เรย์ของป้ายกำกับที่แสดงและคู่ค่าตามที่กำหนดค่าไว้ในสคีมา
เรียกผลลัพธ์เพิ่มเติม
หากต้องการเรียกดูผลลัพธ์เพิ่มเติม ให้ตั้งค่าช่อง start
ในคำขอเป็นออฟเซ็ตที่ต้องการ คุณปรับขนาดของแต่ละหน้าได้ด้วยช่อง pageSize
หากต้องการแสดงจำนวนรายการที่ส่งคืนหรือแสดงการควบคุมการแบ่งหน้าไปยังหน้าผ่านรายการที่ส่งคืน ให้ใช้ช่อง resultCount
ระบบจะระบุค่าจริงหรือมูลค่าโดยประมาณ ทั้งนี้ขึ้นอยู่กับขนาดของชุดผลลัพธ์
จัดเรียงผลลัพธ์
ใช้ช่อง sortOptions
เพื่อระบุลำดับของสินค้าที่ส่งคืน ค่า sortOptions
เป็นออบเจ็กต์ที่มี 2 ช่อง ดังนี้
operatorName
— โอเปอเรเตอร์สำหรับพร็อพเพอร์ตี้ Structured Data ที่ใช้จัดเรียง สำหรับพร็อพเพอร์ตี้ที่มีโอเปอเรเตอร์หลายรายการ คุณจะจัดเรียงได้โดยใช้โอเปอเรเตอร์ความเท่าเทียมหลักเท่านั้นsortOrder
— ทิศทางในการจัดเรียง อาจเป็นASCENDING
หรือDESCENDING
นอกจากนี้ ความเกี่ยวข้องยังใช้เป็นคีย์การจัดเรียงรองด้วย หากไม่ได้ระบุลำดับการจัดเรียงในการค้นหา ผลการค้นหาจะจัดอันดับตามความเกี่ยวข้องเท่านั้น
"sortOptions": {
"operatorName": "priority",
"sortOrder": "DESCENDING"
}
เพิ่มตัวกรอง
นอกจากนิพจน์การค้นหาแล้ว คุณยังจำกัดผลลัพธ์เพิ่มเติมได้โดยใช้ตัวกรอง คุณระบุตัวกรองได้ในแอปพลิเคชันการค้นหาและในคำขอการค้นหา
หากต้องการเพิ่มตัวกรองในแอปพลิเคชันคำขอหรือแอปพลิเคชันการค้นหา ให้เพิ่มตัวกรองในช่อง dataSourceRestrictions.filterOptions[]
วิธีหลักในการกรองแหล่งข้อมูลเพิ่มเติมมี 2 วิธีดังนี้
- ตัวกรองออบเจ็กต์ผ่านพร็อพเพอร์ตี้
filterOptions[].objectType
จะจำกัดรายการที่ตรงกับประเภทที่ระบุตามที่กำหนดไว้ในสคีมาที่กำหนดเอง - ตัวกรองค่า - จำกัดรายการที่ตรงกันตาม โอเปอเรเตอร์การค้นหา และค่าที่ให้ไว้
ตัวกรองแบบผสมช่วยให้รวมตัวกรองค่าหลายรายการเป็นนิพจน์เชิงตรรกะสำหรับการค้นหาที่ซับซ้อนขึ้นได้
ในตัวอย่างสคีมาภาพยนตร์ คุณอาจใช้การจำกัดอายุตามผู้ใช้ปัจจุบันและจำกัดภาพยนตร์ที่มีให้บริการโดยอิงตามการจัดประเภทของ MPAA
{
"query": "adventure",
"requestOptions": {
"searchApplicationId": "<search_app_id>"
},
"dataSourceRestrictions": [
{
"source": {
"name": "datasources/<data_source_id>"
},
"filterOptions": [
{
"objectType": "movie",
"filter": {
"compositeFilter": {
"logicOperator": "AND"
"subFilters": [
{
"compositeFilter": {
"logicOperator": "OR"
"subFilters": [
{
"valueFilter": {
"operatorName": "rated",
"value": {
"stringValue": "G"
}
}
},
{
"valueFilter": {
"operatorName": "rated",
"value": {
"stringValue": "PG"
}
}
}
]
}
]
}
}
}
]
}
]
}
ปรับแต่งผลการค้นหาด้วยข้อมูลประกอบ
ข้อมูลประกอบคือพร็อพเพอร์ตี้ที่จัดทำดัชนีซึ่งแสดงถึงหมวดหมู่สำหรับการปรับแต่งผลการค้นหา ใช้ข้อมูลประกอบเพื่อช่วยให้ผู้ใช้ปรับแต่งคำค้นหาและค้นหารายการที่เกี่ยวข้องได้เร็วขึ้น
คุณสามารถกำหนด Facet ในแอปพลิเคชันการค้นหาและลบล้างได้โดยการตั้งค่าในคำค้นหา
เมื่อขอข้อมูลประกอบ Cloud Search จะคำนวณค่าที่พบมากที่สุดสำหรับพร็อพเพอร์ตี้ที่ขอในรายการที่ตรงกัน ค่าเหล่านี้จะส่งคืนมาในการตอบสนอง ใช้ค่าเหล่านี้เพื่อสร้างตัวกรอง ที่จำกัดผลการค้นหาในข้อความค้นหาถัดๆ ไป
รูปแบบการโต้ตอบกับข้อมูลประกอบทั่วไปคือ
- สร้างการค้นหาเริ่มต้นโดยระบุพร็อพเพอร์ตี้ที่จะรวมไว้ในผลลัพธ์ของข้อมูลประกอบ
- แสดงผลการค้นหาและข้อมูลประกอบ
- ผู้ใช้จะเลือกค่า Facet อย่างน้อย 1 ค่าเพื่อปรับแต่งผลลัพธ์
- ทำการค้นหาซ้ำโดยใช้ตัวกรองตามค่าที่เลือก
เช่น หากต้องการเปิดใช้การปรับแต่งคำค้นหาภาพยนตร์ตามปีและการจัดประเภทของ MPAA ให้ใส่พร็อพเพอร์ตี้ facetOptions
ในการค้นหา
"facetOptions": [
{
"sourceName": "datasources/<data_source_id>",
"operatorName": "year"
},
{
"sourceName": "datasources/<data_source_id>",
"operatorName": "rated"
}
]
ผลลัพธ์ข้อมูลประกอบที่มีช่องแบบจำนวนเต็ม
นอกจากนี้ คุณยังสามารถส่งคำขอข้อมูลประกอบด้วยช่องแบบจำนวนเต็มได้ ตัวอย่างเช่น คุณอาจทำเครื่องหมายพร็อพเพอร์ตี้จำนวนเต็มที่เรียกว่า book_pages
เป็น Facetable เพื่อปรับแต่งการค้นหาเกี่ยวกับหนังสือที่มีหน้า "100-200"
เมื่อตั้งค่าสคีมาของช่องพร็อพเพอร์ตี้จำนวนเต็ม ให้ตั้งค่า isFacetable
เป็น true
และเพิ่มตัวเลือกที่เก็บข้อมูลที่สอดคล้องกันลงใน
integerPropertyOptions
วิธีนี้ช่วยให้มั่นใจได้ว่าพร็อพเพอร์ตี้ที่ดูข้อมูลได้แบบจำนวนเต็มทุกรายการมีการกำหนดตัวเลือกการฝากข้อมูลเริ่มต้นไว้แล้ว
เมื่อกำหนดตรรกะตัวเลือกที่เก็บข้อมูล ให้ระบุอาร์เรย์ของค่าที่เพิ่มขึ้นซึ่งแสดงถึงช่วง เช่น หากผู้ใช้ปลายทางระบุช่วงเป็น 2, 5, 10, 100
ระบบจะคำนวณข้อมูลประกอบสำหรับ <2
, [2-5)
, [5-10)
, [10-100)
, >=100
คุณลบล้างข้อมูลประกอบที่อิงตามจำนวนเต็มได้โดยกำหนดตัวเลือกที่เก็บข้อมูลเดียวกันกับ facetOptions
ในคำขอ หากจำเป็น Cloud Search จะใช้ตัวเลือกที่เก็บข้อมูลที่กำหนดไว้ในสคีมาเมื่อทั้งแอปพลิเคชันการค้นหาหรือคำขอการค้นหาไม่ได้กำหนดตัวเลือกข้อมูลประกอบไว้ ข้อมูลประกอบที่กำหนดไว้ในคำค้นหาจะมีลำดับความสำคัญเหนือกว่าข้อมูลประกอบที่กำหนดไว้ในแอปพลิเคชันการค้นหา และข้อมูลประกอบที่กำหนดไว้ในแอปพลิเคชันการค้นหาจะมีความสำคัญเหนือกว่าข้อมูลประกอบที่ระบุไว้ในสคีมา
ผลลัพธ์ข้อมูลประกอบตามขนาดหรือวันที่ของเอกสาร
คุณสามารถใช้โอเปอเรเตอร์ที่สงวนไว้เพื่อปรับแต่งผลการค้นหาตามขนาดไฟล์ของเอกสาร วัดในหน่วยไบต์ หรือตามเวลาที่สร้างหรือแก้ไขเอกสารได้ คุณไม่จำเป็นต้องกำหนดสคีมาที่กำหนดเอง แต่ต้องระบุค่า operatorName
ใน FacetOptions
ของแอปพลิเคชันการค้นหา
- สำหรับข้อมูลประกอบตามขนาดเอกสาร ให้ใช้
itemsize
และกำหนดตัวเลือกที่เก็บข้อมูล - สำหรับข้อมูลประกอบตามวันที่สร้างเอกสาร ให้ใช้
createddatetimestamp
- สำหรับข้อมูลประกอบตามวันที่แก้ไขเอกสาร ให้ใช้
lastmodified
การตีความที่เก็บข้อมูลประกอบ
พร็อพเพอร์ตี้ facetResults
ในการตอบกลับคำค้นหาจะรวมคำขอตัวกรองที่ตรงกันทุกประการของผู้ใช้ไว้ในช่อง filter
สำหรับ bucket
แต่ละรายการ
สำหรับข้อมูลประกอบที่ไม่ได้อิงตามจำนวนเต็ม facetResults
จะรวมรายการสำหรับพร็อพเพอร์ตี้ที่ขอแต่ละรายการ สำหรับแต่ละพร็อพเพอร์ตี้ จะมีการระบุรายการค่าหรือช่วงที่เรียกว่า buckets
ค่าที่เกิดขึ้นบ่อยที่สุดจะปรากฏเป็นลำดับแรก
เมื่อผู้ใช้เลือกค่าที่จะกรองอย่างน้อย 1 ค่า ให้สร้างการค้นหาใหม่ด้วยตัวกรองที่เลือกและค้นหา API อีกครั้ง
เพิ่มคำแนะนำ
ใช้ suggest API เพื่อการเติมข้อความอัตโนมัติสำหรับคำค้นหาตามประวัติคำค้นหาส่วนบุคคลของผู้ใช้ รวมถึงรายชื่อติดต่อและคลังเอกสาร
ตัวอย่างเช่น การโทรต่อไปนี้จะแนะนำสำหรับวลี jo บางส่วน
{
"query": "jo",
"requestOptions": {
"searchApplicationId": "<search_app_id>",
"peoplePhotoOptions": {
"peoplePhotoUrlSizeInPx": 32
},
"timeZone": "America/Denver"
}
}
จากนั้น คุณจะสามารถแสดงข้อเสนอแนะที่เกิดขึ้นตามความเหมาะสมสำหรับแอปพลิเคชันของคุณ