1

で検索しようとしていますがMATCH ... AGAINST、結果が得られません。とに設定ft_min_word_lenしました。2ft_stopword_file""

これは私のテーブルです:

CREATE TABLE `rw_jam_search` (
  `jam` int(10) unsigned NOT NULL,
  `name` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`jam`),
  KEY `name` (`name`),
  FULLTEXT KEY `name_ft` (`name`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8

テーブル内の私のデータ:

jam name
53  Say Yes
54  testing
55  poijoik
56  stdd
57  Spartaaa!
58  Fearless
59  Mr. Mysterious
60  testmys
61  hello worlds

このクエリで「SayYes」という行が見つからないのはなぜですか?を使用すれば動作しますLIKE js.name = 'say%'

SELECT *
FROM rw_jam_search js
WHERE MATCH(js.name) AGAINST ('say*' IN BOOLEAN MODE)
4

1 に答える 1

2

キャッシュされた単語の最小の長さはデフォルトでです3。これは構成ファイルで変更できます。

[mysqld]
ft_min_word_len=3

したがって、「say」という単語は全文検索では索引付けされません。mySQLのストレージファイルにアクセスできる場合は、次を使用できます。

myisam_ftdump rw_jam_search.MYI 0

全文検索に含まれるすべてのインデックス付き単語を一覧表示します。

したがって、このクエリを試してみると、問題なく機能しているはずです。

SELECT * FROM rw_jam_search
WHERE MATCH(`name`) AGAINST('worlds')

編集:アスタリスク(*)は、ドキュメントAGAINST()を確認して使用するとまったく異なります

于 2012-06-07T12:00:02.980 に答える