我的mysql代码。
CREATE TABLE `videos` (
`id` int(50) NOT NULL,
`user_id` int(250) NOT NULL,
`title` varchar(250) NOT NULL,
`discription` text NOT NULL,
`video_path` varchar(250) NOT NULL,
`tumbnail_path` varchar(250) NOT NULL,
`paid` int(250) NOT NULL,
`date` date NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
INSERT INTO `videos` (`id`, `user_id`, `title`, `discription`, `video_path`, `tumbnail_path`, `paid`, `date`) VALUES
(1, 4, 'This is a new video', '<p>This is a new video from eduladder in at this video we are discribing how stuffs works</p>\r\n', 'uploadvid/xIdivzexFZXzr6bng2E9mU3PNvMVq0Iz.mp4', 'uploadthump/1AT1EsgJ--6iVLxEwEFRkWa9ADqqD1BG.jpg', 0, '2018-12-10'),
(2, 4, 'New Video for testig', '<p>This is a new video for testing purpose only</p>\r\n', 'uploadvid/_rsIHMc2giVoWV6aRixCoEUk0gKcDhDI.mp4', 'uploadthump/zA_t-2DMusUDvg9xVPwmRAn5-59He76-.jpg', 0, '2018-12-12'),
(3, 4, 'Some New Videos', '<p>This is a record of some new videos</p>\r\n', 'uploadvid/jPzlU3xSJaZVm7EzZu_JfaXq8kAK_1Vc.mp4', 'uploadthump/M_SZodSk20ba2FsXw3X1WVq7a48S_cj3.jpg', 0, '2018-12-13'),
(4, 4, 'Old video', '<p>This is an old video</p>\r\n', 'uploadvid/yaYiDBru2c7fCcosPmrj94JhZ5waxbu8.mp4', 'uploadthump/FhRXXen99DEa0d-8w5m2FDcvFyxlZgx4.png', 0, '2018-12-13'),
(5, 4, 'Almost new video and edited', '<p>This is about almost new video and editted version</p>\r\n', 'uploadvid/YOVPqiFO5xUnCtFAdYzgiY2wzsCnSQ11.mp4', 'uploadthump/MO1faxOKDNESee0gG5SQZYeantzlrPYM.png', 0, '2018-12-13');
ALTER TABLE `videos` ADD FULLTEXT(`title`,`discription`);
我要执行的查询在这里。
SELECT * ,
MATCH (title, discription) AGAINST ('New') AS score
FROM videos
WHERE MATCH (title, discription) AGAINST ('New')
ORDER BY score
DESC LIMIT 20
这是mysql小提琴https://www.db-fiddle.com/f/jUs9EABZjuBL956WtnTbqx/3
但是它没有给我任何我要去哪里的地方怎么解决此问题?
答案 0 :(得分:1)
由于您在注释中要求它与MySql 5.5一起使用,所以:
请查看所扩展的代码db-fiddle.com/f/jUs9EABZjuBL956WtnTbqx/3 innodb无法工作,它是myql版本<5.6
然后是2种不同的情况。对于MySql 5.7,停用词列表仅适用。
但是对于最新的MySql 5.5,这是两个原因:
第一个不起作用的原因是因为您要搜索的单词出现在总行数的50%或更多中,因此它被视为Common Word
,因此不会匹配。参见Mysql 5.5 FullText Search Docs:
全文搜索共有三种类型:
自然语言搜索将搜索字符串解释为 自然的人类语言(自由文本中的短语)。没有特别的 运算符,双引号(“)字符除外。 停用词列表适用。此外,单词占50%或 更多的行被认为是常见的并且不匹配。
第二个是因为默认情况下,全文搜索长度设置为4。因此,您需要在my.cnf
中进行更改并添加值:
[mysqld]
ft_min_word_len = 3
能够搜索3个字符的单词。
但是由于在db-fiddle中我无法修改长度,因此这里是modified working fiddle,其中使用了单词Older
。 Older
在50%的行中不存在,其长度为>= 4
。
答案 1 :(得分:0)
myisam引擎上的全文停用词似乎是一个问题,我将引擎更改为InnoDB,就可以得到结果。
请参阅此链接。 Full-Text Stopwords
要完全禁用停用词,请将此ft_stopword_file = ''
添加到数据库配置文件中,修复表以重建索引,
REPAIR TABLE tbl_name QUICK
。并重新启动服务器