BÁO CÁO TUẦN 4 Sinh Viên : Nguyễn Đình Huấn Lớp : K53CC PHƯƠNG PHÁP TÌM KIẾM NHANH THEO CHỈ MỤC FULL TEXT SEARCH I.Tìm Kiếm Nhanh Là Gì 1.Tìm Kiếm Nhanh Là Gì -Tìm kiếm nhanh : Là việ
Trang 1BÁO CÁO TUẦN 4
Sinh Viên : Nguyễn Đình Huấn
Lớp : K53CC PHƯƠNG PHÁP TÌM KIẾM NHANH THEO CHỈ MỤC FULL
TEXT SEARCH
I.Tìm Kiếm Nhanh Là Gì
1.Tìm Kiếm Nhanh Là Gì
-Tìm kiếm nhanh : Là việc người dùng sử dụng chức năng tìm kiếm nhanh để tìm kiếm thông tin trong một trang web theo từ khóa bộ máy tìm kiếm của website sẽ dựa trên từ khóa nhập vào của người dùng và tìm kiếm tất cả những thông tin và văn bản liên quan đến từ khóa trong CSDL một cách nhanh nhất để cung cấp cho người dùng
2.Làm Sao Để Tìm Kiếm Nhanh
- Đề tìm kiếm thông tin chính xác càng trở nên quan trọng Với khối lượng dữ liệu lớn và có
tổ chức phức tạp, vấn đề đặt ra là làm thế nào để tìm nhanh và đúng thông tin cần Người dùng không muốn tìm kiếm một từ mà lại có cả triệu câu trả lời, họ cần sự chính xác và loại
bỏ các từ gây nhiễu Có một số phương pháp giúp tìm kiếm nhanh trong CSDL
-Một trong những phương pháp tìm kiếm nhanh là phương pháp tìm kiếm theo chỉ mục (index) gọi là “Tìm Kiếm Toàn Văn “
II Tìm Kiếm Nhanh Full-Text-Search
1.Sơ Lược về tìm kiếm full-text.
- MySQL hỗ trợ tìm kiếm văn bản bằng lệnh LIKE và các biểu thức tìm kiếm Tuy nhiên khi cột dữ liệu dạng TEXT có dung lượng lớn và số dòng nhiều thì những phương pháp nêu trên bộc lộ những giới hạn sau:
Hiệu năng : MySQL phải quét qua toàn bộ bảng để tìm từng dòng theo điều kiện lọc chỉ
ra ở lệnh LIKE hay tìm những mẫu văn bản phù hợp với mẫu được chỉ ra trong biểu thức tìm kiếm.Vì vậy sẽ cần rất nhiều thời gian dể tìm kiếm trên CSDL lớn
Tính linh hoạt : Ví dụ đối với yêu cầu tìm kiếm tất cả các sản phẩm có chứa từ ‘car’
trong phần mô tả nhưng lại không chứa từ ‘classic’ thì cả lệnh LIKE và biểu thức tìm kiếm đều bộc lộ hạn chế
với yêu cầu tìm kiếm nhất
Trang 2Title LIKE ‘%one%’
Thì nó sẽ có thể trả về những kể quả sau: one, zone, money, phone nói chung là không chính
xác vì dải kết quả trả về sẽ rộng và có thể chứa nhiều kết quả nhiễu không mong muốn
Tìm kiếm tiếng việt có dấu và không dấu : Giả sử ta lưu tiếng Việt có dấu trong database,
nhưng người dùng nhập tiếng Việt không dấu thì mệnh đề LIKE chắc chắn sẽ không tìm ra được dữ liệu ta cần Có một số giải pháp ví dụ như lưu 2 field, một có dấu và một không dấu, nhưng cách này xem ra không tối ưu và không hỗ trợ search gần đúng
-Từ những giới hạn trên, MySQL cung cấp tính năng “tìm kiếm toàn văn” – full text search Xét về mặt kĩ thuật thì MySQL đánh chỉ mục các từ của cột được tiến hành tìm kiếm full-text Như thế việc tìm kiếm trên mục này sẽ hiệu quả hơn MySQL sử dụng những thuật toán phức tạp để xác định xem dòng nào phù hợp với yêu cầu tìm kiếm nhất
Những đặc tính quan trọng của tìm kiếm full-text trong MySQL:
nào có diễn ra thay đổi dữ liệu trên cột này
tìm kiếm full-text trên bảng InnoDB (version >=5.6 beta)
Để có thể tiến hành tìm kiếm full-text trên cột dữ liệu, chúng ta cần khai báo theo cú pháp sau:
2.Phương Pháp Thực Hiện
Cách 1:
CREATE TABLE table_name (
‘column1’ data_type ,
…
PRIMARY_KEY ( ‘key_column’ ),
FULLTEXT ( ‘column_name1’ , ’column_name2’ , )
) ENGINE = MyISAM
Ví dụ:
Trang 3CREATE TABLE `products`
`productCode` varchar( 15 ) NOT NULL,
`productName` varchar( 70 ) NOT NULL,
`productLine` varchar( 50 ) NOT NULL,
`productScale` varchar( 10 ) NOT NULL,
`productVendor` varchar( 50 ) NOT NULL,
`productDescription` text NOT NULL,
`quantityInStock` smallint( ) NOT NULL,
`buyPrice` double NOT NULL,
`MSRP` double NOT NULL,
PRIMARY KEY `productCode` ), FULLTEXT ( `productDescription` ,
) ENGINE = MyISAM
Cách 2:
ALTER TABLE table_name
ADD FULLTEXT ( column_name1 , column_name2 , )
Ví dụ:
ALTER TABLE products
ADD FULLTEXT ( productDescription ,
Productline ,
productVendor )
-Ví dụ trên trường “productCode” là khóa chính Chúng ta đã dùng mệnh đề FULLTEXT để đánh chỉ mục cho 3 trường là productDescription , productline va productVendor
-Chú ý dòng FULLTEXT (`productDescription`,`productLine`,`productVendor`) Các chỉ mục chỉ có thể được tạo ra trên các trường có kiểu là VARCHAR và TEXT Khi các trường này đã có chỉ mục thì CSDL đã sẵn sàng cho việc khai thác tính năng TKTV để tìm các bản ghi phù hợp yêu cầu tìm kiếm dựa trên các giá trị có trong ba trường này
Xóa các cột hỗ trợ tìm kiếm full-text.
ALTER TABLE <table_name>
DROP INDEX <index_name> ;
Chúng ta dùng kết hợp lệnh ALTER TABLE và DROP INDEX như ví dụ sau:
ALTER TABLE products
DROP INDEX productDescription ;
3.Cách Tìm Kiếm
a.Tìm Kiếm Theo Ngôn Ngữ Tự Nhiên
- MySQL tìm kiếm các dòng hoặc các tài liệu tương ứng với câu truy vấn theo ngôn ngữ tự nhiên
- MySQL tính toán độ tương thích dựa trên số từ trong dòng, số các từ độc nhất trong dòng
đó, tổng số từ, số các dòng (hay tài liệu) có chứa từ tìm kiếm
Trang 4- Để thực hiện tìm kiếm theo ngôn ngữ tự nhiên, chúng ta sử dụng hai hàm MATCH và AGAINST
tự nhiên mà người dùng nhập vào)
Ví dụ 1: Để tìm kiếm những dòng sản phẩm có chứa từ ‘Classic’ hay ‘Vintage’ ta lập câu truy vấn như sau
SELECT productName , productline
FROM products
WHERE MATCH ( productline ) AGAINST ( 'Classic,Vintage' )
-Chúng ta có thể khai báo rõ ràng trong câu truy vấn về chế độ tìm kiếm là tìm theo ngôn ngữ
tự nhiên (theo mặc định thì MySQL ngầm hiểu là tìm theo ngôn ngữ tự nhiên, tuy nhiên để rõ ràng thì ta có thể khai báo như sau)
SELECT productName , productline
FROM products
WHERE MATCH ( productline )
AGAINST ( 'Classic,Vintage' IN NATURAL LANGUAGE MODE )
Theo mặc định, MySQL sắp xếp kết quả phù hợp nhất lên trước trong tập kết quả tìm kiếm
b.Tìm Kiếm Văn Bản Chế Độ BOOLEAN
Ngoài chế độ tìm kiếm văn bàn theo ngôn ngữ tự nhiên, MySQL còn cung cấp chế độ tìm kiếm văn bản theo chế độ Boolean (logic) – nghĩa là tìm kiếm theo từ khóa chứ không tìm theo khái niệm như ở chế độ tìm kiếm theo ngôn ngữ tự nhiên Cách tìm kiếm như sau:
Ví dụ 2: Để tìm tất cả các sản phẩm có tên Truck nhưng không được chứa từ ‘Pickup’ câu truy vấn có dạng như sau:
SELECT productName , productline
FROM products
WHERE MATCH ( productName ) AGAINST ( 'Truck -Pickup' IN BOOLEAN MODE )
Dưới đây là bảng liệt kê các toán tử và ý nghĩa của chúng trong phép tìm kiếm văn bản theo chế độ Boolean
+ Gộp, từ được chỉ ra phải có trong kết quả tìm kiếm
- Loại trừ, từ được chỉ ra không thể xuất hiện trong kết quả tìm kiếm
Trang 5> Gộp và giá trị xếp hạng tăng dần
< Gộp và giá trị xếp hạng giảm dần
() Nhóm các từ nằm trong dấu () (là gộp, loại trừ, xếp hạng, như một nhóm thống nhất).
~ Phủ định giá trị xếp hạng
* Dấu thay thế cuối từ
"" Xác định một cụm từ
c Tìm kiếm theo tính năng mở rộng của MYSQL
Trong nhiều trường hợp, người sử dụng muốn tìm kiếm thông tin dựa theo tri thức mà họ có
Do đó, họ sử dụng chính tri thức ấy để xây dựng từ khóa tìm kiếm Và thường thì các từ khóa tìm kiếm ấy quá ngắn Để giải quyết vấn đề này, cơ chế tìm kiếm full-text của MySQL cung cấp khái niệm gọi là mở rộng truy vấn.
Về mặt kĩ thuật, cơ chế này gồm các bước sau:
cầu tìm kiếm của câu truy vấn
lại dựa trên các từ liên quan
Ví Dụ 3 : Ví dụ 1: Xét việc tìm kiếm tên sản phẩm có chứa ‘1932’
- truy vấn thông thường :
SELECT productName
FROM products
WHERE MATCH ( productName ) AGAINST ( '1992' )
Kết quả trả về chỉ có 2 dòng Với tính năng mở rộng truy vấn, ta có kết quả như sau
- truy vấn mở rộng
SELECT productName
FROM products
WHERE MATCH ( productName )
AGAINST ( '1992' WITH QUERY EXPANSION )
Trang 6- Kết quả gồm có 7 dòng 2 dòng đầu hoàn toàn phù hợp với yêu cầu truy vấn Những dòng sau là những sản phẩm có tên liên quan đến tên của 2 sản phẩm ở trên, chứ không nhất thiết là phải chứa từ khóa ‘1932’