Firebase Data Connect รองรับการค้นหาข้อความแบบเต็มซึ่งขับเคลื่อนโดย PostgreSQL การค้นหาแบบข้อความเต็มช่วยให้คุณค้นหาข้อมูลภายในชุดข้อมูลขนาดใหญ่ได้อย่างรวดเร็วและมีประสิทธิภาพโดยการค้นหาคีย์เวิร์ดและวลีในหลายคอลัมน์พร้อมกัน
คุณเพิ่มการค้นหาแบบเต็มข้อความลงในบริการได้ ก่อนอื่นให้เพิ่ม@searchable
คำสั่งไปยัง String
ในสคีมาที่คุณต้องการค้นหา เช่น
type Movie
@table {
# The fields you want to search over
title: String! @searchable
genre: String @searchable
description: String @searchable
tags: [String]
# Some other fields that we won't search over
rating: Float
imageUrl: String!
releaseYear: Int
}
เมื่อเพิ่มคำสั่งนี้แล้ว คุณจะทำการค้นหาแบบเต็มข้อความได้โดยเพิ่มฟิลด์ <pluralType>_search
ลงในคำค้นหา ในกรณีนี้ จะเป็น
movies_search
query SearchMovies($query: String) @auth(level: PUBLIC) {
movies_search(query: $query) {
id
title
imageUrl
releaseYear
genre
rating
tags
description
}
}
การปรับแต่งผลการค้นหาข้อความแบบเต็ม
คุณปรับแต่งผลการค้นหาแบบข้อความแบบเต็มได้โดยเพิ่มอาร์กิวเมนต์ลงใน
@searchable
directive และฟิลด์ _search
อาร์กิวเมนต์ที่แชร์
คุณควบคุมผลการค้นหาได้โดยใช้อาร์กิวเมนต์หลายรายการแบบเดียวกับที่ใช้สำหรับฟิลด์รายการพื้นฐาน
<pluralType>
order
ช่วยให้คุณเปลี่ยนลำดับของผลการค้นหาได้ หากไม่ระบุ ผลลัพธ์จะ จัดเรียงตามความเกี่ยวข้องจากมากไปน้อยwhere
ให้คุณเพิ่มตัวกรองเพิ่มเติมเพื่อค้นหา (เช่น ค้นหาเฉพาะภาพยนตร์ ประเภทใดประเภทหนึ่ง)limit
ทำให้คำค้นหาแสดงเฉพาะผลการค้นหา X อันดับแรกoffset
ทำให้การค้นหาข้ามผลลัพธ์ X รายการแรกdistinct
จะเพิ่มโอเปอเรเตอร์ DISTINCT ลงใน SQL ที่สร้างขึ้น
การเลือกภาษา
โดยค่าเริ่มต้น การค้นหาข้อความแบบเต็มจะแยกวิเคราะห์เอกสารเป็นภาษาอังกฤษ คุณเปลี่ยนได้
ด้วยอาร์กิวเมนต์ภาษาในคำสั่ง @searchable
ดังนี้
type Movie
@table {
title: String! @searchable(language: "french")
...
}
การระบุภาษาที่ถูกต้องจะช่วยให้ PostgreSQL ทำการตัดคำตามหลักภาษาได้อย่างแม่นยำ และช่วยให้มั่นใจว่าการค้นหาจะไม่พลาดผลลัพธ์ที่เกี่ยวข้อง หาก คุณค้นหาในหลายคอลัมน์ คอลัมน์ทั้งหมดต้องตั้งค่าเป็นภาษาเดียวกัน
ภาษา | ||
---|---|---|
|
|
|
การใช้ psql
จะช่วยให้คุณดูรายการทั้งหมดได้ด้วยการค้นหาต่อไปนี้
SELECT cfgname FROM pg_ts_config;
รูปแบบการค้นหา
โดยค่าเริ่มต้น การค้นหาข้อความแบบเต็มจะใช้อรรถศาสตร์ของเว็บสำหรับคำค้นหา (คล้ายกับ Google
Search) คุณเปลี่ยนลักษณะการทำงานนี้ได้ด้วยอาร์กิวเมนต์ queryFormat
ในฟิลด์
<pluralType>_search
query SearchMovies($query: String) @auth(level: PUBLIC) {
movies_search(query: $query, queryFormat: PHRASE) {
...
}
}
รูปแบบการค้นหามี 4 ตัวเลือก ดังนี้
- QUERY ให้ความหมายที่คุ้นเคยแก่เครื่องมือค้นหาเว็บ (เช่น สตริงที่ยกมา คำว่า AND และ OR) ซึ่งเป็นค่าเริ่มต้น
- PLAIN จะจับคู่คำทั้งหมด แต่ไม่จำเป็นต้องอยู่ด้วยกัน ("หมาสีน้ำตาล" จะจับคู่กับ "หมาสีน้ำตาลและขาว" หรือ "หมาสีขาวและน้ำตาล" )
- วลีตรงกับวลีที่แน่นอน ( "หมาสีน้ำตาล" จะตรงกับ "หมาสีขาวและน้ำตาล" แต่จะไม่ตรงกับ "หมาสีน้ำตาลและขาว")
- ขั้นสูงช่วยให้คุณสร้างการค้นหาที่ซับซ้อนได้โดยใช้ ชุดโอเปอเรเตอร์ tsquery ทั้งหมด
เกณฑ์ความเกี่ยวข้อง
การตั้งค่าเกณฑ์ความเกี่ยวข้องหมายความว่าการค้นหาจะแสดงเฉพาะผลลัพธ์ที่มีค่าความเกี่ยวข้องสูงกว่าค่าหนึ่งๆ เท่านั้น ในหลายๆ กรณี คุณไม่จำเป็นต้องตั้งค่านี้ เนื่องจากผลลัพธ์ใดๆ ที่มีความเกี่ยวข้องมากกว่า 0 จะเป็นผลลัพธ์ที่เกี่ยวข้อง
อย่างไรก็ตาม หากพบว่าการค้นหาแสดงผลลัพธ์ที่ไม่เกี่ยวข้อง คุณสามารถใช้เกณฑ์ความเกี่ยวข้องเพื่อกรองผลลัพธ์เหล่านั้นออกได้
หากต้องการทราบค่าที่เหมาะสมสำหรับเกณฑ์ความเกี่ยวข้อง คุณควรทำการค้นหาทดสอบ 2-3 ครั้งและดู_metadata.relevance
query SearchMovies($query: String) @auth(level: PUBLIC) {
movies_search(query: $query) {
id
title
_metadata {
relevance
}
...
}
}
เลือกเกณฑ์ที่ละเว้นผลลัพธ์ที่คุณคิดว่าไม่เกี่ยวข้อง วิธีการมีดังนี้
query SearchMovies($query: String) @auth(level: PUBLIC) {
movies_search(query: $query, relevanceThreshold: 0.05) {
id
title
...
}
}
การเลือกระหว่างการค้นหาข้อความแบบเต็ม การค้นหาความคล้ายกันของเวกเตอร์ และตัวกรองรูปแบบสตริง
Data Connect มีวิธีค้นหาในฐานข้อมูลหลายวิธี
ใช้ตารางนี้เพื่อช่วยเลือกโมเดลที่เหมาะกับกรณีการใช้งานของคุณ
การค้นหาข้อความแบบเต็ม | การค้นหาความคล้ายคลึงกันของเวกเตอร์ | ตัวกรองรูปแบบสตริง |
---|---|---|
เหมาะสำหรับการใช้ฟังก์ชันการค้นหาทั่วไป | เหมาะสําหรับการค้นหาแถวที่มีความหมายคล้ายกัน (เช่น คําแนะนําหรือ "เพิ่มเติมที่คล้ายกัน") | เหมาะสำหรับการจับคู่ข้อความที่ตรงกันทุกประการหรือการค้นหานิพจน์ทั่วไป |
ดำเนินการตัดคำตามหลักไวยากรณ์ ซึ่งช่วยให้จับคู่คำเดียวกันในรูปแบบหรือกาลต่างๆ ได้ | ต้องใช้ Vertex AI | ใช้หน่วยความจำและพื้นที่ดิสก์น้อยที่สุด เนื่องจากไม่จำเป็นต้องมีดัชนีหรือคอลัมน์ที่สร้างขึ้น |
ดำเนินการในหลายคอลัมน์ในตารางได้ | ใช้ได้กับคอลัมน์เดียวเท่านั้น | ดำเนินการในหลายคอลัมน์ในตารางได้โดยใช้ตัวกรอง OR |
ทำงานได้ดีกับเอกสารขนาดใหญ่ | ทำงานได้ดีกับเอกสารขนาดใหญ่ | ประสิทธิภาพลดลงเมื่อค้นหาเอกสารขนาดใหญ่ |
เพิ่มค่าใช้จ่ายด้านหน่วยความจำและพื้นที่เก็บข้อมูลเพื่อจัดเก็บคอลัมน์ที่สร้างขึ้นและ ดัชนีสำหรับการค้นหาแต่ละครั้ง |