gpt4 book ai didi

sql - 带有部分单词的 MySQL 全文搜索

转载 作者:行者123 更新时间:2023-12-04 12:36:13 25 4
gpt4 key购买 nike

MySQL 全文搜索似乎很棒,也是在 SQL 中搜索的最佳方式。但是,我似乎坚持这样一个事实,即它不会搜索部分单词。例如,如果我有一篇名为“MySQL 教程”的文章并搜索“MySQL”,它不会找到它。

做了一些搜索后,我发现了各种引用资料来支持 MySQL 4 中的这一点(我使用的是 5.1.40)。我试过使用“MySQL”和“%MySQL%”,但都不起作用(我发现的一个链接暗示它是星星,但你只能在结尾或开头都这样做)。

这是我的表结构和我的查询,如果有人能告诉我哪里出错了,那就太好了。我假设部分单词匹配是以某种方式内置的。

如果不存在“文章”,则创建表(
`article_id` smallint(5) 无符号 NOT NULL AUTO_INCREMENT,
`article_name` varchar(64) 非空,
`article_desc` 文本不为空,
`article_link` varchar(128) 非空,
`article_hits` int(11) 非空,
`article_user_hits` int(7) unsigned NOT NULL DEFAULT '0',
`article_guest_hits` int(10) unsigned NOT NULL DEFAULT '0',
`article_rating` decimal(4,2) NOT NULL DEFAULT '0.00',
`article_site_id` smallint(5) 无符号 NOT NULL DEFAULT '0',
`article_time_ added` int(10) 无符号非空,
`article_discussion_id` smallint(5) 无符号 NOT NULL DEFAULT '0',
`article_source_type` varchar(12) 非空,
`article_source_value` varchar(12) 非空,
PRIMARY KEY (`article_id`),
全文键`article_name`(`article_name`、`article_desc`、`article_link`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=7 ;

INSERT INTO `articles` VALUES
(1, 'MySQL Tutorial', 'Lorem Ipsum 只是打印和排版行业的虚拟文本。自 1500 年代以来,Lorem Ipsum 一直是行业标准的虚拟文本,当时一位不知名的打印机使用了一个类型的厨房并对其进行了处理一本类型样本书。它不仅存活了五个世纪,而且还经历了电子排版的飞跃,基本保持不变。它在 1960 年代随着包含 Lorem Ipsum 段落的 Letraset 表的发布而普及,最近又出现了桌面出版软件,例如Aldus PageMaker 包括 Lorem Ipsum 的版本。', 'http://www.domain.com/', 6, 3, 1, '1.50', 1, 1269702050, 1, '0', '0'),
(2, 'How To Use MySQL Well', 'Lorem Ipsum 只是打印和排版行业的虚拟文本。自 1500 年代以来,Lorem Ipsum 一直是行业标准的虚拟文本,当时一个不知名的打印机拿着一个类型的厨房并打乱它制作了一本类型样本书。它不仅存活了五个世纪,而且还经历了电子排版的飞跃,基本保持不变。它在 1960 年代随着包含 Lorem Ipsum 段落的 Letraset 表的发布而得到普及,最近还有桌面发布软件,如 Aldus PageMaker,包括 Lorem Ipsum 的版本。', 'http://www.domain.com/', 1, 2, 0, '3.00', 1, 1269702050, 1, '0', '0') ,
(3, 'Optimizing MySQL', 'Lorem Ipsum 只是打印和排版行业的虚拟文本。自 1500 年代以来,Lorem Ipsum 一直是行业标准的虚拟文本,当时一个不知名的打印机拿了一个类型的厨房并把它搅乱一本类型样本书。它不仅存活了五个世纪,而且还经历了电子排版的飞跃,基本保持不变。它在 1960 年代随着包含 Lorem Ipsum 段落的 Letraset 表的发布而普及,最近又出现了桌面出版软件,例如Aldus PageMaker 包括 Lorem Ipsum 的版本。', 'http://www.domain.com/', 0, 1, 0, '3.00', 1, 1269702050, 1, '0', '0'),
(4, '1001 MySQL Tricks', 'Lorem Ipsum 只是打印和排版行业的虚拟文本。自 1500 年代以来,Lorem Ipsum 一直是行业标准的虚拟文本,当时一位不知名的打印机使用了一个类型的厨房并将其打乱制作一本类型样本书。它不仅存活了五个世纪,而且还经历了电子排版的飞跃,基本保持不变。它在 1960 年代随着包含 Lorem Ipsum 段落的 Letraset 表的发布而普及,最近又出现了桌面出版软件像 Aldus PageMaker,包括 Lorem Ipsum 的版本。', 'http://www.domain.com/', 0, 1, 0, '3.00', 1, 1269702050, 1, '0', '0'),
(5, 'MySQL vs. YourSQL', 'Lorem Ipsum 只是打印和排版行业的虚拟文本。自 1500 年代以来,Lorem Ipsum 一直是行业标准的虚拟文本,当时一个不知名的打印机使用了一个类型的厨房并对其进行了打乱制作类型样本书。它不仅存活了五个世纪,而且还经历了电子排版的飞跃,基本上保持不变。它在 1960 年代随着包含 Lorem Ipsum 段落的 Letraset 表的发布而普及,最近又出现了桌面出版像 Aldus PageMaker 这样的软件,包括 Lorem Ipsum 的版本。', 'http://www.domain.com/', 0, 2, 0, '3.00', 1, 1269702050, 1, '0', '0'),
(6, 'MySQL Security', 'Lorem Ipsum 只是打印和排版行业的虚拟文本。自 1500 年代以来,Lorem Ipsum 一直是行业标准的虚拟文本,当时一个不知名的打印机拿了一个类型的厨房并把它搅乱一本类型样本书。它不仅存活了五个世纪,而且还经历了电子排版的飞跃,基本保持不变。它在 1960 年代随着包含 Lorem Ipsum 段落的 Letraset 表的发布而普及,最近又出现了桌面出版软件,例如Aldus PageMaker 包括 Lorem Ipsum 的版本。', 'http://www.domain.com/', 0, 2, 0, '3.00', 1, 1269702050, 1, '0', '0');

SELECT count(a.article_id) FROM 文章 a

WHERE MATCH (a.article_name, a.article_desc, a.article_link) AGAINST ('mysql')
GROUP BY a.article_id
ORDER BY a.article_time_ added ASC

使用前缀是因为它来自有时会添加额外连接的函数。

正如您所看到的,对 MySQL 的搜索应该返回 6 的计数,但不幸的是它没有。

更新

由于每一行都匹配,因此没有返回任何结果。

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

“搜索结果为空,因为“MySQL”这个词出现在至少 50% 的行中。因此,它被有效地视为停用词。对于大型数据集,这是最理想的行为:自然语言查询不应从 1GB 表中每隔一行返回一次。对于小数据集,可能不太理想。”

最佳答案

我的理解是 MySQL FULLTEXT 索引仅支持搜索前缀 ( MATCH (a.article_name) AGAINST ('MySQL*' IN BOOLEAN MODE) )。

关于sql - 带有部分单词的 MySQL 全文搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2716748/

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