sql >> Databáze >  >> RDS >> Mysql

Mysql vyhledá řetězec a číslo pomocí MATCH() AGAINST()

Pokud potřebujete Fiat a 500 kdekoli, kde na pořadí nezáleží, pak

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

Pokud potřebujete Fiat 500 společně, pak

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

Pokud potřebujete Fiat a nula nebo více 500 , pak

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

Pokud potřebujete 500 a nula nebo více Fiat , pak

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

Vyzkoušejte to !!!

AKTUALIZACE 2013-01-28 18:28 EDT

Zde jsou výchozí nastavení pro FULLTEXTOVÉ vyhledávání

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>

Všimněte si, že ft_min_word_len je standardně 4. Token 500 má délku 3. nebude tedy vůbec indexován. Budete muset udělat tři (3) věci:

KROK 01:Konfigurace pro menší řetězcové tokeny

Přidejte to do /etc/my.cnf

[mysqld]
ft_min_word_len = 1

KROK 02:Restartujte mysql

service mysql restart

KROK 03:Přeindexujte všechny indexy v models tabulka

Můžete jednoduše vypustit a přidat FULLTEXTOVÝ index

nebo to udělejte po etapách a předem uvidíte, jak velké to bude

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;

Až budete spokojeni, že to fungovalo, spusťte

DROP TABLE models_old;

Vyzkoušejte to !!!



  1. Databázový migrační kód

  2. Jak přidat vypočítaný sloupec do tabulky serveru SQL - SQL Server / Výukový program T-SQL, část 47

  3. Příklady MAKETIME() – MySQL

  4. MySQL SUM Hodnoty json seskupené podle klíčů json