Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

MySQL 5.6 Sự cố tìm kiếm toàn văn bản khi tìm kiếm từ trong PHP

Ok, cuối cùng tôi đã tìm ra điều này. Có vẻ như tôi đã xóa các từ dừng myisam nhưng không xóa các từ dừng innodb. Nó hơi khó nhưng khó làm hơn so với myisam nhưng đây là các bước dành cho bất kỳ ai khác có thể cần nó:

Trong /etc/my.cnf (hoặc my.ini trên windows) của bạn, hãy thêm các dòng sau:

Tạo bảng từ dừng. Tôi đã tạo của tôi trong một db có tên là settings và một bảng có tên innodb-stopwords . Bạn không thể chỉ đặt innodb_ft_enable_stopword = 0 , bạn phải tạo và liên kết đến một bảng.

Đảm bảo rằng bảng của bạn là innodb và thêm một cột có tên là value , varchar (?), utf8_general_ci. Bạn có thể để trống hoặc thêm các giá trị vào bảng.

innodb_ft_enable_stopword = 1  
innodb_ft_server_stopword_table = settings/innodb-stopwords

Khởi động lại máy chủ mysql của bạn.

Thả và tạo lại các chỉ mục văn bản đầy đủ của bạn.

Nếu bạn không muốn khởi động lại máy chủ, bạn có thể đặt động các biến bằng (cũng cập nhật tệp cnf / ini cho lần khởi động lại máy chủ tiếp theo)

--innodb_ft_enable_stopword=1
--innodb_ft_server_stopword_table=db_name/table_name

Tôi không thấy giải pháp nào để tạo lại chỉ mục ... mặc dù vậy, bạn có thể thực hiện điều đó bằng một lệnh để bảng bị khóa toàn bộ thời gian và người dùng của bạn không gặp lỗi:

ALTER TABLE `tablename` DROP INDEX indexname, ADD FULLTEXT(`columnname`);


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL - Kết nối liên tục so với tổng hợp kết nối

  2. Trong MySQL, tôi có thể trả lại các hàng đã xóa sau khi xóa không?

  3. Cách tách một bản ghi để lấy số tiền

  4. MySQL datetime không trả lại thời gian

  5. Cách chuyển nhiều biến sang PHP bằng jQuery