国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【MySQL】不允許你不會全文本搜索

這篇具有很好參考價值的文章主要介紹了【MySQL】不允許你不會全文本搜索。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

?? 博客主頁:博主鏈接
?? 本文由 M malloc 原創(chuàng),首發(fā)于 CSDN??
?? 學(xué)習(xí)專欄推薦:LeetCode刷題集
?? 歡迎點贊 ?? 收藏 ?留言 ?? 如有錯誤敬請指正!
?? 未來很長,值得我們?nèi)Ρ几案篮玫纳?

【MySQL】不允許你不會全文本搜索,數(shù)據(jù)庫sql_server,mysql,數(shù)據(jù)庫,sql
【MySQL】不允許你不會全文本搜索,數(shù)據(jù)庫sql_server,mysql,數(shù)據(jù)庫,sql

??MySQL的前情介紹

??大家好呀,今天是我第N次寫MySQL,也是最近才學(xué)習(xí)MySQL,也想著記錄一下自己的學(xué)習(xí)過程,并且分享給大家尼!

??本章詳情

??本篇文章將學(xué)習(xí)如何使用MySQL的全文本搜索功能進行高級的數(shù)據(jù)查詢和選擇。

??理解全文本搜索

前言

并非所有引擎都支持全文本搜索 MySQL支持幾種基本的數(shù)據(jù)庫引警。并非所有的引警都支持本文所描述的全文本搜索。兩個最常使用的引警為MyISAM和InnoDB前者支持全文本搜索,而后者不支持。這就是為什么雖然本書中創(chuàng)建的多數(shù)樣例表使用InnoDB,而有一個樣例表(productnotes表)卻使用MyISAM的原因。如果你的應(yīng)用中需要全文本搜索功能,應(yīng)該記住這一點。


  1. 前面的文章介紹了LIKE關(guān)鍵字,它利用通配操作符匹配文本(和部分文本)。使用LIKE,能夠查找包含特殊值或部分值的行(不管這些值位于列內(nèi)什么位置)。
  2. 用基于文本的搜索作為正則表達式匹配列值的更進-步的介紹。使用正則表達式,可以編寫查找所需行的非常復(fù)雜的匹配模

雖然這些搜索機制非常有用,但存在幾個重要的限制。

  1. 性能一一通配符和正則表達式匹配通常要求MySQL嘗試匹配表中所有行(而且這些搜索極少使用表索引)。因此,由于被搜索行數(shù)不斷增加,這些搜索可能非常耗時。
  2. 明確控制一一使用通配符和正則表達式匹配,很難(而且并不總是能)明確地控制匹配什么和不匹配什么。例如,指定一個詞必須匹配,一個詞必須不匹配,而一個詞僅在第一個詞確實匹配的情況下才可以匹配或者才可以不匹配。
  3. 智能化的結(jié)果一雖然基于通配符和正則表達式的搜索提供了非常靈活的搜索,但它們都不能提供一種智能化的選擇結(jié)果的方法例如,一個特殊詞的搜索將會返回包含該詞的所有行,而不區(qū)分包含單個匹配的行和包含多個匹配的行(按照可能是更好的匹配來排列它們)。類似,一個特殊詞的搜索將不會找出不包含該詞但包含其他相關(guān)詞的行。

所有這些限制以及更多的限制都可以用全文本搜索來解決。在使用全文本搜索時,MySQL不需要分別查看每個行,不需要分別分析和處理每個詞。MySQL創(chuàng)建指定列中各詞的一個索引,搜索可以針對這些詞進行。這樣,MySQL可以快速有效地決定哪些詞匹配(哪些行包含它們),哪些詞不匹配,它們匹配的頻率,等等。

??使用全文本搜索

??為了進行全文本搜索,必須索引被搜索的列,而且要隨著數(shù)據(jù)的改變不斷地重新索引。在對表列進行適當(dāng)設(shè)計后,MySQL會自動進行所有的索引和重新索引

在索引之后,SELECT可與Match()和Against()一起使用以實際執(zhí)行搜索。

??啟用全文本搜索支持

般在創(chuàng)建表時啟用全文本搜索。CREATE TABLE語接受FULLTEXT子句,它給出被索引列的一個逗號分隔的列表。

??下面的CREATE語演示了FULLTEXT子句的使用:

輸入

CREATE TABLE productnotes
(
node_id int NOT NULL AUTO_INCREMENT,
prod_id char(10) NOT NULL,
note_date datetime NOT NULL,
note_text text NULL,
PRIMARY KEY(note_text),
FULLTEXT(note_text)
)ENGINE=MyISAM;

分析

現(xiàn)在,只需知道這條CREATE TABLE語句定義表productnotes并列出它所包含的列即可。這些列中有一個名為note_text的列,為了進行全文本搜索,MySQL根據(jù)子句FULLTEXT(note_text)的指示對它進行索引。這里的FULLTEXT索引單個列,如果需要也可以指定多個列。

在定義之后,MySQL自動維護該索引。在增加、更新或刪除行時,索引隨之自動更新。

可以在創(chuàng)建表時指定FULLTEXT,或者在稍后指定(在這種情況下所有已有數(shù)據(jù)必須立即索引)。


不要在導(dǎo)入數(shù)據(jù)時使用FULLTEXT

更新索引要花時間,雖然不是很多,但畢竟要花時間。如果正在導(dǎo)入數(shù)據(jù)到一個新表,此時不應(yīng)該啟用FULLTEXT索引。應(yīng)該首先導(dǎo)入所有數(shù)據(jù),然后再修改表,定義FULLTEXT。這樣有助于更快地導(dǎo)入數(shù)據(jù)(而且使索引數(shù)據(jù)的總時間小于在導(dǎo)入每行時分別進行索引所需的總時間)

??進行全文本搜索

在索引之后,使用兩個函數(shù)Match()和Against()執(zhí)行全文本搜索其中Match()指定被搜索的列,Against()指定要使用的搜索表達式。

下面舉一個例子:

輸入

SELECT note_text FROM productnotes
	WHERE Match(note_text) Against('rabbit');

輸出
【MySQL】不允許你不會全文本搜索,數(shù)據(jù)庫sql_server,mysql,數(shù)據(jù)庫,sql
分析

此SELECT語句檢索單個列note_text。由于WHERE子句,一個全文本搜索被執(zhí)行。Match(note_ text)指示MySQL針對指定的列進行搜索,Against(‘rabbit’)指定詞rabbit作為搜索文本。由于有兩行包含詞rabbit,這兩個行被返回。


使用完整的Match()說明

傳遞給Match()的值必須與FULLTEXT()定義中的相同。如果指定多個列,則必須列出它們(而且次序正確).
搜索不區(qū)分大小寫
除非使用BINARY方式(本篇文章中暫時沒有介紹),否則全文本搜索不區(qū)分大小寫


事實是剛才的搜索可以簡單地用LIKE子句完成,如下所示:

輸入

SELECT note_text FROM productnotes
	WHERE note_text LIKE '%rabbit%';

輸出
【MySQL】不允許你不會全文本搜索,數(shù)據(jù)庫sql_server,mysql,數(shù)據(jù)庫,sql
分析

這條SELECT語句同樣檢索出兩行,但次序不同(雖然并不總是出現(xiàn)這種情況)。


上述兩條SELECT語都不包含ORDER BY子。后者(使用LIKE)以不特別有用的順序返回數(shù)據(jù)。前者(使用全文本搜索) 返回以文本匹配的良好程度排序的數(shù)據(jù)。兩個行都包含詞rabbit,但包含詞rabbit作為第3個詞的行的等級比作為第20個詞的行高。這很重要。全文本搜索的一個重要部分就是對結(jié)果排序。具有較高等級的行先返回(因為這些行很可能是你真正想要的行)。

??使用查詢擴展

提示

查詢擴展用來設(shè)法放寬所返回的全文本搜索結(jié)果的范圍??紤]下面的情況。你想找出所有提到anvils的注釋。只有一個注釋包含詞anvils,但你還想找出可能與你的搜索有關(guān)的所有其他行,即使它們不包含詞anvils

這也是查詢擴展的一項任務(wù)。在使用查詢擴展時,MySQL對數(shù)據(jù)和索引進行兩遍掃描來完成搜索:

  1. 首先,進行一個基本的全文本搜索,找出與搜索條件匹配的所有行;
  2. 其次,MySQL檢查這些匹配行并選擇所有有用的詞(我們將會簡要地解釋MySQL如何斷定什么有用,什么無用)。
  3. 再其次,MySQL再次進行全文本搜索,這次不僅使用原來的條件而且還使用所有有用的詞。

再其次,MySQL再次進行全文本搜索,這次不僅使用原來的條件而且還使用所有有用的詞。


下面舉一個例子,首先進行一個簡單的全文本搜索,沒有查詢擴展:

輸入

SELECT note_text FROM productnotes
	WHERE Match(note_text) Against('anvils');

輸出
【MySQL】不允許你不會全文本搜索,數(shù)據(jù)庫sql_server,mysql,數(shù)據(jù)庫,sql
分析

只有一行包含詞anvils,因此只返回一行

??布爾文本搜索

MySQL支持全文本搜索的另外一種形式,稱為布爾方式 (booleanmode)。以布爾方式,可以提供關(guān)于如下內(nèi)容的細節(jié):

  1. 要匹配的詞;
  2. 要排斥的詞(如果某行包含這個詞,則不返回該行,即使它包含其他指定的詞也是如此);
  3. 排列提示(指定某些詞比其他詞更重要,更重要的詞等級更高);
  4. 表達式分組;
  5. 另外一些內(nèi)容。

即使沒有FULLTEXT索引也可以使用

布爾方式不同于迄今為止使用的全文本搜索語法的地方在于,即使沒有定義FULLTEXT索引,也可以使用它。但這是一種非常緩慢的操作(其性能將隨著數(shù)據(jù)量的增加而降低).

為演示IN BOOLEAN MODE的作用,舉一個簡單的例子

輸入

SELECT note_text FROM productnotes 
	WHERE Match(note_text) Against('heavy' IN BOOLEAN MODE);

輸出
【MySQL】不允許你不會全文本搜索,數(shù)據(jù)庫sql_server,mysql,數(shù)據(jù)庫,sql

分析

??此全文本搜索檢索包含詞heavy的所有行(有兩行。其中使用了關(guān)鍵字IN BOOLEAN MODE,但實際上沒有指定布爾操作符因此,其結(jié)果與沒有指定布爾方式的結(jié)果相同。

??如何鞏固學(xué)習(xí)

提示:在學(xué)習(xí)的過程中,我們需要先自行進行思考,而不是一遇到不會的就放棄思考直接看答案,如果最后遇到真的不會的題目,我們可以適當(dāng)?shù)倪M行觀看答案,看自己的思路是否正確,在作出正確的判斷

??本文小結(jié)

本篇文章介紹了為什么要使用全文本搜索,以及如何使用MySQL的Match()和Against()函數(shù)進行全文本搜索。我們還學(xué)習(xí)了查詢擴展(它能增加找到相關(guān)匹配的機會)和如何使用布爾方式進行更細致的查找控制。

好啦今日的分享到這里就結(jié)束啦,我是愛你們的M malloc希望可以幫助到你們噢,最后別忘記三連啦?。?/p>

【MySQL】不允許你不會全文本搜索,數(shù)據(jù)庫sql_server,mysql,數(shù)據(jù)庫,sql

【MySQL】不允許你不會全文本搜索,數(shù)據(jù)庫sql_server,mysql,數(shù)據(jù)庫,sql文章來源地址http://www.zghlxwxcb.cn/news/detail-568290.html

到了這里,關(guān)于【MySQL】不允許你不會全文本搜索的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • sql_server數(shù)據(jù)庫入門學(xué)習(xí)(二)

    sql_server數(shù)據(jù)庫入門學(xué)習(xí)(二)

    ?? 博客主頁:博主鏈接 ?? 本文由 M malloc 原創(chuàng),首發(fā)于 CSDN?? ?? 學(xué)習(xí)專欄推薦:LeetCode刷題集! ?? 歡迎點贊 ?? 收藏 ?留言 ?? 如有錯誤敬請指正! ?? 未來很長,值得我們?nèi)Ρ几案篮玫纳? ------------------??分割線??------------------------- —————————

    2024年02月08日
    瀏覽(28)
  • 本地MySQL數(shù)據(jù)庫允許用任意ip連接訪問

    本地MySQL數(shù)據(jù)庫允許用任意ip連接訪問

    1、進入本地mysql,輸入下面命令,然后輸入密碼 mysql -uroot -proot 2、進入到mysql。然后選擇mysql這個數(shù)據(jù)庫 use mysql 3、 找到user這個表,然后查詢一下里面的user和host字段 ? select user,host from user; 看到里面有一個root的用戶對應(yīng)的host值是一個localhost或者是127.0.0.1。 接下來要把這個

    2023年04月08日
    瀏覽(26)
  • 【MySQL數(shù)據(jù)庫】看完還有誰學(xué)不會 MySQL 中的視圖?

    【MySQL數(shù)據(jù)庫】看完還有誰學(xué)不會 MySQL 中的視圖?

    在MySQL中,視圖是一種虛擬表,它是由一個或多個基本表的行或列組成的。視圖并不實際存儲數(shù)據(jù),而是根據(jù)定義的查詢語句動態(tài)生成結(jié)果集。視圖可以簡化復(fù)雜的查詢操作,提高查詢效率,同時也可以保護數(shù)據(jù)的安全性,隱藏敏感數(shù)據(jù)。 視圖是一種虛擬表,它是由一個或多

    2024年02月10日
    瀏覽(19)
  • 基于數(shù)據(jù)庫的全文檢索實現(xiàn)

    基于數(shù)據(jù)庫的全文檢索實現(xiàn)

    對于內(nèi)容摘要,信件內(nèi)容進行全文檢索 基于SpringBoot 2.5.6+Postgresql+jpa+hibernate實現(xiàn) 登記保存之后,處理完成業(yè)務(wù)邏輯,發(fā)送全文檢索事件 處理業(yè)務(wù)發(fā)送全文檢索事件 統(tǒng)一處理全文檢索事件 sql大致就是這樣的邏輯 事件處理機制請看另一篇文章 自定義事件處理機制

    2024年03月12日
    瀏覽(38)
  • 圖數(shù)據(jù)庫Neo4J 中文分詞查詢及全文檢索(建立全文索引)

    圖數(shù)據(jù)庫Neo4J 中文分詞查詢及全文檢索(建立全文索引)

    Neo4j的全文索引是基于Lucene實現(xiàn)的,但是Lucene默認(rèn)情況下只提供了基于英文的分詞器,下篇文章我們在討論中文分詞器(IK)的引用,本篇默認(rèn)基于英文分詞來做。我們前邊文章就舉例說明過,比如我要搜索蘋果公司?首先我們要做的第一步在各個詞條上創(chuàng)建全文索引,第二步

    2024年02月03日
    瀏覽(22)
  • 【MySQL】不允許你不會使用組合查詢

    【MySQL】不允許你不會使用組合查詢

    ?? 博客主頁:博主鏈接 ?? 本文由 M malloc 原創(chuàng),首發(fā)于 CSDN?? ?? 學(xué)習(xí)專欄推薦:LeetCode刷題集 ?? 歡迎點贊 ?? 收藏 ?留言 ?? 如有錯誤敬請指正! ?? 未來很長,值得我們?nèi)Ρ几案篮玫纳? ??大家好呀,今天是我第N次寫MySQL,也是最近才學(xué)習(xí)MySQL,也想著記錄一

    2024年02月15日
    瀏覽(22)
  • 【MySQL】不允許你不會使用子查詢

    【MySQL】不允許你不會使用子查詢

    ?? 博客主頁:博主鏈接 ?? 本文由 M malloc 原創(chuàng),首發(fā)于 CSDN?? ?? 學(xué)習(xí)專欄推薦:LeetCode刷題集! ?? 歡迎點贊 ?? 收藏 ?留言 ?? 如有錯誤敬請指正! ?? 未來很長,值得我們?nèi)Ρ几案篮玫纳? ??大家好呀,今天是我第N次寫MySQL,也是最近才學(xué)習(xí)MySQL,也想著記錄

    2024年02月12日
    瀏覽(22)
  • 【MySQL】不允許你不會創(chuàng)建高級聯(lián)結(jié)

    【MySQL】不允許你不會創(chuàng)建高級聯(lián)結(jié)

    ?? 博客主頁:博主鏈接 ?? 本文由 M malloc 原創(chuàng),首發(fā)于 CSDN?? ?? 學(xué)習(xí)專欄推薦:LeetCode刷題集! ?? 歡迎點贊 ?? 收藏 ?留言 ?? 如有錯誤敬請指正! ?? 未來很長,值得我們?nèi)Ρ几案篮玫纳? ??大家好呀,今天是我第N次寫MySQL,也是最近才學(xué)習(xí)MySQL,也想著記錄

    2024年02月13日
    瀏覽(20)
  • 為什么數(shù)據(jù)庫要允許沒有主鍵的表存在

    在數(shù)據(jù)庫設(shè)計中,主鍵是一個關(guān)鍵概念,用于唯一標(biāo)識數(shù)據(jù)庫表中的每一行數(shù)據(jù)。然而,有時候數(shù)據(jù)庫允許沒有主鍵的表存在的情況,這可能會引起一些爭議和疑問。本文將探討為什么數(shù)據(jù)庫允許沒有主鍵的表以及相關(guān)的考慮因素。 主鍵在數(shù)據(jù)庫中具有以下作用: 唯一標(biāo)識

    2024年02月08日
    瀏覽(32)
  • 【MySQL】不允許你不會SQL語句之DDL

    【MySQL】不允許你不會SQL語句之DDL

    目錄 前言: 一.DDL數(shù)據(jù)庫語句 1.1語句講解 1.2總結(jié) 二.DDL表語句 2.1語句講解 2.2總結(jié) 三.DDL字段語句 3.1語句講解 3.2總結(jié) 四.MySQL數(shù)據(jù)類型 五.結(jié)尾 ? 在從零到一入門MySQL一篇中,我們對數(shù)據(jù)庫已經(jīng)有了一定的了解,接下來讓我們學(xué)習(xí)SQL語句吧! ? 如果你對數(shù)據(jù)庫的創(chuàng)建,查找,

    2024年02月08日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包