2016-10-27 3 views
0

クレートテーブル興味深いのフルテキスト検索の動作

CREATE TABLE `Footable` (
    `id` int NOT NULL AUTO_INCREMENT, 
    `foo_colmn` varchar(255) NOT NULL, 
    FULLTEXT (foo_colmn), 
PRIMARY KEY (`id`)) ENGINE=MyISAM; 

INSERT INTO Footable (`foo_colmn`) VALUES ("against1111 , against"); 
INSERT INTO Footable (`foo_colmn`) VALUES ("against1111"); 
INSERT INTO Footable (`foo_colmn`) VALUES ("against"); 

いくつかの行を挿入し、BOOLEAN MODE

SELECT * FROM Footable WHERE MATCH 
    (foo_colmn) 
AGAINST 
    ('against1111' IN BOOLEAN MODE); 


------------------------- 
id |foo_colmn   | 
---|--------------------| 
1 |against1111 , against | 
2 |against1111   | 

うんthatsのprity正常だが、私が検索した場合に検索"に対して"

SELECT * FROM Footable 
    WHERE MATCH 
     (foo_colmn) 
    AGAINST 
     ('against' IN BOOLEAN MODE); 

--------------- 
id |foo_colmn | 
---|----------| 

何も返されません。私は何が起こっているのか理解できません。 (私の貧しい人の英語についてのソーリー)

答えて

0

ストップワード(と短い単語)について学ぶ必要があります。

ストップワードは、一般的または有用でないとみなされる単語で、インデックスから削除されます。 MySQLには標準的なリストが含まれています。 「反対」は典型的なストップワード(そして「is」、「the」、「a」、「それにもかかわらず」など)であろう。

あなたはそれらについて読むことができますhere

解決策は、ストップワードなしで(またはカスタムリストで)フルテキストインデックスを再構築することです。

編集。

InnoDBのストップワードは、MyISAMのストップワードとは異なる点があります。ですから、「反対」は1つのリストにしかないので、MyISAMを使っていると推測できます。

+0

あなたの答えをありがとう。話題から外れて、なぜストップワードリストがあるのですか?もし私がそれらのすべてを削除することができますか? @ kahredici。 –

+1

。 。私はあなたの質問に対する答えを知らない。ストップワードリストは、自動テキスト分析が始まって以来、周りにあります。逆インデックスのサイズを縮小するためのパフォーマンス向上のための遺産であると考えられます。 –

関連する問題