程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MySQL全文索引運用簡明教程

MySQL全文索引運用簡明教程

編輯:MySQL綜合教程

MySQL全文索引運用簡明教程。本站提示廣大學習愛好者:(MySQL全文索引運用簡明教程)文章只能為提供參考,不一定能成為您想要的結果。以下是MySQL全文索引運用簡明教程正文


本文從以下幾個方面引見下MySQL全文索引的基本常識:
  1. MySQL全文索引的幾個留意事項
  2. 全文索引的語法
  3. 幾種搜刮類型的簡介
  4. 幾種搜刮類型的實例
  5. 全文索引的幾個留意事項
    • 搜刮必需在類型為fulltext的索引列上,match中指定的列必需在fulltext中指定過
    • 僅能運用在表引擎為MyIsam類型的表中(MySQL 5.6今後也能夠用在Innodb表引擎中了)
    • 僅能再char、varchar、text類型的列下面創立全文索引
    • 像通俗索引一樣,可以在界說表時指定,也能夠在創立表後添加或許修正
    • 關於一個年夜數目級記載拔出,向沒有索引的表中拔出數據後創立索引比向有索引的數據表中拔出的進程要快許多
    • 搜刮字符串必需是一個常量字符串,不克不及是表的列名
    • 在搜刮記載的選擇性跨越50%的時刻,以為沒有婚配(只在天然搜刮中限制)
    全文索引搜刮語法
    MATCH (列名1, 列名2,…) AGAINST (搜刮字符串 [搜刮潤飾符])

    個中在match外面指定的列名1、2等,就是在樹立全文索引中指定的列名, 前面的搜刮潤飾符解釋以下:

    search_modifier:
    
    {
    IN NATURAL LANGUAGE MODE
    | IN NATURAL LANGUAGE MODE WITH QUERY EXPANSION
    | IN BOOLEAN MODE
    | WITH QUERY EXPANSION
    }
    幾種搜刮類型的簡介

    下面的搜刮潤飾符,現實上解釋了3種全文搜刮類型

    IN NATURAL LANGUAGE MODE

    簡介:默許的搜刮情勢(不加任何搜刮潤飾符或許潤飾符為 IN NATURAL LANGUAGE MODE 的情形)

    特色:

    1. 關於搜刮字符串中的字符都解析為正常的字符,沒有特別意義
    2. 對屏障字符列表中的字符串停止過濾
    3. 當記載的選擇性跨越50%的時刻,平日被以為是不婚配。
    4. 前往記載依照記載的相干性停止排序顯示
    5. IN BOOLEAN MODE

      簡介:布爾形式搜刮(搜刮潤飾符為IN BOOLEAN MODE的情形)

      特色:

      1. 會依照必定的規矩解析搜刮字符串中的特別字符的寄義,停止一些邏輯意義的規矩。如:某個單詞必需湧現,或許不克不及湧現等。
      2. 這類類型的搜刮前往的記載是不依照相干性停止排序的
      3. WITH QUERY EXPANSION

        簡介:一種略微龐雜的搜刮情勢,現實上是停止了2次天然搜刮,可以前往記載直接簡介性關系的記載,潤飾詞IN NATURAL LANGUAGE MODE WITH QUERY EXPANSION 或許WITH QUERY EXPANSION modifier

        特色:這類類型的搜素,現實上供給了一種直接的搜刮功效,好比:我搜刮某個詞,並且前往的第一行中卻不包括搜刮詞中的隨意率性字符串。可以依據第一次搜刮成果的記載詞停止第二次婚配,從而能夠找到一些直接關系的婚配記載。

        幾種搜刮類型的實例引見

        IN NATURAL LANGUAGE MODE形式下的運用:

        照樣運用在product表,個中在name字段我們樹立了全文索引,由於我須要依據症結詞在name列婚配出相干記載

        Sql語句以下:

        SELECT * FROM product WHERE match(name) against(‘auto')

        時光還不錯,在快要87w的記載中射中了1w多條,耗時1.15秒,後果照樣不錯

        留意:在默許的情形下曾經是依據相干性從高到低前往記載了

        我們可以SELECT match(name) against(‘auto') FROM product 檢查記載的相干性值,值都在0和1之間, 0代表記載不婚配

         主要的幾個特征:

        1. 哪些詞會被疏忽

        搜刮詞太短 默許全文索引以為4個以上字符的單詞是有用詞,我們可以在設置裝備擺設中修正ft_min_word_len停止設置裝備擺設
        屏障詞表中的詞 默許的全文索引將一些經常使用詞屏障失落,由於這些詞太罕見了,沒有任何語義感化,所以搜刮進程中是疏忽不計的。固然這個列表也是可以設置裝備擺設的。
        2. 若何停止分詞的

        全文索引以為一個持續的有用字符(正則中\w婚配的字符集)是一個單詞,也能夠包括一個“'”, 然則持續的兩個'會被以為是一個分隔符。其他的分隔符如:空格、逗號、句點等

        IN BOOLEAN MODE 形式下的運用:

        在布爾婚配形式中,我們可以添加一些特別的符號,增長一些搜刮進程的邏輯功效。如官方網站中供給的實例(搜刮含有mysql字符串 且 不含Yousql的語句):

        SELECT * FROM articles WHERE MATCH (title,body)
        -> AGAINST (‘+MySQL -YourSQL' IN BOOLEAN MODE);

        可見,我們對搜刮的掌握又多了一些,看起來“嵬峨上”了些。

        現實上,下面的操作隱含了幾個意思:

        加號:相當於and
        減號:相當於not
        沒有:相當於or

        上面看下布爾類型搜刮的幾個主要特征:

        1. 沒有50%記載選擇性的限制,即便搜刮成果記載跨越總數的50%也異樣前往成果
        2. 不會主動的按記載的相干性停止降序排序
        3. 可以直策應用在沒有創立fulltext的全文索引上,然則如許會查詢的異常慢,所以說照樣別用了。
        4. 支撐最小、最年夜單詞長度
        5. 運用屏障詞列表

        布爾搜刮支撐的操作符:

        n 加號 +:指導潤飾的單詞必需湧現在記載中
        n 減號 -:指導潤飾的單詞必需不克不及湧現在記載中
        n 沒有任何操作符:單詞無關緊要,然則包括該詞的記載相干性高
        n 雙引號 “ : 將一個詞組作為一個婚配。如:”one word” 婚配one word在一路的單詞

        上面是官方的一些實例:

        至多包括一個詞的記載
        ‘apple banana'
         
        必需包括著兩個詞
        ‘+apple +juice'
         
        必需包括apple,包括macintosh的記載相干性高,也能夠不包括
        ‘+apple macintosh'
         
        必需包括apple且不克不及喊有macintosh
        ‘+apple -macintosh'
         
        查找apple開首單詞的記載
        ‘apple*'
         
        完全婚配some words單詞
        ‘”some words”‘

        懂得了根本的mysql全文索引常識,認為它的全文索引比like固然是強了許多。然則面臨高等的搜刮照樣略顯粗陋,且機能成績也是擔心。

        自己只是作為入門懂得,也是對官網一些根本常識的翻譯。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved