วันจันทร์ที่ 1 ธันวาคม พ.ศ. 2557

MYSQL Full-Text Search

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 

การค้นหาด้วย 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 Bornjame.smith@thaicreate.com
US
3000000600000


Sample 3
SELECT * FROM `customer` WHERE MATCH (Name,Email) AGAINST ('Born Weerachai')

CustomerID
Name
Email
CountryCode
Budget
Used
C001
Win Weerachaiwin.weerachai@thaicreate.com
TH
1000000600000
C003
Jame Bornjame.smith@thaicreate.com
US
3000000600000

ไม่มีความคิดเห็น:

แสดงความคิดเห็น