• <fieldset id="8imwq"><menu id="8imwq"></menu></fieldset>
  • <bdo id="8imwq"><input id="8imwq"></input></bdo>
    最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
    問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
    當前位置: 首頁 - 科技 - 知識百科 - 正文

    mysql模糊搜索的方法介紹

    來源:懂視網 責編:小采 時間:2020-11-09 21:11:17
    文檔

    mysql模糊搜索的方法介紹

    mysql模糊搜索的方法介紹:網上查了一下,有兩種方法,第一種最土的方法:使用like語句第二種聽濤哥說用全文索引,就在網上搜一下: 如何在MySQL中獲得更好的全文搜索結果 很多互聯網應用程序都提供了全文搜索功能,用戶可以使用一個詞或者詞語片斷作為查詢項目來定位匹配的記錄。在后
    推薦度:
    導讀mysql模糊搜索的方法介紹:網上查了一下,有兩種方法,第一種最土的方法:使用like語句第二種聽濤哥說用全文索引,就在網上搜一下: 如何在MySQL中獲得更好的全文搜索結果 很多互聯網應用程序都提供了全文搜索功能,用戶可以使用一個詞或者詞語片斷作為查詢項目來定位匹配的記錄。在后

    網上查了一下,有兩種方法,第一種最土的方法:使用like語句第二種聽濤哥說用全文索引,就在網上搜一下: 如何在MySQL中獲得更好的全文搜索結果

    很多互聯網應用程序都提供了全文搜索功能,用戶可以使用一個詞或者詞語片斷作為查詢項目來定位匹配的記錄。在后臺,這些程序使用在一個SELECT 查詢中的LIKE語句來執行這種查詢,盡管這種方法可行,但對于全文查找而言,這是一種效率極端低下的方法,尤其在處理大量數據的時候。

    mysql針對這一問題提供了一種基于內建的全文查找方式的解決方案。在此,開發者只需要簡單地標記出需要全文查找的字段,然后使用特殊的MySQL方法在那些字段運行搜索,這不僅僅提高了性能和效率(因為MySQL對這些字段做了索引來優化搜索),而且實現了更高質量的搜索,因為MySQL使用自然  語言來智能地對結果評級,以去掉不相關的項目。
    這篇文章將向您講述在MySQL中如何進行全文搜索。

    在進行數據庫查詢時,有完整查詢和模糊查詢之分。
    SELECT 字段 FROM 表 WHERE 某字段 Like 條件
    其中關于條件,SQL提供了四種匹配模式:
    1,%:表示任意0個或多個字符??善ヅ淙我忸愋秃烷L度的字符,有些情況下若是中文,請使用兩個百分號(%%)表示。
    比如 SELECT * FROM [user] WHERE u_name LIKE '%三%'
    將會把u_name為“張三”,“張貓三”、“三腳貓”,“唐三藏”等等有“三”的記錄全找出來。
    另外,如果需要找出u_name中既有“三”又有“貓”的記錄,請使用and條件
    SELECT * FROM [user] WHERE u_name LIKE '%三%' AND u_name LIKE '%貓%'
    若使用 SELECT * FROM [user] WHERE u_name LIKE '%三%貓%'
    雖然能搜索出“三腳貓”,但不能搜索出符合條件的“張貓三”。
    2,_: 表示任意單個字符。匹配單個任意字符,它常用來限制表達式的字符長度語句:
    比如 SELECT * FROM [user] WHERE u_name LIKE '_三_'
    只找出“唐三藏”這樣u_name為三個字且中間一個字是“三”的;
    再比如 SELECT * FROM [user] WHERE u_name LIKE '三__';
    只找出“三腳貓”這樣name為三個字且第一個字是“三”的;
    3,[ ]:表示括號內所列字符中的一個(類似正則表達式)。指定一個字符、字符串或范圍,要求所匹配對象為它們中的任一個。
    比如 SELECT * FROM [user] WHERE u_name LIKE '[張李王]三'
    將找出“張三”、“李三”、“王三”(而不是“張李王三”);
    如 [ ] 內有一系列字符(01234、abcde之類的)則可略寫為“0-4”、“a-e”
    SELECT * FROM [user] WHERE u_name LIKE '老[1-9]'
    將找出“老1”、“老2”、……、“老9”;
    4,[^ ] :表示不在括號所列之內的單個字符。其取值和 [] 相同,但它要求所匹配對象為指定字符以外的任一個字符。
    比如 SELECT * FROM [user] WHERE u_name LIKE '[^張李王]三'
    將找出不姓“張”、“李”、“王”的“趙三”、“孫三”等;
    SELECT * FROM [user] WHERE u_name LIKE '老[^1-4]';
    將排除“老1”到“老4”,尋找“老5”、“老6”、……
    5,查詢內容包含通配符時
    由于通配符的緣故,導致我們查詢特殊字符“%”、“_”、“[”的語句無法正常實現,而把特殊字符用“[ ]”括起便可正常查詢。據此我們寫出以下函數:
    function sqlencode(str)
    str=replace(str,"[","[[]") '此句一定要在最前
    str=replace(str,"_","[_]")
    str=replace(str,"%","[%]")
    sqlencode=str
    end function
    在查詢前將待查字符串先經該函數處理即可。

    1、設置基本表格
    從創建例子表格開始,使用以下的SQL命令:
    mysql> CREATE TABLE reviews (id INT(5) PRIMARY KEY NOT NULL AUTO_INCREMENT, data TEXT);
    以上命令創建了一個簡單的音樂專集資料庫(主要是整段的文字),然后向這個表格中添加一些記錄:
    mysql> INSERT INTO `reviews` (`id`, `data`) VALUES
    (1, 'Gingerboy has a new single out called Throwing Rocks. It\'s great!');
    mysql> INSERT INTO `reviews` (`id`, `data`) VALUES
    (2, 'Hello all, I really like the new Madonna single.
    One of the hottest tracks currently playing...I\'ve been listening to it all day');
    mysql> INSERT INTO `reviews` (`id`, `data`)
    VALUES (3, 'Have you heard the new band Hotter Than Hell?
    They have five members and they burn their instruments when they play in concerts.
    These guys totally rock! Like, awesome, dude!');
    驗證數據的正確錄入:
    mysql> SELECT * FROM reviews;
    +----+--------------------------------------------+
    id data
    +----+--------------------------------------------+
    1 Gingerboy has a new single out called ...

    2 Hello all, I really like the new Madon ...
    3 Have you heard the new band Hotter Than...
    +----+--------------------------------------------+
    3 rows in set (0.00 sec)
    2、定義全文搜索字段
    接下來,定義您要作為全文搜索索引的字段
    mysql> ALTER TABLE reviews ADD FULLTEXT INDEX (data);
    Query OK, 3 rows affected (0.21 sec)
    Records: 3 Duplicates: 0 Warnings: 0
    使用SHOW INDEXES命令來檢查索引已經被添加了:
    mysql> SHOW INDEXES FROM reviews;
    +---------+---------------+--------+------+------------+---------+
    Table Column_name Packed Null Index_type Comment
    ----------+---------------+--------+------+------------+---------+
    reviews id NULL BTREE
    reviews data NULL YES FULLTEXT
    +---------+---------------+--------+------+------------+---------+
    3、運行全文搜索
    當您擁有了數據和索引,就可以使用MySQL的全文搜索了,最簡單的全文搜索方式是帶有MATCH...AGAINST語句的SELECT查詢,以下是一個簡單的例子,可以來查找含有單詞“single”的記錄:
    mysql> SELECT id FROM reviews WHERE MATCH (data) AGAINST ('single');+----+
    id
    +----+
    1
    2
    +----+
    2 rows in set (0.00 sec)
    在此,MATCH()將作為參數傳遞給它的字段中的文字與傳遞給AGAINST()的參數進行比較,如果有匹配的,那就按照正常的方式返回。注意您可以傳遞不止一個字段用MATCH()來查看­-只需用逗號來分割字段列表。
    當MySQL收到了一個全文搜索的請求,它就在內部對每個記錄進行評分,不匹配的記錄得分為零,而“更相關”的記錄會得到比“不太相關”的記錄相對更高的分數。相關性是由MySQL的一系列區分標準來決定的,查看MySQL的用戶手冊可以得到更多的信息。
    想看到每個記錄的評分如何,只需要返回MATCH()方法作為結果集的一部分,如下所示:
    mysql> SELECT id, MATCH (data) AGAINST ('rock') FROM reviews;

    +----+-------------------------------+
    id MATCH (data) AGAINST ('rock')
    +----+-------------------------------+
    1 0
    2 0
    3 1.3862514533815
    +----+-------------------------------+
    3 rows in set (0.00 sec)
    4、使用邏輯搜索修飾符(Boolean search modifiers)
    您還可以使用邏輯搜索修飾符來進行更精確的搜索,這通過在AGAINST語句中添加特殊的IN BOOLEAN MODE修飾符來實現,在以下的例子中,將查找含有單詞“single”但是沒有“Madonna”的記錄:
    mysql> SELECT id FROM reviews WHERE MATCH (data) AGAINST ('+single -madonna' IN BOOLEAN MODE);
    +----+
    id
    +----+
    1
    +----+
    1 row in set (0.00 sec)
    這一搜索特性通常用于搜索單詞片斷(而不是完整的詞語),這可以通過在IN BOOLEAN MODE語句中的*(星號)操作符來實現,以下的例子展示了如何查找單詞中含有“hot”的記錄:
    mysql> SELECT id FROM reviews WHERE MATCH (data) AGAINST ('hot*' IN BOOLEAN MODE);+----+
    id
    +----+
    3
    2
    +----+
    2 rows in set (0.00 sec)
    您還可以使用這種方法來查找至少一個傳遞到AGAINST的參數中,以下的例子查找了至少包含單詞“hell”和“rocks”中的一個的記錄:
    mysql> SELECT id FROM reviews WHERE MATCH (data) AGAINST ('hell rocks' IN BOOLEAN MODE);
    +----+
    id
    +----+
    1
    3
    +----+
    3 rows in set (0.00 sec)
    以上的這些例子演示了相對于傳統的SELECT...LIKE語句,進行全文搜索的更有效的方法,當您下一次需要編寫MySQL數據庫搜索界面的時候,您可以嘗試這一方法。 最終發現使用不了,原因是只有MyISAM引擎才支持全文索引,暈。好吧,還是用like進行搜索。。

    您可能感興趣的文章:

  • Mysql全文搜索match against的用法
  • Mysql Binlog快速遍歷搜索記錄及binlog數據查看的方法
  • mysql全文搜索 sql命令的寫法
  • mysql 搜索之簡單應用
  • php利用scws實現mysql全文搜索功能的方法
  • php mysql like 實現多關鍵詞搜索的方法
  • 詳細介紹基于MySQL的搜索引擎MySQL-Fullltext
  • mysql 全文搜索 技巧
  • MySQL多層級結構-樹搜索介紹
  • 在MySQL中使用Sphinx實現多線程搜索的方法
  • mysql中使用sphinx搜索子域名需注意的問題
  • MySQL高效模糊搜索之內置函數locate instr position find_in_set使用詳解
  • 聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

    mysql模糊搜索的方法介紹

    mysql模糊搜索的方法介紹:網上查了一下,有兩種方法,第一種最土的方法:使用like語句第二種聽濤哥說用全文索引,就在網上搜一下: 如何在MySQL中獲得更好的全文搜索結果 很多互聯網應用程序都提供了全文搜索功能,用戶可以使用一個詞或者詞語片斷作為查詢項目來定位匹配的記錄。在后
    推薦度:
    標簽: 查詢 搜索 查找
    • 熱門焦點

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 亚洲av午夜国产精品无码中文字| 亚洲精品国产字幕久久不卡| 完整观看高清秒播国内外精品资源| 国产成人亚洲精品| 合区精品中文字幕| 国产精品秘入口福利姬网站| 国产精品无码a∨精品| 亚洲精品成人a在线观看| 91精品国产91热久久久久福利| 青青草原精品国产亚洲av| 国产精品v欧美精品v日本精 | 亚洲一区二区精品视频| 国产精品永久免费视频| 久久国产精品99久久久久久老狼| 国产美女精品一区二区三区| 日本VA欧美VA欧美VA精品| 在线亚洲精品福利网址导航| 日韩精品一区二区三区在线观看| 国产在线精品国自产拍影院| 99久久精品国产一区二区| 日本久久久精品中文字幕| 国产精品无码无在线观看| 久久香综合精品久久伊人| 无码国产精品一区二区免费vr| 最新国产在线精品观看| 亚洲精品456播放| 亚洲AV无码成人精品区大在线| 久久精品无码专区免费| 精品一区二区三区高清免费观看| 国产麻豆精品入口在线观看 | 97久久精品午夜一区二区| 久久精品中文无码资源站| 亚洲中文久久精品无码| 亚洲精品一级无码中文字幕| 四虎国产精品成人| 亚洲欧美日韩国产精品| 亚洲欧美日韩国产一区二区三区精品 | 精品无人区麻豆乱码1区2区| 久久er热视频在这里精品| 久久免费国产精品一区二区| 久久精品国产一区二区三区日韩|