Firebase SQL 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 field
อาร์กิวเมนต์ที่แชร์
คุณควบคุมผลการค้นหาได้ด้วยอาร์กิวเมนต์หลายรายการที่ใช้กับฟิลด์รายการพื้นฐาน<pluralType>
orderช่วยให้คุณเปลี่ยนลำดับของผลลัพธ์ได้ หากไม่ระบุ ระบบจะจัดเรียงผลลัพธ์ตามความเกี่ยวข้องจากมากไปน้อยwhereให้คุณเพิ่มตัวกรองเพิ่มเติมเพื่อค้นหา (เช่น ค้นหาเฉพาะภาพยนตร์ ประเภทใดประเภทหนึ่ง)limitทำให้คำค้นหาแสดงเฉพาะผลลัพธ์ X อันดับแรกoffsetทำให้การค้นหาข้ามผลลัพธ์ X รายการแรกdistinctจะเพิ่มโอเปอเรเตอร์ DISTINCT ลงใน SQL ที่สร้างขึ้น
การเลือกภาษา
โดยค่าเริ่มต้น การค้นหาข้อความแบบเต็มจะแยกวิเคราะห์เอกสารเป็นภาษาอังกฤษ คุณเปลี่ยนการตั้งค่านี้ได้
โดยใช้อาร์กิวเมนต์ภาษาในคำสั่ง @searchable ดังนี้
type Movie
@table {
title: String! @searchable(language: "french")
...
}
การระบุภาษาที่ถูกต้องจะช่วยให้ PostgreSQL ทำการตัดคำตามหลักสัทวิทยาได้อย่างถูกต้อง และช่วยให้มั่นใจว่าการค้นหาจะไม่พลาดผลการค้นหาที่เกี่ยวข้อง หาก คุณค้นหาในหลายคอลัมน์ คอลัมน์ทั้งหมดต้องตั้งค่าเป็นภาษาเดียวกัน
| ภาษา | ||
|---|---|---|
|
|
|
เรารองรับทุกภาษาที่การค้นหาข้อความแบบเต็มของ 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 จะจับคู่คำทั้งหมด แต่ไม่จำเป็นต้องอยู่ด้วยกัน ("หมาสีน้ำตาล" จะจับคู่กับ "หมาสีน้ำตาลและขาว" หรือ "หมาสีขาวและน้ำตาล" )
- วลีตรงกับวลีที่แน่นอน ( "หมาสีน้ำตาล" จะตรงกับ "หมาสีขาวและน้ำตาล" แต่จะไม่ตรงกับ "หมาสีน้ำตาลและขาว")
- ขั้นสูงช่วยให้คุณสร้างการค้นหาที่ซับซ้อนได้โดยใช้ ชุดโอเปอเรเตอร์ 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 มีวิธีค้นหาในฐานข้อมูลอยู่ 2-3 วิธี
ใช้ตารางนี้เพื่อช่วยเลือกเครื่องมือที่เหมาะกับกรณีการใช้งานของคุณ
| การค้นหาข้อความแบบเต็ม | การค้นหาความคล้ายคลึงของเวกเตอร์ | ตัวกรองรูปแบบสตริง |
|---|---|---|
| เหมาะสำหรับการใช้ฟังก์ชันการค้นหาทั่วไป | เหมาะสำหรับการค้นหาแถวที่มีความหมายคล้ายกัน (เช่น คำแนะนำหรือ "เพิ่มเติมที่คล้ายกัน") | เหมาะสำหรับการค้นหาข้อความที่ตรงกันทุกประการหรือการค้นหานิพจน์ทั่วไป |
| ดำเนินการ Stemming ตามคำศัพท์ ซึ่งช่วยให้จับคู่คำเดียวกันในรูปแบบหรือกาลต่างๆ ได้ | ต้องใช้ Vertex AI | ใช้หน่วยความจำและพื้นที่ในดิสก์น้อยที่สุด เนื่องจากไม่จำเป็นต้องมีดัชนีหรือคอลัมน์ที่สร้างขึ้น |
| ดำเนินการในหลายคอลัมน์ในตารางได้ | ใช้ได้กับคอลัมน์เดียวเท่านั้น | ดำเนินการในหลายคอลัมน์ในตารางได้โดยใช้ตัวกรอง OR |
| ทำงานได้ดีกับเอกสารขนาดใหญ่ | ทำงานได้ดีกับเอกสารขนาดใหญ่ | ประสิทธิภาพลดลงเมื่อค้นหาเอกสารขนาดใหญ่ |
| เพิ่มค่าใช้จ่ายด้านหน่วยความจำและพื้นที่เก็บข้อมูลเพื่อจัดเก็บคอลัมน์ที่สร้างขึ้นและ ดัชนีสำหรับการค้นหาแต่ละครั้ง |