Hvis du har brug for Fiat
og 500
hvor som helst, hvor rækkefølgen ikke betyder noget, så
SELECT * FROM models MATCH(name) AGAINST('+Fiat +500');
Hvis du har brug for Fiat 500
sammen, så
SELECT * FROM models MATCH(name) AGAINST('+"Fiat 500"');
Hvis du har brug for Fiat
og nul eller mere 500
, derefter
SELECT * FROM models MATCH(name) AGAINST('+Fiat 500');
Hvis du har brug for 500
og nul eller mere Fiat
, derefter
SELECT * FROM models MATCH(name) AGAINST('Fiat +500');
Prøv det!!!
OPDATERING 2013-01-28 18:28 EDT
Her er standardindstillingerne for FULLTEXT-søgning
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>
Bemærk, at ft_min_word_len> er 4 som standard. Token 500 er længde 3. Derfor bliver den slet ikke indekseret. Du bliver nødt til at gøre tre(3) ting:
TRIN 01:Konfigurer til mindre streng-tokens
Føj dette til /etc/my.cnf
[mysqld]
ft_min_word_len = 1
TRIN 02:Genstart mysql
service mysql restart
TRIN 03:Genindekser alle indekser i models
tabel
Du kan bare slippe og tilføje FULLTEXT-indekset
eller gør det i etaper og se, hvor stort det bliver på forhånd
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;
Når du er tilfreds med, at dette virkede, så kør
DROP TABLE models_old;
Prøv det!!!