Jeśli potrzebujesz Fiat
i 500
wszędzie tam, gdzie porządek nie ma znaczenia, to
SELECT * FROM models MATCH(name) AGAINST('+Fiat +500');
Jeśli potrzebujesz Fiat 500
razem, to
SELECT * FROM models MATCH(name) AGAINST('+"Fiat 500"');
Jeśli potrzebujesz Fiat
i zero lub więcej 500
, to
SELECT * FROM models MATCH(name) AGAINST('+Fiat 500');
Jeśli potrzebujesz 500
i zero lub więcej Fiat
, to
SELECT * FROM models MATCH(name) AGAINST('Fiat +500');
Wypróbuj !!!
AKTUALIZACJA 28.01.2013 18:28 EDT
Oto domyślne ustawienia wyszukiwania PEŁNEGO TEKSTU
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>
Zauważ, że ft_min_word_len domyślnie wynosi 4. Token 500 ma długość 3. więc nie będzie w ogóle indeksowany. Będziesz musiał zrobić trzy (3) rzeczy:
KROK 01:Skonfiguruj dla mniejszych tokenów ciągu
Dodaj to do /etc/my.cnf
[mysqld]
ft_min_word_len = 1
KROK 02:Uruchom ponownie mysql
service mysql restart
KROK 03:Ponownie zindeksuj wszystkie indeksy w models
stół
Możesz po prostu upuścić i dodać indeks PEŁNOTEKSTOWY
lub zrób to etapami i zobacz, jak duży będzie z wyprzedzeniem
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;
Jeśli uznasz, że to zadziałało, uruchom
DROP TABLE models_old;
Wypróbuj !!!