sql >> Databasteknik >  >> RDS >> Mysql

Mysql sök efter sträng och nummer med MATCH() AGAINST()

Om du behöver Fiat och 500 var som helst där ordning inte spelar någon roll, då

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

Om du behöver Fiat 500 tillsammans, då

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

Om du behöver Fiat och noll eller mer 500 , sedan

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

Om du behöver 500 och noll eller mer Fiat , sedan

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

Ge det ett försök !!!

UPPDATERING 2013-01-28 18:28 EDT

Här är standardinställningarna för sökning i 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>

Lägg märke till att ft_min_word_len> är 4 som standard. Token 500 är längd 3. Därför kommer den inte att indexeras alls. Du måste göra tre(3) saker:

STEG 01:Konfigurera för mindre strängtokens

Lägg till detta i /etc/my.cnf

[mysqld]
ft_min_word_len = 1

STEG 02:Starta om mysql

service mysql restart

STEG 03:Indexera om alla index i models tabell

Du kan bara släppa och lägga till FULLTEXT-indexet

eller gör det i etapper och se hur stort det blir i förväg

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 är nöjd med att detta fungerade, kör sedan

DROP TABLE models_old;

Ge det ett försök !!!



  1. Hur tar man bort begränsningar från min MySQL-tabell?

  2. MAX() Funktion i MariaDB

  3. Hur förhindrar man samtidiga användarinloggningar på PHP/MySQL-webbplatsen?

  4. Obligatoriska fält saknar resultat