列で FULLTEXT インデックスを使用していますが、長さが 4 文字未満の検索語に対してブール モードで MATCH....AGAINST を使用すると、レコードが返されません。そして、LIKE を使用すると、レコードが返されます。何が問題なのですか?長さが 4 文字未満の単語にインデックスを付けないなどの MySQL の制限や、FULLTEXT インデックスに固有の制限のためですか?
ありがとう
列で FULLTEXT インデックスを使用していますが、長さが 4 文字未満の検索語に対してブール モードで MATCH....AGAINST を使用すると、レコードが返されません。そして、LIKE を使用すると、レコードが返されます。何が問題なのですか?長さが 4 文字未満の単語にインデックスを付けないなどの MySQL の制限や、FULLTEXT インデックスに固有の制限のためですか?
ありがとう
ft_min_word_len
システム変数を確認してください。これにより、索引付けされる単語の最小長が定義されます。
更新:わかりました、いくつかのテストを行いましたft_min_word_len=3
まずは試食台
CREATE TABLE `test`.`table1` (
`id` INT NOT NULL AUTO_INCREMENT ,
`name` TEXT NULL ,
PRIMARY KEY (`id`) ,
FULLTEXT INDEX `Name` (`name` ASC) )
ENGINE = MyISAM;
次のいくつかのテスト データ:
INSERT INTO `test`.`table1` (`id`, `name`) VALUES ('1', 'This has led in it');
INSERT INTO `test`.`table1` (`id`, `name`) VALUES ('2', 'Led is nice');
INSERT INTO `test`.`table1` (`id`, `name`) VALUES ('3', 'Leds are nicer');
INSERT INTO `test`.`table1` (`id`, `name`) VALUES ('4', 'Nothin here');
INSERT INTO `test`.`table1` (`id`, `name`) VALUES ('5', 'some word which does not exists: abcleddef');
これを実行する:
SELECT * FROM `test`.`table1` t1 WHERE match(`t1`.`name`) against ('led' in boolean mode)
これを返します:
1 This has led in it
2 Led is nice
これを実行する:
SELECT * FROM `test`.`table1` t1 WHERE match(`t1`.`name`) against ('led*' in boolean mode)
これを返します:
1 This has led in it
2 Led is nice
3 Leds are nicer
したがって、FT 検索は期待どおりに機能します。あなたが見つけようとしている単語が、実際にはのようなものleds
であり、単一の単語ではない可能性はありled
ますか?