Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Apa aplikasi pencarian situs yang paling mudah untuk diterapkan, yang mendukung pencarian fuzzy?

jawaban ewemli berada di arah yang benar tetapi Anda harus menggabungkan pemetaan FULLTEXT dan soundex, tidak mengganti teks lengkap, jika tidak, kueri LIKE Anda kemungkinan akan sangat lambat.

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 | 
+----+--------------------------------+---------------------------+

Itu memberikan hasil yang cukup bagus (dalam batas algo soundex) sambil mengambil keuntungan maksimal dari indeks (setiap kueri LIKE '%foo' harus memindai setiap baris dalam tabel).

Perhatikan pentingnya menjalankan soundex pada setiap kata, bukan pada seluruh frasa. Anda juga dapat menjalankan versi soundex Anda sendiri pada setiap kata daripada meminta SQL melakukannya tetapi dalam hal ini pastikan Anda melakukannya saat menyimpan dan mengambil jika ada perbedaan antara algoritme (misalnya, algo MySQL tidak membatasi sendiri ke 4 karakter standar )



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pernyataan hapus MySQL dengan batas

  2. Mengakses Database MySql dari file PHP di host lokal

  3. Karakter dan dan perbedaan dalam bahasa persia - Mysql

  4. Bagaimana saya tahu jika tabel mysql menggunakan myISAM atau InnoDB Engine?

  5. Kenaikan Otomatis di Tabel Sementara