1

列で FULLTEXT インデックスを使用していますが、長さが 4 文字未満の検索語に対してブール モードで MATCH....AGAINST を使用すると、レコードが返されません。そして、LIKE を使用すると、レコードが返されます。何が問題なのですか?長さが 4 文字未満の単語にインデックスを付けないなどの MySQL の制限や、FULLTEXT インデックスに固有の制限のためですか?

ありがとう

4

1 に答える 1

3

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ますか?

于 2011-03-21T06:10:41.460 に答える