MySQL - Tìm kiếm văn bản bằng ngôn ngữ tự nhiên

Xin chào, những người đam mê cơ sở dữ liệu! Hôm nay, chúng ta sẽ bắt đầu một hành trình thú vị vào thế giới của Tìm kiếm văn bản bằng ngôn ngữ tự nhiên của MySQL. Đừng lo lắng nếu bạn mới bắt đầu lập trình; tôi sẽ hướng dẫn bạn từng bước qua chủ đề này, giống như tôi đã làm cho hàng trăm sinh viên trong những năm dạy học của mình. Hãy cùng nhau khám phá!

MySQL - Natural Language Fulltext Search

什么是自然语言全文搜索?

Hãy tưởng tượng bạn đang tìm một cuốn sách trong một thư viện khổng lồ. Thay vì quét qua từng cuốn sách, có phải sẽ tuyệt vời nếu bạn chỉ cần mô tả điều bạn đang tìm kiếm và để thư thư viện tìm nó cho bạn? Đó chính xác là điều mà Tìm kiếm văn bản bằng ngôn ngữ tự nhiên làm cho cơ sở dữ liệu!

Tìm kiếm văn bản bằng ngôn ngữ tự nhiên là một tính năng mạnh mẽ trong MySQL cho phép bạn tìm kiếm các bản ghi dựa trên mức độ liên quan của chúng với một văn bản truy vấn cụ thể. Đó 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!

Làm thế nào để nó hoạt động?

  1. MySQL tạo một chỉ mục của tất cả các từ trong các cột được chỉ định.
  2. Khi bạn tìm kiếm, nó tìm kiếm các bản ghi chứa những từ đó.
  3. Nó sau đó xếp hạng kết quả dựa trên mức độ liên quan của chúng với truy vấn tìm kiếm của bạn.

Hãy cùng xem điều này trong hành động với một số ví dụ mã!

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

INSERT INTO books (title, description) VALUES
('The MySQL Handbook', 'A comprehensive guide to MySQL database management'),
('SQL for Beginners', 'Learn SQL from scratch with easy-to-follow examples'),
('Database Design Mastery', 'Advanced techniques for efficient database design');

SELECT * FROM books
WHERE MATCH(title, description) AGAINST('MySQL guide');

Trong ví dụ này, chúng ta:

  1. Tạo một bảng叫做 'books' với chỉ mục FULLTEXT trên 'title' và 'description'.
  2. Chèn một số dữ liệu mẫu.
  3. Thực hiện một Tìm kiếm văn bản bằng ngôn ngữ tự nhiên cho "MySQL guide".

MySQL sẽ trả về kết quả được xếp hạng theo mức độ liên quan, có thể với "The MySQL Handbook" ở vị trí đầu tiên!

Từ stop trong tìm kiếm

Bây giờ, hãy nói về một khái niệm叫做 "từ stop". Hãy tưởng tượng nếu mỗi lần bạn nói, bạn đếm "the", "a", "an", v.v. Nó sẽ rất mệt mỏi, phải không? MySQL cũng nghĩ như vậy!

Từ stop là những từ phổ biến mà MySQL bỏ qua trong quá trình tìm kiếm全文 để tiết kiệm thời gian và cải thiện mức độ liên quan. Những từ này thường bao gồm:

Từ stop
a, an, and
are, as, at
be, but, by
for, if, in
into, is, it
no, not, of
on, or, such
that, the, their
then, there, these
they, this, to
was, will, with

Làm thế nào để xử lý từ stop

Mặc định, MySQL sử dụng danh sách từ stop của riêng mình. Tuy nhiên, bạn có thể thay đổi hành vi này:

  1. Để xem danh sách từ stop hiện tại:
SELECT * FROM INFORMATION_SCHEMA.INNODB_FT_DEFAULT_STOPWORD;
  1. Để tắt từ stop hoàn toàn:
SET GLOBAL innodb_ft_enable_stopword = OFF;
  1. Để sử dụng danh sách từ stop tùy chỉnh:
SET GLOBAL innodb_ft_server_stopword_table = 'database_name/table_name';

Lưu ý, xử lý từ stop có thể ảnh hưởng lớn đến kết quả tìm kiếm của bạn, vì vậy hãy sử dụng các tùy chọn này một cách khôn ngoan!

Tìm kiếm văn bản bằng ngôn ngữ tự nhiên bằng chương trình client

Bây giờ chúng ta đã hiểu các nguyên tắc cơ bản, hãy xem cách chúng ta có thể thực hiện Tìm kiếm văn bản bằng ngôn ngữ tự nhiên trong một tình huống thực tế bằng cách sử dụng một chương trình client. Trong ví dụ này, chúng ta sẽ sử dụng Python với thư viện MySQL Connector.

Đầu tiên, hãy chắc chắn rằng bạn đã cài đặt MySQL Connector:

pip install mysql-connector-python

Bây giờ, hãy tạo một đoạn mã Python đơn giản:

import mysql.connector

# Kết nối đến cơ sở dữ liệu MySQL
db = mysql.connector.connect(
host="localhost",
user="your_username",
password="your_password",
database="your_database"
)

cursor = db.cursor()

# Hàm để thực hiện tìm kiếm全文
def fulltext_search(search_term):
query = "SELECT * FROM books WHERE MATCH(title, description) AGAINST(%s IN NATURAL LANGUAGE MODE)"
cursor.execute(query, (search_term,))
results = cursor.fetchall()
return results

# Ví dụ sử dụng
search_results = fulltext_search("MySQL guide")

for result in search_results:
print(f"ID: {result[0]}, Title: {result[1]}, Description: {result[2]}")

# Đóng kết nối
db.close()

Hãy phân tích điều này:

  1. Chúng ta import MySQL Connector và thiết lập kết nối đến cơ sở dữ liệu của mình.
  2. Chúng ta định nghĩa một hàm fulltext_search nhận một từ khóa tìm kiếm.
  3. Trong hàm, chúng ta xây dựng và thực hiện một truy vấn MySQL sử dụng Tìm kiếm văn bản bằng ngôn ngữ tự nhiên.
  4. Chúng ta lấy và trả về kết quả.
  5. Cuối cùng, chúng ta演示 cách sử dụng hàm này và in kết quả.

Đoạn mã này cho phép bạn dễ dàng thực hiện Tìm kiếm văn bản bằng ngôn ngữ tự nhiên từ trong ứng dụng Python của bạn!

Kết luận

Và đây bạn có nó, các bạn! Chúng ta đã cùng nhau hành trình qua thế giới thú vị của Tìm kiếm văn bản bằng ngôn ngữ tự nhiên của MySQL. Từ việc hiểu các khái niệm cơ bản đến việc triển khai nó trong một tình huống thực tế, bạn现在已经 có công cụ để làm cho tìm kiếm cơ sở dữ liệu của bạn hiệu quả và liên quan hơn.

Nhớ rằng, giống như học một ngôn ngữ mới, việc thành thạo các truy vấn cơ sở dữ liệu đòi hỏi phải thực hành. Vì vậy, đừng nản lòng nếu nó không ngay lập tức dễ hiểu. Hãy tiếp tục thử nghiệm, và sớm bạn sẽ trở thành một chuyên gia trong việc truy vấn cơ sở dữ liệu!

Như tôi luôn nói với sinh viên của mình, cơ sở dữ liệu giống như thư viện được tổ chức tốt, và bạn đang học để trở thành thư thư viện hiệu quả nhất trong thị trấn. Chúc may mắn trong việc truy vấn!

Credits: Image by storyset