MySQL - Tìm kiếm全文 Boolean

Xin chào, những người yêu thích cơ sở dữ liệu! Hôm nay, chúng ta sẽ cùng lặn sâu vào thế giới kỳ diệu của Tìm kiếm全文 Boolean trong MySQL. Là giáo viên máy tính gần gũi của bạn, tôi rất vui mừng được dẫn đường cho bạn trong hành trình này. Đừng lo lắng nếu bạn là người mới bắt đầu lập trình - chúng ta sẽ bắt đầu từ những điều cơ bản và dần dần nâng cao. Vậy, hãy lấy một tách cà phê (hoặc trà, nếu đó là sở thích của bạn), và chúng ta cùng bắt đầu nhé!

MySQL - Boolean Fulltext Search

Tìm kiếm全文 Boolean là gì?

Hãy tưởng tượng bạn đang tìm một cuốn sách cụ thể trong một thư viện khổng lồ. Thay vì kiểm tra từng cuốn sách một, có phải sẽ tuyệt vời nếu bạn có thể nói với thư thư viện, "Tôi muốn một cuốn sách về rồng, nhưng không về hiệp sĩ, và nó phải đề cập đến phép thuật"? Đó chính xác là điều mà Tìm kiếm全文 Boolean trong MySQL làm cho cơ sở dữ liệu của bạn!

Tìm kiếm全文 Boolean trong MySQL là một tính năng mạnh mẽ cho phép bạn tìm kiếm các từ hoặc cụm từ cụ thể trong một lượng lớn dữ liệu văn bản. Nó giống như có một thư thư viện siêu thông minh cho cơ sở dữ liệu của bạn, có thể nhanh chóng tìm ra chính xác điều bạn đang tìm kiếm.

Hãy bắt đầu với một ví dụ đơn giản:

CREATE TABLE books (
id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(255),
description TEXT,
FULLTEXT(description)
);

INSERT INTO books (title, description) VALUES
('The Dragon\'s Quest', 'A magical adventure with dragons and wizards'),
('Knight\'s Tale', 'A story of brave knights and their quests'),
('Enchanted Forest', 'Magical creatures in a mysterious forest');

SELECT * FROM books
WHERE MATCH(description) AGAINST('dragons +magical -knights' IN BOOLEAN MODE);

Trong ví dụ này, chúng ta đang tạo một bảng叫做 'books' và thêm một số dữ liệu mẫu. Câu truy vấn cuối cùng là nơi xảy ra phép màu. Nó đang tìm kiếm các sách:

  • Chứa từ 'dragons'
  • Phải chứa từ 'magical' (đó là điều mà '+' làm)
  • Phải không chứa từ 'knights' (đó là điều mà '-' làm)

Kết quả? Nó sẽ trả về 'The Dragon's Quest' vì nó khớp với tất cả các tiêu chí này.

Các phép toán trong Tìm kiếm全文 Boolean

Bây giờ, hãy xem xét một số phép toán chúng ta có thể sử dụng trong Tìm kiếm全文 Boolean. Hãy tưởng tượng chúng như những hướng dẫn đặc biệt cho thư thư viện của chúng ta:

Phép toán Mô tả Ví dụ
+ Phải chứa từ này +dragon
- Phải không chứa từ này -knight
> Tăng độ quan trọng >magic
< Giảm độ quan trọng <forest
* Tự chọn (khớp với bất kỳ kết thúc nào) drag*
" " Cụm từ chính xác "magic wand"
() Nhóm (+magic +wand) -broom

Hãy xem chúng trong hành động:

SELECT * FROM books
WHERE MATCH(description) AGAINST('>magic +creatures -knights ("enchanted forest")' IN BOOLEAN MODE);

Câu truy vấn này đang tìm kiếm các sách:

  • Ưu tiên chứa 'magic' (nhưng không bắt buộc)
  • Phải chứa 'creatures'
  • Phải không chứa 'knights'
  • Nên có cụm từ chính xác "enchanted forest"

Bạn có thể đoán cuốn sách nào nó sẽ trả về không? Đúng rồi, 'Enchanted Forest'!

Các tính năng của Tìm kiếm全文 Boolean

Xếp hạng độ quan trọng

Một trong những tính năng tuyệt vời nhất của Tìm kiếm全文 Boolean là xếp hạng độ quan trọng. MySQL không chỉ tìm ra các kết quả khớp; nó còn xếp hạng chúng dựa trên mức độ khớp với tiêu chí tìm kiếm.

SELECT *, MATCH(description) AGAINST('magic dragons' IN BOOLEAN MODE) AS relevance
FROM books
WHERE MATCH(description) AGAINST('magic dragons' IN BOOLEAN MODE)
ORDER BY relevance DESC;

Câu truy vấn này sẽ trả về tất cả các sách chứa 'magic' hoặc 'dragons', được xếp hạng theo mức độ quan trọng của chúng đối với các từ này.

Tìm kiếm tự chọn

Nhớ lại phép toán '*' mà chúng tôi đã đề cập trước đó? Nó vô cùng hữu ích để tìm kiếm các từ có các kết thúc khác nhau:

SELECT * FROM books
WHERE MATCH(description) AGAINST('mag*' IN BOOLEAN MODE);

Điều này sẽ tìm thấy các sách với các từ như 'magic', 'magical', 'mage', và vân vân.

Tìm kiếm cụm từ

Khi bạn muốn tìm một cụm từ chính xác, hãy sử dụng dấu phẩy kép:

SELECT * FROM books
WHERE MATCH(description) AGAINST('"magical adventure"' IN BOOLEAN MODE);

Điều này sẽ chỉ trả về các sách với cụm từ chính xác "magical adventure".

Tìm kiếm全文 Boolean bằng chương trình khách

Trong khi chúng ta đã sử dụng các truy vấn SQL trực tiếp, trong các tình huống thực tế, bạn thường sử dụng một chương trình khách để tương tác với cơ sở dữ liệu. Dưới đây là một ví dụ đơn giản bằng Python sử dụng thư viện mysql-connector:

import mysql.connector

def search_books(keyword):
conn = mysql.connector.connect(
host="localhost",
user="your_username",
password="your_password",
database="your_database"
)
cursor = conn.cursor()

query = "SELECT * FROM books WHERE MATCH(description) AGAINST(%s IN BOOLEAN MODE)"
cursor.execute(query, (keyword,))

results = cursor.fetchall()
for row in results:
print(f"Title: {row[1]}, Description: {row[2]}")

cursor.close()
conn.close()

search_books('+magic -knights')

Chức năng này kết nối với cơ sở dữ liệu MySQL của bạn, thực hiện Tìm kiếm全文 Boolean, và in kết quả.

Và thế là bạn đã có nó, các bạn! Chúng ta đã cùng nhau hành trình qua thế giới của Tìm kiếm全文 Boolean trong MySQL, từ khái niệm cơ bản đến các ứng dụng thực tế. Nhớ rằng, giống như bất kỳ công cụ mạnh mẽ nào khác, nó đòi hỏi sự thực hành để thành thạo. Vậy đừng ngại thử nghiệm và mắc lỗi - đó là cách chúng ta học!

Trước khi kết thúc, hãy nghe một câu chuyện nhỏ từ những ngày dạy học của tôi: Tôi từng có một học sinh gặp khó khăn với tìm kiếm cơ sở dữ liệu. Anh ấy liên tục cố gắng tìm một sợi针 trong một bó cỏ bằng cách kiểm tra từng sợi cỏ một. Khi tôi giới thiệu anh ấy đến Tìm kiếm全文, ánh mắt anh ấy sáng lên như thể anh ấy vừa khám phá ra phép thuật. Và thực ra, anh ấy đã đúng! Bởi vì đó là điều mà công nghệ tốt làm - nó biến điều không thể thành phép thuật.

Tiếp tục thực hành, 保持好奇心, và chúc bạn may mắn trong việc tìm kiếm!

Credits: Image by storyset