使用索引是數(shù)據(jù)庫(kù)性能優(yōu)化的必備技能之一。在MySQL數(shù)據(jù)庫(kù)中,有四種索引:聚集索引(主鍵索引)、普通索引、唯一索引以及我們這里將要介紹的全文索引(FULLTEXT INDEX)。

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對(duì)這個(gè)行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡(jiǎn)單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:域名與空間、虛擬主機(jī)、營(yíng)銷軟件、網(wǎng)站建設(shè)、江陰網(wǎng)站維護(hù)、網(wǎng)站推廣。
全文索引(也稱全文檢索)是目前搜索引擎使用的一種關(guān)鍵技術(shù)。它能夠利用「分詞技術(shù)「等多種算法智能分析出文本文字中關(guān)鍵字詞的頻率及重要性,然后按照一定的算法規(guī)則智能地篩選出我們想要的搜索結(jié)果。在這里,我們就不追根究底其底層實(shí)現(xiàn)原理了,現(xiàn)在我們來看看在MySQL中如何創(chuàng)建并使用全文索引。
在MySQL中,創(chuàng)建全文索引相對(duì)比較簡(jiǎn)單。例如,我們有一個(gè)文章表(article),其中有主鍵ID(id)、文章標(biāo)題(title)、文章內(nèi)容(content)三個(gè)字段。現(xiàn)在我們希望能夠在title和content兩個(gè)列上創(chuàng)建全文索引,article表及全文索引的創(chuàng)建SQL語句如下:
--創(chuàng)建article表
CREATE TABLE article (
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
title VARCHAR(200),
content TEXT,
FULLTEXT (title, content) --在title和content列上創(chuàng)建全文索引
);
上面就是在創(chuàng)建表的同時(shí)建立全文索引的SQL示例。此外,如果我們想要給已經(jīng)存在的表的指定字段創(chuàng)建全文索引,同樣以article表為例,我們可以使用如下SQL語句進(jìn)行創(chuàng)建:
--給現(xiàn)有的article表的title和content字段創(chuàng)建全文索引
--索引名稱為fulltext_article
ALTER TABLE article
ADD FULLTEXT INDEX fulltext_article (title, content)
在MySQL中創(chuàng)建全文索引之后,現(xiàn)在就該了解如何使用了。眾所周知,在數(shù)據(jù)庫(kù)中進(jìn)行模糊查詢是使用LIKE關(guān)鍵字進(jìn)行查詢,例如:
SELECT * FROM article WHERE content LIKE '%查詢字符串%'
那么,我們使用全文索引也是這樣用的嗎?當(dāng)然不是,我們必須使用特有的語法才能使用全文索引進(jìn)行查詢。例如,我們想要在article表的title和content列中全文檢索指定的查詢字符串,可以如下編寫SQL語句:
SELECT * FROM article WHERE MATCH(title, content) AGAINST('查詢字符串')
強(qiáng)烈注意:MySQL自帶的全文索引只能用于數(shù)據(jù)庫(kù)引擎為MyISAM的數(shù)據(jù)表,如果是其他數(shù)據(jù)引擎,則全文索引不會(huì)生效。此外,MySQL自帶的全文索引只能對(duì)英文進(jìn)行全文檢索,目前無法對(duì)中文進(jìn)行全文檢索。如果需要對(duì)包含中文在內(nèi)的文本數(shù)據(jù)進(jìn)行全文檢索,我們需要采用Sphinx(斯芬克斯)/Coreseek技術(shù)來處理中文。本站將會(huì)在后續(xù)文章中對(duì)Sphinx以及Coreseek進(jìn)行介紹。
備注1:目前,使用MySQL自帶的全文索引時(shí),如果查詢字符串的長(zhǎng)度過短將無法得到期望的搜索結(jié)果。MySQL全文索引所能找到的詞的默認(rèn)最小長(zhǎng)度為4個(gè)字符。另外,如果查詢的字符串包含停止詞,那么該停止詞將會(huì)被忽略。
備注2:如果可能,請(qǐng)盡量先創(chuàng)建表并插入所有數(shù)據(jù)后再創(chuàng)建全文索引,而不要在創(chuàng)建表時(shí)就直接創(chuàng)建全文索引,因?yàn)榍罢弑群笳叩娜乃饕室摺?/p>
你有沒有想過如何使用搜索功能在所有整站中實(shí)現(xiàn)!互聯(lián)網(wǎng)博客和網(wǎng)站,大多數(shù)都采用MySQL數(shù)據(jù)庫(kù)。MySQL提供了一個(gè)美妙的方式實(shí)施一個(gè)小的搜索引擎,在您的網(wǎng)站(全文檢索)。所有您需要做的是擁有的MySQL 4.x及以上。MySQL提供全文檢索功能,我們可以用它來 ??實(shí)現(xiàn)搜索功能。
首先,讓我們?yōu)槲覀兊睦又性O(shè)置一個(gè)示例表。我們將創(chuàng)建一個(gè)名為第一個(gè)表。
CREATE TABLE articles (
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
title VARCHAR(200),
body TEXT,
FULLTEXT (title,body)
);
在此表中還可以添加一些示例數(shù)據(jù)。執(zhí)行后,插入查詢。
INSERT INTO articles (title,body) VALUES
('MySQL Tutorial','DBMS stands for DataBase ...'),
('How To Use MySQL Well','After you went through a ...'),
('Optimizing MySQL','In this tutorial we will show ...'),
('1001 MySQL Tricks','1. Never run mysqld as root. 2. ...'),
('MySQL vs. YourSQL','In the following database comparison ...'),
('MySQL Security','When configured properly, MySQL ...');
一旦樣本數(shù)據(jù)是準(zhǔn)備好,我們可以開始我們的全文檢索功能。
自然語言全文搜索
嘗試我們的示例表上執(zhí)行下面的SELECT查詢。
SELECT * FROM articles
WHERE MATCH (title,body) AGAINST ('database');
你就能看到結(jié)果如下:
在下面的數(shù)據(jù)庫(kù)比較5 MySQL與YourSQL的...
MySQL教程DBMS 1代表數(shù)據(jù)庫(kù)...
我們?cè)谏厦娴腟QL查詢(標(biāo)題,正文)反對(duì)(“數(shù)據(jù)庫(kù)”)的比賽,選擇所有的記錄,列標(biāo)題和正文進(jìn)行全文搜索。
您可以修改該查詢,并創(chuàng)建您自己的版本,以自己的數(shù)據(jù)庫(kù)中執(zhí)行全文搜索。
布爾全文搜索
它可能發(fā)生,你要指定某些關(guān)鍵字在您的搜索條件。此外,您可能要忽略某些關(guān)鍵字。布爾全文搜索可以用來執(zhí)行這些要求的全文檢索。
檢查下面的SELECT查詢。
SELECT * FROM articles WHERE MATCH (title,body)
AGAINST ('+MySQL -YourSQL' IN BOOLEAN MODE);
如果您發(fā)現(xiàn)上述選擇查詢,我們?cè)黾恿瞬紶朚ODE反對(duì)()。這個(gè)查詢將獲取MySQL的關(guān)鍵字,但不YourSQL關(guān)鍵字的所有記錄。請(qǐng)注意+和-我們以前指定的關(guān)鍵字!
在執(zhí)行此功能,MySQL使用什么有時(shí)也被稱為布爾邏輯作為暗示,其中:+代表與-代表不是[無操作員]暗示或
以下是幾個(gè)例子布爾搜索條件。
“蘋果香蕉
查找行至少包含兩個(gè)詞之一。
“+蘋果+果汁”
尋找包含兩個(gè)單詞的行。
“+蘋果Macintosh
查找行包含“蘋果”,但排名的行,如果它們也包含“麥金塔”。
“+蘋果Macintosh的”
查找行包含“蘋果”這個(gè)詞,而不是“麥金塔”。
'+蘋果Macintosh的“
查找包含單詞“蘋果”的行,但如果該行也包含單詞“麥金塔”,速度比如果行不低。這是“軟”比“+蘋果Macintosh電腦”,為“麥金塔”的存在,導(dǎo)致該行不能在所有返回的搜索。
'+蘋果+(營(yíng)業(yè)額餡餅)“
行包含“蘋果”和“營(yíng)業(yè)額”,或“蘋果”和“餡餅”(任何順序)的話,但排名“蘋果的營(yíng)業(yè)額”比“蘋果餡餅“。
限制
支持全文檢索的MyISAM表只。MySQL 4.1中,使用多個(gè)字符設(shè)置一個(gè)單一的表內(nèi)的支持。然而,在一個(gè)FULLTEXT索引的所有列,必須使用相同的字符集和校對(duì)規(guī)則。MATCH()列列表必須匹配完全在一些列清單表的FULLTEXT索引定義,除非這場(chǎng)比賽()是在布爾模式。布爾模式搜索,可以做非索引列,雖然他們很可能是緩慢的。
《深入NoSQL》(Shashank Tiwari)電子書網(wǎng)盤下載免費(fèi)在線閱讀
鏈接:
提取碼:imed ?
書名:深入NoSQL
作者:Shashank Tiwari
譯者:巨成
豆瓣評(píng)分:6.1
出版社:人民郵電出版社
出版年份:2012-11
頁(yè)數(shù):294
內(nèi)容簡(jiǎn)介:
《深入NoSQL》是一本全面的NoSQL實(shí)踐指南。書中主要關(guān)注NoSQL的基本概念,以及使用NoSQL數(shù)據(jù)庫(kù)的切實(shí)可行的解決方案。書中介紹了基于MapReduce的可伸縮處理,演示Hadoop用例,還有Hive和Pig這樣的高層抽象。包含許多用例演示,同時(shí)也會(huì)討論Google、Amazon、Facebook、Twitter和LinkedIn的可伸縮數(shù)據(jù)架構(gòu)。
作者簡(jiǎn)介:
Shashank Tiwari,創(chuàng)業(yè)者、開發(fā)者、技術(shù)作家、演講者和導(dǎo)師,技術(shù)型創(chuàng)業(yè)公司Treasury of Ideas()的創(chuàng)始人。
他是一位經(jīng)驗(yàn)豐富的軟件開發(fā)者和企業(yè)家,長(zhǎng)期關(guān)注高性能應(yīng)用、分析、Web應(yīng)用以及移動(dòng)平臺(tái),對(duì)數(shù)據(jù)可視化和統(tǒng)計(jì)機(jī)器學(xué)習(xí)有著濃厚的興趣,喜歡喝咖啡、吃甜點(diǎn)、騎自行車。他撰寫了許多技術(shù)文章和著作,并且應(yīng)邀在全球各地的技術(shù)會(huì)議上進(jìn)行演講。
新聞標(biāo)題:nosql精髓pdf,NoSQL的三大基石?
文章位置:http://chinadenli.net/article19/dseiegh.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站建設(shè)、企業(yè)建站、網(wǎng)頁(yè)設(shè)計(jì)公司、服務(wù)器托管、用戶體驗(yàn)、營(yíng)銷型網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)