Mysql
 sql >> база данни >  >> RDS >> Mysql

Mysql търсене на низ и число с помощта на MATCH() AGAINST()

Ако имате нужда от Fiat и 500 навсякъде, където редът няма значение, тогава

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

Ако имате нужда от Fiat 500 заедно, след това

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

Ако имате нужда от Fiat и нула или повече 500 , след това

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

Ако имате нужда от 500 и нула или повече Fiat , след това

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

Опитайте !!!

АКТУАЛИЗИРАНЕ 2013-01-28 18:28 EDT

Ето настройките по подразбиране за търсене на ПЪЛЕН ТЕКСТ

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>

Обърнете внимание, че ft_min_word_len е 4 по подразбиране. Токенът 500 е с дължина 3. следователно изобщо няма да бъде индексиран. Ще трябва да направите три (3) неща:

СТЪПКА 01 :Конфигуриране за по-малки низови токени

Добавете това към /etc/my.cnf

[mysqld]
ft_min_word_len = 1

СТЪПКА 02:Рестартирайте mysql

service mysql restart

СТЪПКА 03:Повторно индексиране на всички индекси в models маса

Можете просто да пуснете и да добавите индекса FULLTEXT

или го направете на етапи и вижте колко голям ще стане предварително

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;

Когато сте доволни, това работи, стартирайте

DROP TABLE models_old;

Опитайте !!!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Изберете най-новия ред с GROUP BY в MySQL

  2. Как да напишете заявка за присъединяване в Volusion API

  3. Разберете дали изразът REPLACE е заменил или току-що вмъкнал в MySQL

  4. MySQL Подреждане по номер, нула последни

  5. Как да променя MySQL таблица на UTF-8?