- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
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/
有没有办法对 Subversion 存储库执行全文搜索,包括所有历史记录? 例如,我编写了一个在某处使用过的功能,但后来不需要它,所以我对文件进行了 svn rm'd,但现在我需要再次找到它以将其用于
如何进行 MySQL 搜索,既匹配部分单词,又提供准确的相关性排序? SELECT name, MATCH(name) AGAINST ('math*' IN BOOLEAN MODE) AS rel
我在 postgresql 中创建了一个用于全文搜索的索引。 CREATE INDEX pesquisa_idx ON chamado USING gin(to_tsvector('portugues
我已经设置了一个数据库并启用了全文搜索,当我使用以下内容搜索数据库时,数据库中有一些条目包含“测试”一词,还有一个条目包含“测试更多”: SELECT keywords, title FROM dat
我想知道是否可以进行 MATCH() AGAINST()(全文)搜索,使得不直接相邻的单词需要按特定顺序排列?在我的网站上,当用户在双引号之间键入单词时,搜索将仅显示具有特定顺序的这些单词的结果。例如
我有一个 80,000 行的数据库,当我测试一些 FULLTEXT 查询时,我遇到了一个意想不到的结果。我已从 MYSQL 中删除停用词并将最小字长设置为 3。 当我执行此查询时: SELECT `s
我刚刚在我的 MYSQL 数据库中发现了一堆流氓数据... 到达它的唯一方法是通过其中一列 - FILE_PATH,其中包含文件路径的斜杠剥离版本。我需要在这组文件中找到一些恶意文件——它们的文件名都
我正在为我的站点构建一个小的搜索功能。我正在接受用户的查询,提取关键字,然后针对提取的关键字运行全文 MySQL 搜索。 问题在于 MySQL 将词干视为文字。这是正在发生的过程: 用户搜索“棒球”之
这是一个关于使用(关系)数据库设计全文搜索的系统架构问题。我使用的具体软件是 Solr 和 PostgreSQL,仅供引用。 假设我们正在构建一个有两个用户 Andy 和 Betty 的论坛 -- P
当元素数组中的数组包含应与我的搜索匹配的文本时,我无法检索文档。 这里有两个示例文档: { _id: ..., 'foo': [ { 'name
我正在使用这个查询,但不幸的是它运行缓慢: SELECT *, (MATCH(`title`) AGAINST ('$word' IN BOOLEAN MODE) * 2 + MATC
我正在构建一个非常简单的产品目录,它将在 mysql 表中存储产品,我想尽快搜索产品(并尽可能相关)。产品数据库将非常大(大约 500.000 个产品),这就是为什么使用“like”而不使用索引的搜索
select count(distinct email_address) from users WHERE MATCH (email_address) AGAINST ('@r
我正在尝试在 mySQL 中进行简单的全文搜索,但在复数方面遇到一些问题。 我确实相信我符合50% 规则。 我不认为我使用了停用词。 我正在运行这样的查询: SELECT * FROM product
我在 innoDB 数据库中使用全文搜索时遇到了一个大问题。 首先,ns_pages 表有超过 2.6m 的记录,全文索引有 3 个键 block 。 该数据库在具有 128GB RAM 的 Dell
我有一个城市和州的数据库(大约 43,000 个)。我对其进行全文搜索,如下所示: select city, state, match(city, state_short, state) agains
我正在使用带有自然语言全文的 Mysql FULLTEXT 搜索,不幸的是,我遇到了 FULLTEXT 50% 阈值,如果给定的关键字出现在总行数的 50% 时间,则不允许我搜索行。 我搜索并找到了一
如果我搜索单词hello,那么我没有匹配到,而我搜索单词hella,那么我得到了匹配。同样的情况也发生在“Non”这个词上。我在 Mac 上的 MAMP 和 sqlfiddle.com 上进行了测试,
所以我有一个简单的场景。我有一张 field 表(事件 field 等)。我的查询看起来像: SELECT * FROM venues WHERE venues.name % 'Philips Are
我有一个表,其中有视频数据,如“标题”、“描述”等。我正在尝试使用 MySQL 全文索引编写一个搜索引擎。 SQL 查询适用于某些单词,但不是每个单词。这是我的 SQL 查询; SELECT * FR
我是一名优秀的程序员,十分优秀!