0Pricing
SQL Academy · บทเรียน

บทนำการค้นหาข้อความเต็มรูปแบบ (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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การต่อข้อความ: || และ CONCAT
  2. UPPER, LOWER, SUBSTRING, REPLACE
  3. TRIM, LPAD, RPAD
  4. บทนำการค้นหาข้อความเต็มรูปแบบ (tsvector, to_tsquery)
← กลับไปที่ SQL Academy