Mysql
對小於 3 個字元的字元串進行 MySQL 全文搜尋不返回任何行
我有一個 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)
兩者都返回 1 行“101 Fake Street”。跑步
SELECT * FROM addresses WHERE MATCH(street) AGAINST('+10' IN BOOLEAN MODE)
返回 0 行。為什麼?我可以在網上找到的唯一建議都是關於設置最小長度,但我已經驗證我的設置為 1 並重建了索引。
設置ft_min_word_len只影響 MyISAM。
您需要將innodb_ft_min_token_size 設置為 1,因為預設值為 3。
將innodb_ft_min_token_size 設置為 1後,返回並執行
ALTER TABLE addresses DROP INDEX address_index CREATE FULLTEXT INDEX address_index ON addresses(street);
試一試 !!!