บทนำการค้นหาข้อความเต็มรูปแบบ (tsvector, to_tsquery)
สร้างดัชนีเอกสารด้วย tsvector เรียกใช้คำค้นภาษาธรรมชาติด้วย to_tsquery และจัดอันดับผลลัพธ์ด้วย ts_rank
บทนำการค้นหาข้อความเต็มรูปแบบ (tsvector, to_tsquery) เป็นบทเรียน SQL Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน SQL Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส SQL Academy มีบทเรียนทั้งหมด 4 บทเรียน
เหตุใดจึงต้องใช้การค้นหาข้อความเต็ม
LIKE/ILIKE ค้นหาสตริงย่อย แต่การค้นหาข้อความเต็ม (FTS) เข้าใจคำ: การตัดคำราก คำหยุด กฎของภาษา และความเกี่ยวข้องที่จัดอันดับไว้ PostgreSQL มีความสามารถนี้ในตัว ไม่ต้องใช้ส่วนขยาย
ชนิดข้อมูลหลักสองชนิด
FTS อาศัยชนิดข้อมูลสองชนิด:
tsvector— เอกสารที่แยกวิเคราะห์แล้ว: เลกซีม + ตำแหน่งtsquery— คำค้นหาที่แยกวิเคราะห์แล้ว: เลกซีม + ตัวดำเนินการบูลีน
คุณจับคู่ทั้งสองด้วยตัวดำเนินการ @@
การแยกวิเคราะห์เอกสาร
แปลงข้อความดิบเป็น tsvector:
SELECT to_tsvector('english', 'The quick brown foxes jump over the lazy dogs');
-- 'brown':3 'dog':9 'fox':4 'jump':5 'lazi':8 'quick':2
-- Stop words ('the', 'over') dropped; words stemmed (foxes → fox)การแยกวิเคราะห์คำค้นหา
และข้อมูลที่ป้อนสำหรับการค้นหา:
SELECT to_tsquery('english', 'foxes & dogs');
-- 'fox' & 'dog'การจับคู่
ใช้ @@ เพื่อทดสอบ:
SELECT to_tsvector('english', 'The lazy fox')
@@ to_tsquery('english', 'fox'); -- TRUEการสร้างดัชนีให้ตารางเอกสาร
เพิ่มคอลัมน์ tsvector และดัชนี GIN เพื่อให้คำค้นหาเร็วขึ้น:
CREATE TABLE articles (
id BIGSERIAL PRIMARY KEY,
title TEXT NOT NULL,
body TEXT NOT NULL
);
-- Either keep a generated tsvector column:
ALTER TABLE articles
ADD COLUMN search_doc tsvector
GENERATED ALWAYS AS (
to_tsvector('english',
coalesce(title,'') || ' ' || coalesce(body,'')
)
) STORED;
CREATE INDEX articles_search_idx ON articles USING GIN (search_doc);การค้นหา
เมื่อมีดัชนีแล้ว คำค้นหาจะทำงานรวดเร็ว:
SELECT id, title
FROM articles
WHERE search_doc @@ to_tsquery('english', 'postgres & json')
ORDER BY id DESC;ตัวดำเนินการบูลีนในคำค้นหา
tsquery รองรับ & (AND), | (OR), ! (NOT) และการจัดกลุ่ม:
to_tsquery('english', '(cat | dog) & !rabbit');การค้นหาวลี
ใช้ <-> สำหรับคำที่อยู่ติดกัน:
to_tsquery('english', 'postgres <-> performance');
-- finds 'postgres performance', not 'postgres is great for performance'คำค้นหาจากเว็บที่ใช้งานง่าย: websearch_to_tsquery
รองรับคำค้นหารูปแบบเดียวกับ Google:
SELECT websearch_to_tsquery('english', 'postgres "json indexing" -mongo');การจัดอันดับผลลัพธ์
จัดอันดับด้วย ts_rank หรือ ts_rank_cd:
SELECT id, title,
ts_rank(search_doc, query) AS rank
FROM articles, to_tsquery('english', 'postgres & json') AS query
WHERE search_doc @@ query
ORDER BY rank DESC
LIMIT 20;การเน้นข้อความ
แสดงส่วนข้อความสั้นที่ตรงกัน:
SELECT ts_headline('english', body,
to_tsquery('english', 'postgres & json'),
'StartSel=<mark>,StopSel=</mark>')
FROM articles
WHERE search_doc @@ to_tsquery('english', 'postgres & json');สรุปทบทวน
FTS มีอยู่ใน PostgreSQL
tsvector+tsquery+@@- ดัชนี GIN เพื่อความรวดเร็ว
- websearch_to_tsquery สำหรับข้อมูลที่มนุษย์ป้อน
- ts_rank สำหรับจัดเรียงตามความเกี่ยวข้อง
ตรวจสอบความเข้าใจ
ตัวดำเนินการใดใช้จับคู่ tsvector กับ tsquery
คำถามที่พบบ่อย
บทเรียน “บทนำการค้นหาข้อความเต็มรูปแบบ (tsvector, to_tsquery)” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “บทนำการค้นหาข้อความเต็มรูปแบบ (tsvector, to_tsquery)” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส SQL Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส SQL Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “บทนำการค้นหาข้อความเต็มรูปแบบ (tsvector, to_tsquery)”
สร้างดัชนีเอกสารด้วย tsvector เรียกใช้คำค้นภาษาธรรมชาติด้วย to_tsquery และจัดอันดับผลลัพธ์ด้วย ts_rank คุณปฏิบัติ SQL Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน SQL Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน SQL Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “บทนำการค้นหาข้อความเต็มรูปแบบ (tsvector, to_tsquery)” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน SQL Academy นี้ได้ไหม
ได้ บทเรียน SQL Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การต่อข้อความ: || และ CONCAT
- UPPER, LOWER, SUBSTRING, REPLACE
- TRIM, LPAD, RPAD
- บทนำการค้นหาข้อความเต็มรูปแบบ (tsvector, to_tsquery)