做了一個小項目,需要一個檢索功能硝岗,考慮到項目的性質(zhì),不需要弄的太復(fù)雜袋毙,所以采用mysql全文索引來做型檀,本來以為設(shè)置個fulltext全文索引就完事兒了,沒想到坑是一個接一個听盖,把遇到的坑寫下來胀溺,做一個記錄
我的mysql版本:5.7.16 InnoDB; 注意:數(shù)據(jù)庫版本要大于等于MySQL5.7.6皆看,不然不支持InnoDB類型仓坞。
找到需要添加索引的字段,設(shè)置全文索引腰吟,結(jié)果啥也搜索不出來无埃。有一下原因
一:mysql分詞,默認(rèn)4字符的問題蝎困。
按照度娘的答案录语,在my.cnf文件中設(shè)置 ft_min_word_len=1,重啟完全沒有效果禾乘,倆個字的還是搜索不出來澎埠,原因是我的數(shù)據(jù)庫是InnoDB,這個類型要設(shè)置的是 innodb_ft_min_token_size = 1
二:設(shè)置好最小詞數(shù)后始藕,搜索倆個字有些能出來蒲稳,有些不能出來,比如:A:“朋友 敵人” B:"我有一個朋友和一個敵人" 當(dāng)搜索朋友的時候伍派,A記錄能出來 B記錄不能出來
原因是如果不手動配置的情況下 mysql是按照空格來分詞的江耀,但是中文的書寫規(guī)則大部分沒有空格,所以處理中文的時候 難以命中目標(biāo)诉植;好在mysql內(nèi)置了一個中文分詞器:ngram
在設(shè)置全文索引時注意添加分詞器祥国,如圖
然后重建索引,這樣就能夠進(jìn)行中文分詞了
具體請參照這位大大的文章
https://www.yiibai.com/mysql/ngram-full-text-parser.html