Gam*_*ric 10 mysql search numbers match-against
我对MATCH AGAINST功能有问题.
以下查询给出了相同的结果:
SELECT * FROM models MATCH(name) AGAINST('Fiat 500')
SELECT * FROM models MATCH(name) AGAINST('Fiat')
Run Code Online (Sandbox Code Playgroud)
如何在FULL TEXT表的列中搜索字符串和数字?
谢谢
Rol*_*DBA 31
如果您需要Fiat和500任何订单无关紧要的地方,那么
SELECT * FROM models MATCH(name) AGAINST('+Fiat +500');
Run Code Online (Sandbox Code Playgroud)
如果你需要Fiat 500在一起,那么
SELECT * FROM models MATCH(name) AGAINST('+"Fiat 500"');
Run Code Online (Sandbox Code Playgroud)
如果你需要Fiat零或更多500,那么
SELECT * FROM models MATCH(name) AGAINST('+Fiat 500');
Run Code Online (Sandbox Code Playgroud)
如果你需要500零或更多Fiat,那么
SELECT * FROM models MATCH(name) AGAINST('Fiat +500');
Run Code Online (Sandbox Code Playgroud)
试试看 !!!
以下是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>
Run Code Online (Sandbox Code Playgroud)
请注意,ft_min_word_len默认为4.令牌500的长度为3.因此它根本不会被索引.你将不得不做三(3)件事:
将此添加到 /etc/my.cnf
[mysqld]
ft_min_word_len = 1
Run Code Online (Sandbox Code Playgroud)
service mysql restart
Run Code Online (Sandbox Code Playgroud)
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;
Run Code Online (Sandbox Code Playgroud)
当你满意这个工作,然后运行
DROP TABLE models_old;
Run Code Online (Sandbox Code Playgroud)
试试看 !!!
| 归档时间: |
|
| 查看次数: |
20918 次 |
| 最近记录: |