Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Mysql wyszukuje ciąg i liczbę za pomocą MATCH() AGAINST()

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL używa nazw kolumn z innej tabeli

  2. SUMA(DISTINCT) na podstawie innych kolumn

  3. Dynamiczne wybieranie opcji php i mysql

  4. Wyświetlanie danych mysql w tabeli html PHP

  5. Jak wypełnić dziury w polach autoinkrementacji?