MySQL全文返回值NULL

时间:2018-12-13 04:54:03

标签: mysql full-text-search myisam full-text-indexing mysql-5.5

我的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&nbsp;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&nbsp;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&nbsp;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

但是它没有给我任何我要去哪里的地方怎么解决此问题?

2 个答案:

答案 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,其中使用了单词OlderOlder在50%的行中不存在,其长度为>= 4

答案 1 :(得分:0)

myisam引擎上的全文停用词似乎是一个问题,我将引擎更改为InnoDB,就可以得到结果。

请参阅此链接。 Full-Text Stopwords

要完全禁用停用词,请将此ft_stopword_file = ''添加到数据库配置文件中,修复表以重建索引, REPAIR TABLE tbl_name QUICK。并重新启动服务器