MySQL - проблема с поиском FULLTEXT с определенным значением поиска "курс"

Я создал таблицу ниже.

CREATE TABLE `test` (
`name` VARCHAR(50) NOT NULL,
`id` INT(10) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`),
FULLTEXT INDEX `name` (`name`)
)
COLLATE='utf8_general_ci'
ENGINE=MyISAM;

со следующими данными

insert into test (name) values('apple');
insert into test (name) values('course');

и я ищу следующие запросы.

select * from test where MATCH (name) AGAINST ('apple' IN BOOLEAN MODE);
select * from test where MATCH (name) AGAINST ('course' IN BOOLEAN MODE);

Теперь проблема в том, что первый запрос выбора возвращает правильную строку. Но второй запрос не возвращает никаких строк. Я тестировал другие слова, и они отлично работают. Но если данные имеют слово "курс", и когда мы ищем "курс", он не возвращает никаких строк.

Может кто-нибудь помочь мне с этой странной проблемой?

2 ответа

Не лучше ли использовать оператор like?

select * from test where name LIKE 'course';

Или даже REGEXP

select * from test where name RegexP 'course';

Вы можете попробовать:

select * from test where MATCH (name) AGAINST ('course*' IN BOOLEAN MODE);

Обычно это происходит в частичном поиске слов, хотя.... Таким образом, просьбы показывают нам некоторые данные примера из вашей таблицы.

Бинго: Кажется, MYSQL полон остановить слова.

Итак, вот что говорит и что вам нужно делать:)

"Начиная с MySQL 5.5.6 файл остановки загружается и просматривается с использованием latin1, если character_set_server является ucs2, utf16 или utf32. Если какая-либо таблица была создана с индексами FULLTEXT, тогда как набор символов сервера был ucs2, utf16 или utf32, он должен быть восстановлен с использованием этого утверждения.

REPAIR TABLE tbl_name QUICK; "


Добавьте "В РЕЖИМЕ BOOLEAN" в свой запрос AGAINST КАК ПРОТИВ ( "курс *" В РЕЖИМЕ BOOLEAN) Это отлично работает

licensed under cc by-sa 3.0 with attribution.