Tôi có truy vấn giống như thế này.
SELECT DISTINCT id, MATCH[column] AGAINST['%s' IN BOOLEAN MODE] AS score
FROM table
WHERE
MATCH[column] AGAINST ['%s' IN BOOLEAN MODE]
ORDER BY score DESC
Tôi thực sự không SỬ DỤNG "điểm số" trong kết quả, tuy nhiên, nó chỉ ở đó để sắp xếp.
Nhưng khi nhìn lại, tôi thực sự không chắc tại sao mình lại sử dụng "IN BOOLEAN MODE". Tôi nhận ra rằng tôi có thể làm điều này và nhận được kết quả tương tự [nó tự động sắp xếp theo "mức độ liên quan"].
SELECT DISTINCT id
FROM table
WHERE
MATCH[column] AGAINST ['%s' IN NATURAL LANGUAGE MODE]
Tôi đã đọc tài liệu về cả hai nhưng tôi không thực sự chắc chắn về sự khác biệt giữa hai chế độ.
Chế độ ngôn ngữ tự nhiên.
[dev. mysql. com. ]
Chế độ Boolean.
[dev. mysql. com. ]
Tôi không sử dụng InnoDB.
Tôi biết rằng người dùng có thể sử dụng + và - trong Chế độ Boolean, cũng như các toán tử khác, nhưng tôi không thể mong đợi người dùng biết điều đó. Và tôi không thực sự chắc chắn rằng họ sẽ vượt qua được mysqli_real_escape_string[], dù sao đi nữa. Tôi đoán rằng tôi có thể thiết lập một biểu mẫu với người dùng để chọn các tùy chọn rồi tự cắm chúng vào?
Tôi cũng không biết "ngưỡng 50%" mà nó đề cập là gì.
Các bạn và các bạn nghĩ sao, cái nào tốt hơn cho một biểu mẫu tìm kiếm đơn giản mà người dùng gửi từ PHP?
Chào mừng bạn đến với phần 3 của loạt bài này về lập chỉ mục toàn văn và tìm kiếm trong MySQL. Trong , chúng ta đã thấy cách MySQL cung cấp khả năng tìm kiếm toàn văn thông qua lập chỉ mục FULLTEXT cùng với ba loại tìm kiếm toàn văn khác biệt sau đây
- Tìm kiếm toàn văn bằng ngôn ngữ tự nhiên
- Tìm kiếm toàn văn Boolean
- Tìm kiếm mở rộng truy vấn
Trong , tôi đã mô tả cách thực hiện các tìm kiếm toàn văn bằng Ngôn ngữ tự nhiên trong. Blog hôm nay tiếp nối phần 2 đã dừng lại và đề cập đến kiểu tìm kiếm toàn văn tiếp theo. Tìm kiếm toàn văn Boolean
Chế độ Boolean hướng đến từ nhiều hơn so với tìm kiếm ngôn ngữ tự nhiên. Như vậy, tìm kiếm toàn văn Boolean hỗ trợ các truy vấn rất phức tạp bao gồm các toán tử Boolean. Đối với người dùng có kinh nghiệm, tìm kiếm toàn văn bản Boolean cung cấp phương tiện để thực hiện một số tìm kiếm nâng cao
Đây là cách nó hoạt động
Để thực hiện tìm kiếm toàn văn ở chế độ Boolean, bạn bao gồm công cụ sửa đổi IN BOOLEAN MODE trong biểu thức CHỐNG LẠI. Nhớ lại rằng, trong phần trước, chúng tôi đã thêm chỉ mục toàn văn vào bảng phim để chúng tôi có thể thực hiện tìm kiếm toàn văn trên trường mô tả. Đây là một ví dụ trả về tất cả các phim có phần mô tả chứa từ "Quản gia"
Tìm kiếm trên đủ đơn giản để không yêu cầu tìm kiếm toàn văn. Sẽ thú vị hơn rất nhiều khi bạn bắt đầu thực hiện những việc như loại trừ các kết quả khớp có chứa các từ khóa nhất định. Chẳng hạn, chúng ta có thể tìm những bộ phim có phần mô tả chứa từ "Quản gia" không phải là phim tài liệu bằng cách đặt trước từ "Phim tài liệu" bằng toán tử Boolean loại trừ [ - ]
Điều đó trả về 61 hàng, so với 73 cho truy vấn trước đó của chúng tôi
Chúng tôi cũng có thể tìm kiếm các hàng có mô tả khớp với nhiều từ bằng cách sử dụng toán tử bao gồm [ + ]. Tiền tố một từ với nó cho công cụ tìm kiếm chỉ khớp với các hàng có chứa từ đó. Điều đó trở thành một điểm khác biệt quan trọng khi có nhiều từ, chẳng hạn như "+Nữ hầu bàn thợ săn quản gia". Trong trường hợp đó, tất cả các hàng có mô tả chứa từ "Quản gia" và một trong hai từ còn lại sẽ được trả về
Đối chiếu các kết quả trên với kết quả do truy vấn tạo ra với cả hai từ "Quản gia" và "Thợ săn" có tiền tố là toán tử bao gồm [+]
Bây giờ, các hàng phù hợp phải chứa cả "Quản gia" và "Thợ săn" nhưng không nhất thiết phải có "Cô hầu bàn"
Các kết quả tìm kiếm toàn văn xếp hạng cho InnoDB khác với MyISAM vì tìm kiếm toàn văn của InnoDB được mô hình hóa trên công cụ tìm kiếm toàn văn Sphinx và các thuật toán được sử dụng dựa trên các thuật toán xếp hạng BM25 và TF-IDF
Một số toán tử ảnh hưởng đến xếp hạng để chúng tôi có thể tinh chỉnh thêm kết quả. Ví dụ: chúng ta có thể tìm kiếm các hàng có chứa từ "Quản gia" nhưng xếp hạng hàng đó thấp hơn nếu nó chứa các từ "Thợ săn" hoặc "Cô hầu bàn"
Trong blog hôm nay, chúng ta đã học cách thực hiện tìm kiếm toàn văn Boolean bằng cách sử dụng. Quan tâm đến việc tìm hiểu thêm về Navicat cho MySQL?