Mysql

對小於 3 個字元的字元串進行 MySQL 全文搜尋不返回任何行

  • September 8, 2014

我有一個 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);

試一試 !!!

引用自:https://dba.stackexchange.com/questions/76036