MySQLテーブルにいくつかのアドレスが含まれています。次の2行があるとします。
"10 Fake Street"
"101 Fake Street"
MATCH()AGAINST()で全文検索を使用しようとしています。 ft_min_Word_lenを1に設定し、サーバーを再起動して削除し、実行してインデックスを再構築しました
ALTER TABLE addresses DROP INDEX address_index
CREATE FULLTEXT INDEX address_index ON addresses(street)
私のft_min_Word_lenが実際に1に設定されていることを確認しました
show global variables like 'ft_min_Word_len'
検索に3文字未満の単語を含めた場合、ワイルドスターを追加しない限り、結果は返されません。例えば
SELECT * FROM addresses WHERE MATCH(street) AGAINST('+101' IN BOOLEAN MODE)
または
SELECT * FROM addresses WHERE MATCH(street) AGAINST('+10*' IN BOOLEAN MODE)
どちらも「101 Fake Street」という1行を返します。ランニング
SELECT * FROM addresses WHERE MATCH(street) AGAINST('+10' IN BOOLEAN MODE)
0行を返します。どうして?オンラインで見つけることができる唯一の提案はすべて、最小長の設定に関するものですが、私のものは1に設定されていることをすでに確認し、インデックスを再構築しました。
ft_min_Word_len の設定はMyISAMにのみ影響します。
デフォルトは3なので、 innodb_ft_min_token_sizeを1 に設定する必要があります。
innodb_ft_min_token_sizeを1 に設定したら、戻って実行します
ALTER TABLE addresses DROP INDEX address_index
CREATE FULLTEXT INDEX address_index ON addresses(street);
試してみる !!!