中文存入資料庫 MySQL 中文全文檢索(僅學習)

2021-10-25 13:05:50 字數 1748 閱讀 1702

php 中文分詞 splitword

scws 中文分詞

vicword乙個純php的分詞

在mysql 5.7.6之前,全文索引只支援英文全文索引,不支援中文全文索引,需要利用分詞器把中文段落預處理拆分成單詞,然後存入資料庫。

從mysql 5.7.6開始,mysql內建了ngram全文解析器,用來支援中文、日文、韓文分詞。

本文使用的mysql 版本是5.7.22,innodb資料庫引擎。ngram全文解析器

ngram就是一段文字裡面連續的n個字的序列。ngram全文解析器能夠對文字進行分詞,每個單詞是連續的n個字的序列。例如,用ngram全文解析器對「生日快樂」進行分詞:

n=1: '生', '日', '快', '樂' n=2: '生日', '日快', '快樂' n=3: '生日快', '日快樂' n=4: '生日快樂'

mysql 中使用全域性變數ngram_token_size來配置ngram中n的大小,它的取值範圍是1到10,預設值是2。通常ngram_token_size設定為要查詢的單詞的最小字數。如果需要搜尋單字,就要把ngram_token_size設定為1。在預設值是2的情況下,搜尋單字是得不到任何結果的。因為中文單詞最少是兩個漢字,推薦使用預設值2。

全域性變數ngram_token_size的兩種設定方法:

1、啟動mysqld命令時

mysqld --ngram_token_size=2

2、修改mysql配置檔案

[mysqld] ngram_token_size=2建立全文索引

1、建立表的同時建立全文索引

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;

2、通過 alter table 的方式來新增

alter table articles add fulltext index ft_index (title,body) with parser ngram;

3、直接通過create index的方式

create fulltext index ft_index on articles (title,body) with parser ngram;全文檢索模式

select * from articles where match (title,body) against ('一路 一帶' in natural language mode); // 不指定模式,預設使用自然語言模式 select * from articles where match (title,body) against ('一路 一帶');

示例上面的示例返回結果會自動按照相關性排序,相關性高的在前面。相關性的值是乙個非負浮點數,0表示無相關性。

// 獲取相關性的值 select id,title, match (title,body) against ('手機' in natural language mode) as score from articles order by score desc;

中文存入資料庫亂碼問題

今天存中文路徑名到mysql資料庫中,突然出現亂碼,即中文名全是 搜尋之後,簡單改了一下 就解決了,方法如下 在更新語句 sql update experiment set path path where experiment id experimentid 中新增乙個 n 即可。結果為 sql2 ...

中文存入資料庫 資料庫優化第一步 資料型別

資料庫優化第一步 資料型別 links.jianshu.com 為什麼選擇合適的資料型別很重要?因為資料型別會影響儲存空間的開銷,也會影響資料的查詢效率,可以說這是你優化資料庫的第一步要做的事情。代表的是字元,無論英文或中文 都可以儲存10個字元。數字5並不是代表儲存的長度,int型的長度是4位元組...

解決中文存到資料庫報錯問題

springframework.jdbc.uncategorizedsqlexception 1,建立資料庫時沒有指定編碼問題 先檢視資料庫的系統編碼 我的已經設定好了編碼,但是一旦重啟就又要重新設定編碼了 設定編碼命令如下 set character set client utf8 2,連線資料庫...