3

以下の表を作成しました。

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 番目のクエリは行を返しません。私は他の言葉でテストしましたが、うまくいきました。しかし、データに「コース」という単語が含まれている場合、「コース」を検索しても行が返されません。

誰かがこの奇妙な問題で私を助けることができますか?

4

2 に答える 2

1

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 の時点で、character_set_server が ucs2、utf16、または utf32 の場合、ストップワード ファイルは latin1 を使用してロードおよび検索されます。サーバーの文字セットが ucs2、utf16、または utf32 のときに FULLTEXT インデックスを使用してテーブルが作成された場合は、それを行う必要があります。このステートメントを使用して修復される..

REPAIR TABLE tbl_name QUICK;"

于 2013-01-04T10:09:26.243 に答える