Bài 3: Tìm kiếm toàn văn bản ngôn ngữ tự nhiên

MySQL Tìm kiếm toàn văn bản ngôn ngữ

Tóm tắt : trong hướng dẫn này, bạn sẽ tìm hiểu về tìm kiếm toàn văn bản ngôn ngữ tự nhiên của MySQL bằng cách sử dụng các hàm MATCH()AGAINST().

Giới thiệu về tìm kiếm toàn văn bản ngôn ngữ MySQL

Trong các tìm kiếm toàn văn bản ngôn ngữ tự nhiên, MySQL tìm kiếm các hàng hoặc tài liệu có liên quan đến truy vấn ngôn ngữ tự nhiên của văn bản tự do, ví dụ, Cách sử dụng tìm kiếm toàn văn bản ngôn ngữ tự nhiên của MySQL.

Sự liên quan là một số dấu phẩy động dương. Khi mức độ liên quan bằng 0, điều đó có nghĩa là không có sự tương đồng. MySQL tính toán mức độ liên quan dựa trên các yếu tố khác nhau bao gồm số lượng từ trong tài liệu, số lượng từ duy nhất trong tài liệu, tổng số từ trong bộ sưu tập và số lượng tài liệu (hàng) có chứa một từ cụ thể.

Để thực hiện tìm kiếm toàn văn bản ngôn ngữ tự nhiên, bạn sử dụng MATCH() và các AGAINST()chức năng. Các MATCH() chức năng xác định cột mà bạn muốn tìm kiếm và AGAINST() chức năng xác định sự biểu hiện tìm kiếm để được sử dụng.

Ví dụ tìm kiếm toàn văn bản ngôn ngữ MySQL

Chúng tôi sẽ sử dụng productsbảng trong cơ sở dữ liệu mẫu cho trình diễn.

Trước tiên, bạn cần kích hoạt tìm kiếm toàn văn bản trong productLine cột của products bảng bằng cách sử dụng ALTER TABLE ADD FULLTEXT câu lệnh:

ALTER TABLE products 
ADD FULLTEXT(productline);

Thứ hai, bạn có thể tìm kiếm các sản phẩm có dòng sản phẩm chứa thuật ngữ này Classic . Bạn sử dụng MATCH() và các AGAINST() chức năng như truy vấn sau đây:

SELECT productName, productline
FROM products
WHERE MATCH(productline) AGAINST('Classic');

Ví dụ 1: Tìm kiếm sử dụng MATH() và AGAINST()

SELECT productName, productline
FROM products
WHERE MATCH(productline) AGAINST('Classic');

Để tìm kiếm sản phẩm có dòng sản phẩm chứa Classichoặc Vintage thuật ngữ, bạn có thể thực hiện truy vấn sau:

SELECT productName, productline
FROM products
WHERE MATCH(productline) AGAINST('Classic,Vintage');

Ví dụ 2: Sử dụng thuật ngữ hoặc để tìm kiếm

SELECT productName, productline FROM products WHERE MATCH(productline) AGAINST('Classic,Vintage');

Các AGAINST() chức năng sử dụng IN NATURAL LANGUAGE MODE sửa đổi tìm kiếm mặc định do đó bạn có thể bỏ qua nó trong truy vấn. Có những sửa đổi tìm kiếm khác, ví dụ, IN BOOLEAN MODE đối với tìm kiếm văn bản Boolean .

Bạn rõ ràng có thể sử dụng công IN NATURAL LANGUAGE MODE cụ sửa đổi tìm kiếm trong truy vấn của mình như sau:

SELECT productName, productline
FROM products
WHERE MATCH(productline) 
AGAINST('Classic,Vintage' IN NATURAL LANGUAGE MODE)

Theo mặc định, MySQL thực hiện các tìm kiếm theo kiểu không phân biệt chữ hoa chữ thường. Tuy nhiên, bạn có thể hướng dẫn MySQL thực hiện các tìm kiếm phân biệt chữ hoa chữ thường bằng cách sử dụng đối chiếu nhị phân cho các cột được lập chỉ mục.

Sắp xếp kết quả được thiết lập theo mức độ liên quan

Một tính năng rất quan trọng của tìm kiếm toàn văn bản là cách MySQL xếp các hàng trong tập kết quả dựa trên mức độ liên quan của chúng. Khi MATCH() hàm được sử dụng trong mệnh đề WHERE , MySQL sẽ trả về các hàng có liên quan hơn trước.

Ví dụ sau đây cho bạn thấy cách MySQL sắp xếp kết quả được đặt theo mức độ liên quan.

Đầu tiên, bạn kích hoạt tính năng tìm kiếm toàn văn cho productNamecột của productsbảng.

ALTER TABLE products 
ADD FULLTEXT(productName);

Thứ hai, bạn tìm kiếm các sản phẩm có tên chứa Ford và / hoặc 1932sử dụng truy vấn sau:

SELECT productName, productline
FROM products
WHERE MATCH(productName) AGAINST('1932,Ford')

Hãy xem xét đầu ra: Các sản phẩm có tên chứa cả hai 1932Fordđược trả về trước và sau đó là các sản phẩm có tên chứa Fordtừ khóa duy nhất .

Có một số điểm quan trọng bạn nên nhớ khi sử dụng tìm kiếm toàn văn bản:

  • Chiều dài tối thiểu của thuật ngữ tìm kiếm định nghĩa trong công cụ tìm kiếm toàn văn MySQL là 4. Điều này có nghĩa rằng nếu bạn tìm kiếm từ khóa có chiều dài nhỏ hơn 4 ví dụ car, catvv, bạn sẽ không nhận được bất kỳ kết quả.

  • Từ dừng được bỏ qua. MySQL định nghĩa một danh sách các từ dừng trong phân phối mã nguồn MySQL storage/myisam/ft_static.c

Trong hướng dẫn này, bạn đã chỉ cho bạn cách sử dụng MATCH()và các AGAINST()chức năng để thực hiện tìm kiếm ngôn ngữ tự nhiên trong MySQL.

Last updated