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

Pencarian Mysql untuk string dan nomor menggunakan MATCH() AGAINST()

Jika Anda membutuhkan Fiat dan 500 di mana saja di mana ketertiban tidak masalah, maka

SELECT * FROM models MATCH(name) AGAINST('+Fiat +500');

Jika Anda membutuhkan Fiat 500 bersama-sama, lalu

SELECT * FROM models MATCH(name) AGAINST('+"Fiat 500"');

Jika Anda membutuhkan Fiat dan nol atau lebih 500 , lalu

SELECT * FROM models MATCH(name) AGAINST('+Fiat 500');

Jika Anda membutuhkan 500 dan nol atau lebih Fiat , lalu

SELECT * FROM models MATCH(name) AGAINST('Fiat +500');

Cobalah !!!

PERBARUI 28-01-2013 18:28 EDT

Berikut adalah pengaturan default untuk pencarian FULLTEXT

mysql> show variables like 'ft%';
+--------------------------+----------------+
| Variable_name            | Value          |
+--------------------------+----------------+
| ft_boolean_syntax        | + -><()~*:""&| |
| ft_max_word_len          | 84             |
| ft_min_word_len          | 4              |
| ft_query_expansion_limit | 20             |
| ft_stopword_file         | (built-in)     |
+--------------------------+----------------+
5 rows in set (0.00 sec)

mysql>

Perhatikan bahwa ft_min_word_len adalah 4 secara default. Token 500 panjangnya 3. sehingga tidak akan diindeks sama sekali. Anda harus melakukan tiga (3) hal:

LANGKAH 01 :Konfigurasikan untuk token string yang lebih kecil

Tambahkan ini ke /etc/my.cnf

[mysqld]
ft_min_word_len = 1

LANGKAH 02 :Mulai ulang mysql

service mysql restart

LANGKAH 03 :Mengindeks ulang semua indeks di models tabel

Anda bisa menjatuhkan dan menambahkan indeks FULLTEXT

atau lakukan secara bertahap dan lihat seberapa besar hasilnya

CREATE TABLE models_new LIKE models;
ALTER TABLE models_new DROP INDEX name;
ALTER TABLE models_new ADD FULLTEXT name (name);
ALTER TABLE models_new DISABLE KEYS;
INSERT INTO models_new SELECT * FROM models;
ALTER TABLE models_new ENABLE KEYS;
ALTER TABLE models RENAME models_old;
ALTER TABLE models_new RENAME models;

Ketika Anda puas ini berhasil, lalu jalankan

DROP TABLE models_old;

Cobalah !!!



  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 memilih nilai default jika tidak ada hasil?

  2. MySQL Query untuk biaya buku kelas

  3. memindahkan tabel dari satu skema ke skema lain?

  4. Sinkronisasi data antara MySQL dan MongoDB

  5. Cara mendapatkan yang setara dengan ResultSetMetaData tanpa ResultSet