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

Ứng dụng tìm kiếm trang web dễ thực hiện nhất, hỗ trợ tìm kiếm mờ là gì?

Câu trả lời của ewemli là đúng hướng nhưng bạn nên kết hợp ánh xạ FULLTEXT và soundex, không thay thế toàn bộ văn bản, nếu không các truy vấn LIKE của bạn có thể rất chậm.

create table with_soundex (
  id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
  original TEXT,
  soundex TEXT,
  FULLTEXT (soundex)
);

insert into with_soundex (original, soundex) values 

('add some test cases', CONCAT_WS(' ', soundex('add'), soundex('some'), soundex('test'), soundex('cases'))),
('this is some text', CONCAT_WS(' ', soundex('this'), soundex('is'), soundex('some'), soundex('text'))),
('one more test case', CONCAT_WS(' ', soundex('one'), soundex('more'), soundex('test'), soundex('case'))),
('just filling the index', CONCAT_WS(' ', soundex('just'), soundex('filling'), soundex('the'), soundex('index'))),
('need one more example', CONCAT_WS(' ', soundex('need'), soundex('one'), soundex('more'), soundex('example'))),
('seems to need more', CONCAT_WS(' ', soundex('seems'), soundex('to'), soundex('need'), soundex('more')))
('some helpful cases to consider', CONCAT_WS(' ', soundex('some'), soundex('helpful'), soundex('cases'), soundex('to'), soundex('consider')))

select * from with_soundex where match(soundex) against (soundex('test'));
+----+---------------------+---------------------+
| id | original            | soundex             |
+----+---------------------+---------------------+
|  1 | add some test cases | A300 S500 T230 C000 | 
|  2 | this is some text   | T200 I200 S500 T230 | 
|  3 | one more test case  | O500 M600 T230 C000 | 
+----+---------------------+---------------------+

select * from with_soundex where match(soundex) against (CONCAT_WS(' ', soundex('test'), soundex('some')));
+----+--------------------------------+---------------------------+
| id | original                       | soundex                   |
+----+--------------------------------+---------------------------+
|  1 | add some test cases            | A300 S500 T230 C000       | 
|  2 | this is some text              | T200 I200 S500 T230       | 
|  3 | one more test case             | O500 M600 T230 C000       | 
|  7 | some helpful cases to consider | S500 H414 C000 T000 C5236 | 
+----+--------------------------------+---------------------------+

Điều đó mang lại kết quả khá tốt (trong giới hạn của thuật ngữ soundex) trong khi tận dụng tối đa chỉ mục (bất kỳ truy vấn nào LIKE '% foo' phải quét mọi hàng trong bảng).

Lưu ý tầm quan trọng của việc chạy soundex trên từng từ, không phải trên toàn bộ cụm từ. Bạn cũng có thể chạy phiên bản soundex của riêng mình trên mỗi từ thay vì để SQL làm điều đó nhưng trong trường hợp đó, hãy đảm bảo bạn làm điều đó cả khi lưu trữ và truy xuất trong trường hợp có sự khác biệt giữa các thuật toán (ví dụ:thuật toán của MySQL không giới hạn chính nó theo tiêu chuẩn 4 ký tự )



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách đọc và in dữ liệu từ mysql trong c #

  2. Làm cách nào để kiểm tra phạm vi ngày tồn tại

  3. ServiceStack:Đang kiểm tra OrmLite, được cài đặt bằng NuGet nhưng tôi gặp lỗi FileNotFoundException

  4. bẫy cảnh báo MySql

  5. Mã lỗi:2013. Mất kết nối với máy chủ MySQL trong khi truy vấn