Firebase SQL Connect รองรับการค้นหาข้อความแบบเต็มซึ่งขับเคลื่อนโดย PostgreSQL การค้นหาข้อความแบบเต็มช่วยให้คุณค้นหาข้อมูลภายในชุดข้อมูลขนาดใหญ่ได้อย่างรวดเร็วและมีประสิทธิภาพด้วยการค้นหาคีย์เวิร์ดและวลีในหลายคอลัมน์พร้อมกัน
คุณสามารถเพิ่มการค้นหาข้อความแบบเต็มลงในบริการได้ โดยขั้นแรกให้เพิ่ม Directive @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
}
เมื่อเพิ่ม Directive นี้แล้ว คุณจะทำการค้นหาข้อความแบบเต็มได้โดยเพิ่ม
ช่อง <pluralType>_search ลงในการค้นหา ในกรณีนี้ ช่องดังกล่าวจะเป็น movies_search
query SearchMovies($query: String) @auth(level: PUBLIC) {
movies_search(query: $query) {
id
title
imageUrl
releaseYear
genre
rating
tags
description
}
}
การปรับแต่งผลการค้นหาข้อความแบบเต็ม
คุณสามารถปรับแต่งผลการค้นหาข้อความแบบเต็มได้โดยเพิ่มอาร์กิวเมนต์ลงใน Directive @searchable และช่อง _search
อาร์กิวเมนต์ที่ใช้ร่วมกัน
คุณสามารถควบคุมผลการค้นหาด้วยอาร์กิวเมนต์จำนวนมากที่ใช้สำหรับพื้นฐาน
ช่องรายการ <pluralType> ได้ดังนี้
orderช่วยให้คุณเปลี่ยนลำดับของผลการค้นหาได้ หากไม่ระบุ ระบบจะจัดเรียงผลการค้นหาตามความเกี่ยวข้องจากมากไปน้อยwhereช่วยให้คุณเพิ่มตัวกรองเพิ่มเติมลงในการค้นหาได้ (เช่น ค้นหาเฉพาะภาพยนตร์ แนวหนึ่งๆ)limitทำให้การค้นหาแสดงผลการค้นหา X รายการแรกเท่านั้นoffsetทำให้การค้นหาข้ามผลการค้นหา X รายการแรกdistinctเพิ่มโอเปอเรเตอร์ DISTINCT ลงใน SQL ที่สร้างขึ้น
การเลือกภาษา
โดยค่าเริ่มต้น การค้นหาข้อความแบบเต็มจะแยกวิเคราะห์เอกสารเป็นภาษาอังกฤษ คุณสามารถเปลี่ยนภาษาได้ด้วยอาร์กิวเมนต์ `language` ใน Directive @searchable ดังนี้
type Movie
@table {
title: String! @searchable(language: "french")
...
}
การระบุภาษาที่ถูกต้องจะช่วยให้ PostgreSQL ทำการตัดคำตามหลักเกณฑ์ทางไวยากรณ์ได้อย่างถูกต้องและช่วยให้มั่นใจว่าการค้นหาจะไม่พลาดผลการค้นหาที่เกี่ยวข้อง หากคุณค้นหาในหลายคอลัมน์ คอลัมน์ทั้งหมดจะต้องตั้งค่าเป็นภาษาเดียวกัน
| ภาษา | ||
|---|---|---|
|
|
|
คุณสามารถดูรายการทั้งหมดได้โดยใช้ psql ด้วยการค้นหาต่อไปนี้
SELECT cfgname FROM pg_ts_config;
รูปแบบการค้นหา
โดยค่าเริ่มต้น การค้นหาข้อความแบบเต็มจะใช้ความหมายของเว็บสำหรับการค้นหา (คล้ายกับการค้นหาของ Google) คุณสามารถเปลี่ยนลักษณะการทำงานนี้ได้ด้วยอาร์กิวเมนต์ queryFormat ในช่อง
<pluralType>_search
query SearchMovies($query: String) @auth(level: PUBLIC) {
movies_search(query: $query, queryFormat: PHRASE) {
...
}
}
รูปแบบการค้นหามี 4 ตัวเลือก ได้แก่
- QUERY ให้ความหมายที่คุ้นเคยแก่เครื่องมือค้นหาเว็บ (เช่น สตริงที่อยู่ในเครื่องหมายคำพูด, AND และ OR) ซึ่งเป็นค่าเริ่มต้น
- PLAIN จะจับคู่คำทั้งหมด แต่ไม่จำเป็นต้องอยู่ด้วยกัน ("brown dog" จะจับคู่ "the brown and white dog" หรือ "the white and brown dog")
- PHRASE จะจับคู่วลีที่ตรงกันทุกประการ ("brown dog" จะจับคู่ "the white and brown dog" แต่จะไม่จับคู่ "brown and white dog")
- ขั้นสูง ช่วยให้คุณสร้างการค้นหาที่ซับซ้อนได้โดยใช้ โอเปอเรเตอร์ 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
...
}
}
การเลือกระหว่างการค้นหาข้อความแบบเต็ม การค้นหาความคล้ายคลึงกันของเวกเตอร์ และตัวกรองรูปแบบสตริง
SQL Connect มีวิธีต่างๆ ในการค้นหาฐานข้อมูล
ใช้ตารางนี้เพื่อช่วยคุณเลือกวิธีที่เหมาะสมกับกรณีการใช้งาน
| การค้นหาข้อความแบบเต็ม | การค้นหาความคล้ายคลึงกันของเวกเตอร์ | ตัวกรองรูปแบบสตริง |
|---|---|---|
| เหมาะสำหรับการใช้ฟังก์ชันการค้นหาทั่วไป | เหมาะสำหรับการค้นหาแถวที่คล้ายกันในเชิงความหมาย (เช่น รายการแนะนำหรือ 'เพิ่มเติมที่คล้ายกัน') | เหมาะสำหรับการค้นหาข้อความที่ตรงกันทุกประการหรือการค้นหานิพจน์ทั่วไป |
| ทำการตัดคำตามหลักเกณฑ์ทางไวยากรณ์ ซึ่งช่วยจับคู่คำเดียวกันในรูปแบบหรือกาลต่างๆ ของคำเดียวกัน | ต้องใช้ Vertex AI | ใช้หน่วยความจำและพื้นที่ดิสก์น้อยที่สุด เนื่องจากไม่จำเป็นต้องใช้ ดัชนีหรือคอลัมน์ที่สร้างขึ้น |
| สามารถทำได้ในหลายคอลัมน์ในตาราง | ใช้ได้กับคอลัมน์เดียวในแต่ละครั้ง | สามารถทำได้ในหลายคอลัมน์ในตารางโดยใช้ตัวกรอง OR |
| มีประสิทธิภาพในการค้นหาเอกสารขนาดใหญ่ | มีประสิทธิภาพในการค้นหาเอกสารขนาดใหญ่ | ประสิทธิภาพลดลงเมื่อค้นหาเอกสารขนาดใหญ่ |
| เพิ่มค่าใช้จ่ายหน่วยความจำและพื้นที่เก็บข้อมูลเพื่อจัดเก็บคอลัมน์ที่สร้างขึ้นและ ดัชนีสำหรับการค้นหาแต่ละครั้ง |