gpt4 book ai didi

Mysql 使用 MATCH() AGAINST() 搜索字符串和数字

转载 作者:IT王子 更新时间:2023-10-28 23:45:37 24 4
gpt4 key购买 nike

我对 MATCH AGAINST 函数有疑问。

以下查询给了我相同的结果:

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

如何在 FULL TEXT 表的列中同时搜索字符串和数字?

谢谢

最佳答案

如果您需要 Fiat500 而顺序无关紧要,那么

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

如果你需要菲亚特500一起,那么

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

如果您需要 法币 和零个或多个 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。 token 500 的长度为 3。因此它根本不会被索引。您将必须做三 (3) 件事:

第 01 步:配置较小的字符串标记

将此添加到 /etc/my.cnf

[mysqld]
ft_min_word_len = 1

第二步:重启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;

试一试!!!

关于Mysql 使用 MATCH() AGAINST() 搜索字符串和数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14572375/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com