当前位置: 首页 > 面试题库 >

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

太叔睿
2023-03-14
问题内容

我对MATCH AGAINST函数有问题。

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

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

如何在“全文”表的列中搜索字符串和数字?

谢谢


问题答案:

如果您需要的地方Fiat500顺序无关紧要,那么

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');

试试看 !!!

这是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>

请注意,默认情况下 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;

试试看 !!!



 类似资料:
  • 问题内容: 我正在编写新闻稿脚本,并且需要在地址中实施搜索。我用FULLTEXT为该表编制了索引,但是当我执行以下查询时: 我得到奇怪的结果。它显示“ example.com”上的所有电子邮件以及用户名为“ name”的所有电子邮件。例如我得到: 我重新编写了查询,以使用LIKE“ %name@example.com%”,但是对于一个大表,它需要花费大量的时间才能完成。有解决方案吗?我想在搜索时仅

  • 本文向大家介绍使用MySQL搜索字符串中的特定字符?,包括了使用MySQL搜索字符串中的特定字符?的使用技巧和注意事项,需要的朋友参考一下 为此,请使用REGEXP。例如,字符J,A,V和A。让我们首先创建一个表- 使用插入命令在表中插入一些记录- 使用select语句显示表中的所有记录- 这将产生以下输出- 以下是使用MySQL在字符串中搜索字符的查询- 这将产生以下输出-

  • 我希望typeahead.js在如何匹配项方面表现得像jqueryui autocomplete。使用jqueryui autocomplete可以在文本项中进行搜索。在typeahead中,它仅从字符串的开头开始。 自动完成示例:http://goo.gl/O43afF 提前键入示例:http://twitter.github.io/typeahead.js/examples/ 使用autoco

  • 问题内容: 我发现 find_in_set 仅按单个字符串搜索: 在上面的示例中,“ a”是唯一用于搜索的字符串。 有什么方法可以使用find_in_set类型的功能并通过多个字符串进行搜索,例如: 在上面的示例中,我想通过三个字符串’a,b,c’进行搜索。 我看到的一种方法是使用 OR 除此之外,还有其他方法吗? 问题答案: 没有本机函数可以执行此操作,但是您可以使用以下技巧来实现目标

  • 要转义这些字符,请在字符前面使用\。例如,要搜索(1+1):2,请使用以下查询: 为此,我使用方法: 我使用经典分析器是因为我注意到标准分析器在转义特殊字符方面存在一些问题。 null

  • 本文向大家介绍在MySQL数据库中快速搜索字符串?,包括了在MySQL数据库中快速搜索字符串?的使用技巧和注意事项,需要的朋友参考一下 使用FULLTEXT搜索来快速搜索字符串。让我们首先创建一个表- 这是创建全文本搜索的查询- 使用插入命令在表中插入一些记录- 使用select语句显示表中的所有记录- 这将产生以下输出- 以下是在MySQL数据库中快速搜索字符串的查询。在这里,我们正在搜索字符串