MYSQL Full-Text Search (ค้นหาข้อความแบบเต็ม) อธิบายความเข้าใจเกี่ยวกับการนำ MySQL FullText จากการค้นหาระบบ ในแบบเดิมซึ่งจะใช้การค้นหาด้วย LIKE '%Keyword%' ซึ่งจะไปค้นหา จาก Keyword ที่มีคำนั้น ๆ อยู่ใน Column หรือ ฟิวด์ใน Database เช่น
เช่น
Welcome to www.ThaiCreate.Com the best free tutorials
กรณีใช้ LIKE '%fr%' ก็จะได้ Record นี้มาเพราะคำว่า fr มีอยู่ในประโยค free
แต่ในระบบ Full Text ข้อความจะถูกจัดทำดัชนี หรือ Index แยกประโยคและความหมายของศัพท์คำ ประโยคหรือข้อความที่ไม่มีความสำคัญต่อการค้นหา ก็จะไม่ถูกจัดทำดัชนีเป็น Index และจะจัดทำดัชนีสำหรับประโยคที่สำคัญ ๆ ไว้สำหรับการค้นหา ซึ่งวิธีการนี้จะทำให้เราสามารถค้นหาข้อมูลได้ตรงกับความต้องการมากที่สุด ซึ่งจะแต่กต่างกับการใช้ LIKE จะได้ผลลัพธ์
[Welcome] [to] [www.ThaiCreate.Com] [the] [best] [free] [tutorials]
จากการทำดัชนี (Index) แยกคำหรือประโยคได้แล้วก็จะถูกนำไปจัดเก็บกับความสำคัญของคำศัพท์ ไว้สำหรับเปรียบเทียบคำต่อคำ คำไหนที่ไม่มีประโยชน์ เช่น to , the .. ก็จะไม่ถูกทำดับชนีไว้สำหรับค้นหา กรณีใช้ค้นหา fr จะไม่พบ Record ดังกล่าว ซึ่งจะช่วยให้การค้นหานั้น สามารถค้นหาได้อย่างรวดเร็ว เพราะได้จัดทำ index ไว้แล้ว และยังตรงกับความต้องการมากที่สุด
การใช้งาน MySQL FULLTEXT
สำหรับ MySQL FULLTEXT นั้นรองรับ DataType อยู่ 3 ประเภทคือ CHAR VARCHAR แล้วก็ TEXT ซึ่งในการกำหนดคุณสมบัติของ Table และ Column ให้เป็นแบบ FULLTEXT สามารถกำหนดได้ในขั้นตอนการ CREATE TABLE
CREATE TABLE `customer` (
`CustomerID` varchar(4) NOT NULL,
`Name` varchar(50) NOT NULL,
`Email` varchar(50) NOT NULL,
`CountryCode` varchar(2) NOT NULL,
`Budget` double NOT NULL,
`Used` double NOT NULL,
PRIMARY KEY (`CustomerID`),
FULLTEXT (`Name`,`Email`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
หรือในกรณีที่มี Table อยู่แล้วก็สามารถใช้คำสั่ง ALTER ได้เช่นเดียวกัน
ALTER TABLE `customer` ADD FULLTEXT(`Name`,`Email`);
ตัวอย่างนี้กำหนดให้เป็นแบบ FULLTEXT มี `Name`,`Email`
ทดสอบการใช้งาน MySQL FULLTEXT
INSERT INTO `customer` VALUES ('C001', 'Win Weerachai', 'win.weerachai@thaicreate.com', 'TH', 1000000, 600000);
INSERT INTO `customer` VALUES ('C002', 'John Smith', 'john.smith@thaicreate.com', 'EN', 2000000, 800000);
INSERT INTO `customer` VALUES ('C003', 'Jame Born', 'jame.born@thaicreate.com', 'US', 3000000, 600000);
INSERT INTO `customer` VALUES ('C004', 'Chalee Angel', 'chalee.angel@thaicreate.com', 'US', 4000000, 100000);
การค้นหาด้วย MySQL FULLTEXT
Sample 1
SELECT * FROM `customer` WHERE MATCH (Name,Email) AGAINST ('jo')
CustomerID |
Name |
Email |
CountryCode |
Budget |
Used |
Sample 2
SELECT * FROM `customer` WHERE MATCH (Name,Email) AGAINST ('Born')
CustomerID |
Name |
Email |
CountryCode |
Budget |
Used |
C003 |
Jame Born |
jame.smith@thaicreate.com |
US |
3000000 |
600000 |
Sample 3
SELECT * FROM `customer` WHERE MATCH (Name,Email) AGAINST ('Born Weerachai')
CustomerID |
Name |
Email |
CountryCode |
Budget |
Used |
C001 |
Win Weerachai |
win.weerachai@thaicreate.com |
TH |
1000000 |
600000 |
C003 |
Jame Born |
jame.smith@thaicreate.com |
US |
3000000 |
600000 |
หมายเหตุ : ผิดพลาดประการใดขออภัยด้วยครับ