MySQL全文索引(docker)

特點(diǎn)

  • Mysql 5.6之前版本,只有myisam支持全文索引乃秀,5.6之后肛著,Innodb和myisam均支持全文索引
  • ngram全文解析器,用來(lái)支持中文跺讯、日文、韓文分詞
  • 只有char殉农、varchar刀脏、text類型字段能創(chuàng)建全文索引
  • 英文分詞用空格,逗號(hào)超凳;中文分詞用 ngram_token_size 設(shè)定

創(chuàng)建全文索引

  • 創(chuàng)建表的時(shí)候創(chuàng)建

    CREATE TABLE articles (
        id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
        title VARCHAR (200),
        body TEXT,
        FULLTEXT (title, body) WITH PARSER ngram
    ) ENGINE = INNODB DEFAULT CHARSET=utf8mb4 COMMENT='文章表';
    
  • 創(chuàng)建表之后創(chuàng)建

    ALTER TABLE articles ADD FULLTEXT INDEX title_body_index (title,body) WITH PARSER ngram;
    

查詢

  • 不指定模式愈污,默認(rèn)使用自然語(yǔ)言模式

    SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('文言文');
    
  • 指定模式

    SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('文言文' IN NATURAL LANGUAGE MODE);
    SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('文言文' IN BOOLEAN MODE);
    

相關(guān)參數(shù)

innodb_ft_min_token_size

  • 默認(rèn)3,表示最小3個(gè)字符作為一個(gè)關(guān)鍵詞轮傍,增大該值可減少全文索引的大小

innodb_ft_max_token_size

  • 默認(rèn)84暂雹,表示最大84個(gè)字符作為一個(gè)關(guān)鍵詞,限制該值可減少全文索引的大小

ngram_token_size

  • 默認(rèn)2创夜,表示2個(gè)字符作為內(nèi)置分詞解析器的一個(gè)關(guān)鍵詞杭跪,如對(duì)“abcd”建立全文索引,關(guān)鍵詞為’ab’驰吓,‘bc’涧尿,‘cd’

  • 當(dāng)使用ngram分詞解析器時(shí),innodb_ft_min_token_size和innodb_ft_max_token_size無(wú)效

  • 如何設(shè)置

    在配置文件中修改檬贰,對(duì)于docker(本人安裝的是mysql:5.7.33)安裝的數(shù)據(jù)庫(kù)姑廉,需要進(jìn)入容器內(nèi),修改/etc/mysql/mysql.conf.d文件

    對(duì)于非docker安裝的數(shù)據(jù)庫(kù)翁涤,修改/etc/my.cnf桥言。這都是在默認(rèn)情況下的配置文件萌踱,具體到每個(gè)人,可能會(huì)不一樣

    [mysqld]
    ngram_token_size = 1
    innodb_ft_min_token_size = 1
    innodb_ft_max_token_size = 84
    

這三個(gè)參數(shù)均不可動(dòng)態(tài)修改号阿,修改了這些參數(shù)虫蝶,需重啟MySQL服務(wù),并重新建立全文索引>胛鳌能真!

問(wèn)題

查詢數(shù)據(jù)不完整?如數(shù)據(jù)中明明存在文言文, 但是查詢 文言的時(shí)候查詢不到

解決方案

  • 使用 boolean mode通配符模式。如有單詞calculate, 查詢匹配為select * from articles where match(title,body) AGAINST('cal*' in boolean mode);即可扰柠,如果用普通的自然語(yǔ)言模式+通配符則查詢不到
  • 調(diào)整 ngram_token_size的大小至合適的長(zhǎng)度

查詢模式

ngram Parser Term Search

  • 模式查詢
    • 在NATURAL LANGUAGE MODE檢索模式下粉铐,查詢關(guān)鍵字表達(dá)式被轉(zhuǎn)換為若干個(gè)ngram詞語(yǔ)的聯(lián)合
      • 字符串“管理開(kāi)發(fā)”(假設(shè)ngram_token_size=2)會(huì)被轉(zhuǎn)換為“管理 理開(kāi) 開(kāi)發(fā)”。給出多行記錄卤档,這多條記錄都匹配檢索詞語(yǔ)“管理 理開(kāi) 開(kāi)發(fā)”蝙泼,只要包含其中之一即可,匹配其一即可返回
    • 在BOOLEAN MODE檢索模式下劝枣,查詢關(guān)鍵字表達(dá)式被轉(zhuǎn)換為一個(gè)ngram短語(yǔ)檢索
      • 例如汤踏,字符串“項(xiàng)目中管理”(假設(shè)ngram_token_size=2)會(huì)被轉(zhuǎn)換為“項(xiàng)目 目中 中管 管理”。給出多行記錄舔腾,這多條記錄都匹配檢索詞語(yǔ)“項(xiàng)目 目中 中管 管理”溪胶。但是只有包含 “項(xiàng)目中管理” 的記錄行匹配檢索短語(yǔ) ‘“項(xiàng)目 目中 中管 管理”’,完全匹配才可返回

ngram Parser Wildcard Search

  • 通配符查詢
    • 如果查詢的通配符長(zhǎng)度小于ngram token size
      • 如果查詢的通配符長(zhǎng)度小于ngram token size, 查詢返回所有索引的行稳诚,這些行包含以前綴術(shù)語(yǔ)開(kāi)頭的ngram token
    • 如果查詢的通配符長(zhǎng)度大于ngram token size
      • 該前綴詞語(yǔ)會(huì)被轉(zhuǎn)換為一個(gè)ngram短語(yǔ)哗脖,與此同時(shí),通配符符號(hào)會(huì)被忽略扳还。例如才避,假設(shè)ngram_token_size=2,“管理開(kāi)發(fā) *”通配符檢索會(huì)被轉(zhuǎn)換為“管理 開(kāi)發(fā)”(“ngram Parser Term Search”的BOOLEAN MODE)

ngram Parser Phrase Search

  • 短語(yǔ)查詢
    • 例如氨距,檢索短語(yǔ)“abc”會(huì)被轉(zhuǎn)換為“ab bc”桑逝,包含“abc”和“ab bc”的記錄都會(huì)被返回。檢索短語(yǔ)“abc def”會(huì)被轉(zhuǎn)換為“ab bc de ef”俏让,包含“abcdef”的記錄不會(huì)被返回

參考:
https://blog.csdn.net/u013887008/article/details/106757993
https://zhuanlan.zhihu.com/p/88275060

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末楞遏,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子舆驶,更是在濱河造成了極大的恐慌橱健,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,978評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件沙廉,死亡現(xiàn)場(chǎng)離奇詭異拘荡,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)撬陵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門珊皿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)网缝,“玉大人,你說(shuō)我怎么就攤上這事蟋定》垭” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,623評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵驶兜,是天一觀的道長(zhǎng)扼仲。 經(jīng)常有香客問(wèn)我,道長(zhǎng)抄淑,這世上最難降的妖魔是什么屠凶? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,324評(píng)論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮肆资,結(jié)果婚禮上矗愧,老公的妹妹穿的比我還像新娘。我一直安慰自己郑原,他們只是感情好唉韭,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,390評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著犯犁,像睡著了一般属愤。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上栖秕,一...
    開(kāi)封第一講書(shū)人閱讀 49,741評(píng)論 1 289
  • 那天春塌,我揣著相機(jī)與錄音,去河邊找鬼簇捍。 笑死,一個(gè)胖子當(dāng)著我的面吹牛俏拱,可吹牛的內(nèi)容都是我干的暑塑。 我是一名探鬼主播,決...
    沈念sama閱讀 38,892評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼锅必,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼事格!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起搞隐,我...
    開(kāi)封第一講書(shū)人閱讀 37,655評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤驹愚,失蹤者是張志新(化名)和其女友劉穎愚战,沒(méi)想到半個(gè)月后型诚,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,104評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡们拙,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年癞季,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了劫瞳。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片倘潜。...
    茶點(diǎn)故事閱讀 38,569評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖志于,靈堂內(nèi)的尸體忽然破棺而出涮因,到底是詐尸還是另有隱情,我是刑警寧澤伺绽,帶...
    沈念sama閱讀 34,254評(píng)論 4 328
  • 正文 年R本政府宣布养泡,位于F島的核電站,受9級(jí)特大地震影響奈应,放射性物質(zhì)發(fā)生泄漏澜掩。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,834評(píng)論 3 312
  • 文/蒙蒙 一钥组、第九天 我趴在偏房一處隱蔽的房頂上張望输硝。 院中可真熱鬧,春花似錦程梦、人聲如沸点把。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,725評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)郎逃。三九已至,卻和暖如春挺份,著一層夾襖步出監(jiān)牢的瞬間褒翰,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,950評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工匀泊, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留优训,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,260評(píng)論 2 360
  • 正文 我出身青樓各聘,卻偏偏與公主長(zhǎng)得像揣非,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子躲因,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,446評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容