多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > 數據庫 > 數據庫應用 > Mysql 全文本檢索

Mysql 全文本檢索

來源:程序員人生   發布時間:2015-01-27 13:47:14 閱讀次數:5191次

mysql 全文索引

注意 并不是所有的引擎都支持 全文檢索

mysql最經常使用的引擎 INnodb 和 myisam 后者支持全文檢索 前者不支持

創建表的時候指定要檢索列

CREATE TABLE TEST_FULLTEXT(note_id int not null auto_increment,note_text text null, primaty key(note_id),FULLTEXT(note_text) )engine=myisam;

fulltext 索引某個列 fulltext(note_text) ,在某note_text列上建立全文索引

插入數據

然后用 match()指定列 Against()指定詞
如 語句

select * from TEST_FULLTEXT where Match(note_text) Against('hello');

查找note_txt列中含有 hello詞的行 返回的結果為 兩行

note_text 'hello' was said by quester quster say 'hello' to pp and he try again

- 注意 搜索是不辨別大小的 除非使用 BINARY方式

既然這樣 為何 不用 like語句呢 再來看上面例子 用like實現
select * from TEST_FULLTEXT where note_text like '%hello%';

返回的結果1樣為兩行

note_text quster say 'hello' to pp and he try again 'hello' was said by quester
看采取全文搜索和like的返回結果 使用全文搜索的返回結果是已排好序的 而 like的返回結果則沒有 排序主要是針對 hello出現在行的位置 全文結果中 第1個詞 和 第3個詞 like則沒有按順序排

Mysql主要根據等級來進行排序

我們可以采取下面方式查看 表中某1列 在某1個詞的等級 ,繼續用上面的例子

select note_text, Match(note_text) Aginst('hello') as rannk from TEST_FULLTEXT

輸出以下:

note_text rank fhgjkhj 0 fdsf shi jian 0 quster say 'hello' to pp and he try again 1.3454876123454 huijia quba 0 'hello' was said by quester 1.5656454547876

等級的計算 由 mysql 由根據行中詞的數目、唯1詞的數目、全部索引中詞的總數和包括改詞行的數目計算出來 不包括詞的行的等級 為0 上面的結果中 詞在前面的等級值要高于在后面的

使用查詢擴大

當你想要在note_text 中查找 pp時 從上面知道 只有1行 如果用下面語句

select note_text from test_fulltext where match(note_text) against('pp');

返回結果是

note_text quster say 'hello' to pp and he try again

如果采取擴大查詢,分為以下3部

  • 1、先根據全文檢索 查找到 所有行 如上面的返回結果 只有1行
  • 2、mysql檢索上面1的所以行,選擇有用的詞
  • 3、mysql再次全文檢索,這1次還需要加上2當選擇出來的有用的詞 作為against中的詞
select note_text from test_fulltext where match(note_text) against('pp' with query expansion);

返回結果

note_text quster say 'hello' to pp and he try again 'hello' was said by quester

如pp本來有的行中含有 hello 所以hello也作為關鍵字

使用布爾查詢

即便沒有建立fulltext索引也能夠用,但是速度非常慢 沒有50%規則 (參見下 50%規則介紹) 可以用包括特定意義的操作符,如 +、-、"",作用于查詢字符串上。查詢結果不是以相干性排序的。

如語句

select note_text from test_fulltext where match(note_text) against('hello -pp*' IN BOOLEAN MODE );

表示匹配hello但是不包括 pp的行 結果為

note_text 'hello' was said by quester

全文檢索的1些說明 和限制

  • 1、只有MyISAM表支持
  • 2、對大多數的多字節字符集適用,進行全文索引的列必須使用相同的字符集和校驗碼(collation)。
  • 3、表意性語言,如漢語、日語沒有詞分界符(英語用空格隔開每一個單詞),全文分析器沒法肯定1個詞的開始和結尾,所以MySQL中的全文檢索不支持。
  • 4、在自然語言檢索中,只能檢索被全文索引的那些列,如果要對索引的多列進行某1列的檢索,必須對這1列單獨建立全文索引。布爾檢索可以在非索引的列上進行,但會慢1些。
  • 5、against后的參數必須是常量字符串。
  • 6、索引沒有記錄關鍵詞在字符串中的位置,排序算法太單1。
  • 7、如果索引不在內存中,檢索速度會很慢;如果是短語查詢,需要索引和數據都在內存中,否則速度會很慢,所以需要更大的key buffer。索引有碎片時也會很慢,所以需要更頻繁的optimize table操作。
  • 8、全文索引對insert、update、delete都很慢。如更改100個詞需要進行100次的索引操作而不是1次。

50% 規則

如果1個詞出現在50%以上的行中,那末mysql將他作為1個非用詞疏忽 50%規則不適用于布爾查詢 如果行數小于3行 則不返回結果 參考 50%規則

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 国内精品久久久久久网站 | 小说区图片区综合视频区 | 一区二区三区视频在线观看 | 欧美一级免费观看 | 欧美日韩在线看 | 欧美x性 | 久久久影院亚洲精品 | 手机在线完整视频免费观看 | 中文字幕乱码无线码在线 | 一二三四视频在线观看免费高清 | 真性中出| 午夜亚洲国产理论秋霞 | 欧美亚洲国产精品蜜芽 | 国产主播福利片在线观看 | 日韩欧美一区二区久久黑人 | 最近最全中文字幕 | 日韩欧美精品 | 武则天全黄肉体毛片免费看 | 国产福利精品在线观看 | 成人男女啪啪免费观看网站 | 亚洲十欧美十日韩十国产 | 香蕉久久ac一区二区三区 | 最近更新中文字幕7 | аbt天堂资源在线官网 | 老司机福利在线免费观看 | 一区二区三区四区 | 亚洲免费在线播放 | 69视频网| 私啪影院| 一级做a爱片性色毛片武则天五则 | 欧美精品aaa久久久影院 | 亚洲欧洲免费 | 国产日韩欧美精品一区二区三区 | 亚洲精品国产精品国自产 | 最近在线更新中文字幕3 | 激情校园春色小说 | 精品三级内地国产在线观看 | 久久网国产 | 九一精品国产 | 成人国产免费 | 欧洲vodafonewifi一区 |