sql >> Database >  >> RDS >> Mysql

Mysql zoeken naar string en nummer met MATCH() AGAINST()

Als je Fiat nodig hebt en 500 overal waar de volgorde er niet toe doet, dan

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

Als je Fiat 500 nodig hebt samen, dan

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

Als je Fiat nodig hebt en nul of meer 500 , dan

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

Als je 500 nodig hebt en nul of meer Fiat , dan

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

Probeer het eens !!!

UPDATE 28-01-2013 18:28 EDT

Dit zijn de standaardinstellingen voor zoeken in 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>

Merk op dat ft_min_word_len is standaard 4. Het token 500 heeft lengte 3. Het wordt dus helemaal niet geïndexeerd. U moet drie (3) dingen doen:

STAP 01:Configureren voor kleinere string-tokens

Voeg dit toe aan /etc/my.cnf

[mysqld]
ft_min_word_len = 1

STAP 02:Start mysql opnieuw

service mysql restart

STAP 03 :Indexeer alle indexen in de models opnieuw tafel

U kunt gewoon de FULLTEXT-index neerzetten en toevoegen

of doe het in fasen en kijk van tevoren hoe groot het wordt

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;

Als je tevreden bent dat dit werkte, voer dan

DROP TABLE models_old;

Probeer het eens !!!



  1. Hoe de waarde SQL_CALC_FOUND_ROWS te krijgen met behulp van voorbereide instructies?

  2. Verbinding maken met mysql 5.0-database met pure vbscript?

  3. Hoe verwijder ik emoji-tekens uit een string?

  4. PostgreSQL - haal de rij op met de maximale waarde voor een kolom