sql >> Database teknologi >  >> RDS >> Mysql

Mysql søg efter streng og tal ved hjælp af MATCH() AGAINST()

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



  1. Sådan trækkes et år fra en dato i MariaDB

  2. KONTROLLER BEGRÆNSNING af streng for kun at indeholde cifre. (Oracle SQL)

  3. Kan ikke oprette forbindelse til mysql database [strato]

  4. Sådan forhindrer du racetilstand i online hotelbooking