mysql ft_mysql全文索引____ft_min_word_len
對于剛使用mysql全文索引搜索的童鞋,第一個疑惑可能就是,為什么我搜索xx結果不顯示呢?明明我數據里面有。這個問題有很多種原因,其中最常見的就是ft_min_word_len(最小搜索長度)導致的。
準備測試數據如下CREATE?TABLE?mysql_fulltext
(id?BIGINT?UNSIGNED?AUTO_INCREMENT,
text_info?VARCHAR(1000)?NOT?NULL,
PRIMARY?KEY(id),
FULLTEXT(text_info)
)ENGINE=MYISAM?DEFAULT?CHARSET?utf8?COMMENT?'mysql全文索引測試表';
INSERT?INTO?`mysql_fulltext`(text_info)??VALUES?('a'),('b'),('c'),('aa'),('bb'),('cc'),('aaa'),('bbb'),('ccc'),('aaaa'),('bbbb'),('cccc');
使用如下語句進行搜索SELECT?*?FROM?`mysql_fulltext`?WHERE?MATCH(text_info)?AGAINST('a');
SELECT?*?FROM?`mysql_fulltext`?WHERE?MATCH(text_info)?AGAINST('aa');
SELECT?*?FROM?`mysql_fulltext`?WHERE?MATCH(text_info)?AGAINST('aaa');
按照我們的慣性思維,應該會顯示四條數據才對;但結果卻是一條數據都沒有。
但是我們執行SELECT?*?FROM?`mysql_fulltext`?WHERE?MATCH(text_info)?AGAINST('aaaa');
卻有結果如下:
我們看一下全文索引相關的參數設置。SHOW?GLOBAL?VARIABLES?LIKE?'%ft_%';
5.6之前myisam的全文索引,需要調節的參數相對來說比較少,只有以上五個。ft_boolean_syntax:全文索引分詞關鍵字,不能更改,為內置變量
ft_max_word_len:最大分詞長度,一般情況下不需要更改
ft_min_word_len:最小分詞長度,一般修改為1
ft_query_expansion_limit:不明覺厲的一個參數,基本上不需要設置
ft_stopword_file:全文停止詞
我們發現ft_min_word_len為4,默認是該值。也就是說,mysql fulltext只會對4個字或者4個字以上的關鍵字進行建立索引操作。而剛剛搜索的'a','aa','aaa'關鍵字長度都小于4。
全文索引相關的參數都無法進行動態修改,我們需要在/etc/my.cnf添加參數ft_min_word_len=1,并且重啟mysql服務器,重啟完畢之后,對應表執行repair操作。理論上,涉及到ft_相關參數修改的,都需要重啟服務器,并且修復所有含有fulltext索引的表。
使用如下sql語句尋找含有fulltext索引的表SELECT?DISTINCT?CONCAT('repair?table?',table_schema,'.',table_name,'?quick;')?FROM?information_schema.`STATISTICS`?WHERE?index_type='fulltext'
我們修復mysql_fulltext后,執行查詢語句REPAIR?TABLE?mysql_fulltext?QUICK;
SELECT?*?FROM?`mysql_fulltext`?WHERE?MATCH(text_info)?AGAINST('a');
以上查詢,能查詢到對應的數據。
但是疑問來了,為什么我查詢關鍵字'a',卻無法搜索出'aa','aaa','aaaa'關鍵字對應的行呢?
有興趣的童鞋可以自行思考一下,或者關注我后續的mysql全文索引相關文章。
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的mysql ft_mysql全文索引____ft_min_word_len的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 路由怎么定位到当前页面的组件_Angul
- 下一篇: aix如何安装mysql_AIX下安装M