mysql - mysql 中的全文搜索不会检索所有行

标签 mysql sql full-text-search

我在 mysql 中查询时遇到问题。

这就是我所做的:

CREATE TABLE `dar`.`MyTable` (
  `MyCol` VARCHAR(100) NOT NULL,
  FULLTEXT INDEX `Index_1`(`MyCol`)
) 
ENGINE = MyISAM;

INSERT INTO MyTable (MyCol)
VALUES ('6002.C3'),
       ('6002'),
       ('6002R1'),
       ('6003.C4'),
       ('AA6002.X'),
       ('BB 6002.X');

这不是必需的,但我还是这么做了:

REPAIR TABLE MyTable QUICK;

现在,我执行下一个查询:

SELECT MyCol FROM MyTable
WHERE MATCH(MyCol) AGAINST ('6002*');

而且,它不返回任何行!!

参数ft_min_word_len我已更改为2,但没有任何更改。

删除带有“BB 6002.X”的行时,查询返回 2 行!!

6002
6002.C3

这太令人毛骨悚然了。

知道这里发生了什么吗?

我需要查询返回:

6002.C3
6002
6002R1

加上如果包括:

AA6002.X
BB 6002.X

提前致谢!!

最佳答案

您的数据集中已超过 50% 的阈值。尝试一下

SELECT MyCol FROM MyTable
WHERE MATCH(MyCol) AGAINST ('6003');

看看结果是什么。

当您第一次尝试全文搜索以了解其工作原理时,50% 阈值具有重要意义:如果您创建一个表并仅向其中插入一两行文本,则文本中的每个单词都会出现在至少 50% 的行。因此,任何搜索都不会返回任何结果。确保插入至少三行,最好是更多。需要绕过50%限制的用户可以使用 bool 搜索模式;请参阅第 12.9.2 节“ bool 全文搜索”。

http://dev.mysql.com/doc/refman/5.0/en/fulltext-natural-language.html

关于mysql - mysql 中的全文搜索不会检索所有行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28183301/

相关文章:

ruby-on-rails - rails 太阳黑子的光替代品

mysql - MySQL 中的文本搜索 - 性能和替代方案

用于匹配字典中单词的 JavaScript 算法

mysql - SQL 与自身连接

mysql - 我无法将输入保存到数据库 Vuejs 和 Laravel

mysql - MySql如何计算三列之和

c# - 如何在用于 SQL 插入的方法中进行参数化查询?

php - 使用 PHP PDO 事务的单个与多个 SQL UPDATE 性能

MYSQL:根据多个条件合并具有不同列数且不共享ID的两个表

PHP上传文件,保存文件url到MySQL