บันทึก: Full Text Search

Full Text Search เป็นเทคนิกการค้นหาคำที่ต้องการในเอกสารหน้าใหญ่ ๆ
ระบบฐานข้อมูลของ MySQL มีให้มาเลย แต่เห็นเขาว่าช้า
ส่วน Postgresql ไม่มีฟังก์ชั่นนี้มาให้ จำเป็นต้องติดตั้งเพิ่มเข้าไปเอง โมดูลนี้ชื่อว่า tsearch2
ซึ่งมีวิธีการติดตั้งและใช้งานที่ยุ่งยากพอควร

จึงคิดว่าถ้าเราเปลี่ยนวิธีในการจัดเก็บข้อมูล โดยแทนที่จะให้ค้นจากเนื้อหาใหญ่ ๆ แต่เราแตกข้อมูลเราออกมาเป็นคำ ๆ แล้วค้นจากคำ มันน่าจะเร็วกว่ากันมาก เพราะระบบจะทำงานกับข้อความเพียงนิดเดียว แต่จะทำงานกับตัวเลขมากกว่า จึงทำให้เร็ว แต่ข้อเสียคือตอนจัดเก็บจะช้ามาก เพราะต้องแตกเนื้อหาออกมาเป็นคำ ๆ แล้วจึงกระจายเก็บคำในฐานข้อมูล (ถ้าจุดนี้ช้ามาก อาจต้องทำเลียนแบบกูเกิล คือบันทึกก่อนแล้วมาขโมยแตกเนื้อหาในภายหลัง โดยสร้างเป็น bot ในเครื่องเราเอง ให้ทำงานคอยตรวจตราเป็นเบื้องหลัง)

จากการทดลองเบื้องต้น พบว่าการค้นหาเร็วกว่าแบบ BTree ปกติมาก (ยังไม่เคยลอง tsearch2 เพราะนึกถึงตอนอัปเกรดแล้วเลยพาลขี้เกียจติดตั้ง) แต่เรื่องที่ต้องเผชิญต่อไปคือต้องเขียนฟังก์ชั่นการแตกคำและฟังก์ชั่นการค้นหาเอาเอง

บันทีกไว้ก่อนเพื่อกันลืม เดี๋ยวค่อยกลับมาลองแนวคิดนี้อีกทีนึง

update
ลองแล้วได้ผลดีน่าพอใจ เหลือแต่เขียนฟังก์ชั่นการค้นหาให้ดีก็ใช้ได้แล้ว
ทดสอบได้ที่ ค้นเนื้อหาไพธอน

Topic: 

sql: บันทึกความผิดพลาด

บันทึกความผิดพลาดของการใช้คำสั่ง SQL

  • เวลาต้องการตรวจแค่ว่าเรคคอร์ดนั้นมีข้อมูลหรือไม่
    • เดิมใช้ SELECT abc FROM ... WHERE ...
    • ควรใช้ SELECT 1 FROM ... WHERE ...
  • เหมือนข้อแรก แต่ถ้ามีจำนวนเรคคอร์ดมาก ต้องเติม LIMIT 1 เข้าไปด้วย มิฉะนั้นจะทำให้ช้ามาก
    • เดิมใช้ SELECT 1 FROM ... WHERE ...
    • ควรใช้ SELECT 1 FROM ... WHERE ... LIMIT 1
Topic: