Mysql полный текст returnig NULL - PullRequest
       48

Mysql полный текст returnig NULL

0 голосов
/ 13 декабря 2018

Мой код 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 голосов
/ 13 декабря 2018

Так как вы попросили, чтобы он работал с MySql 5.5 в вашем комментарии:

Плз, посмотрите обновленный код db-fiddle.com/f/jUs9EABZjuBL956WtnTbqx/3 innodb, это не моя версия <5.6 </p>

Тогда это 2 разных случая.Для MySql 5.7 применяется только список стоп-слов.

Но для MySql 5.5 из вашей последней скрипки здесь есть две причины:

Первая причина, по которой это не работает, заключается в том, что слово, которое вы ищетеприсутствует в 50% или более от общего числа строк, поэтому он считается Common Word и не будет совпадать в результате.См. Документацию Mysql 5.5 FullText Search :

Существует три типа полнотекстового поиска:

Поиск на естественном языке интерпретирует строку поиска как фразуна естественном человеческом языке (фраза в свободном тексте).Не существует специальных операторов, за исключением символов двойной кавычки ("). Применяется список стоп-слов. Кроме того, слова, присутствующие в 50% или более строк, считаются общими и не совпадают.

И второе - потому что по умолчанию длина полнотекстового поиска установлена ​​на 4. Поэтому вам нужно изменить ее в my.cnf и добавить значение:

[mysqld]
ft_min_word_len = 3

, чтобы иметь возможность искать 3символы слова.

Но так как в db-fiddle я не могу изменить длину, вот измененная рабочая скрипка , где используется слово Older. Older отсутствует на 50% строк и его длина >= 4.

0 голосов
/ 13 декабря 2018

Кажется, что проблема с полнотекстовыми стоп-словами на движке myisam, я изменил движок на InnoDB и могу получить результаты.

См. Эту ссылку. Полнотекстовые стоп-слова

Чтобы полностью отключить стоп-слова, добавьте ft_stopword_file = '' в файл конфигурации базы данных, восстановите таблицу для перестроения индексов, REPAIR TABLE tbl_name QUICK.и перезагрузите сервер

...