mysql百萬級全文索引及match快速查找

来源:https://www.cnblogs.com/firebirdweb/archive/2018/10/10/9767659.html
-Advertisement-
Play Games

mysql百萬級以上搜索 如果用LIKE %搜索詞%這種,肯定是非常慢的,換種方法,建立索引,如果用match() againtst()這種方法,那就非常快了! ...


建立全文索引的表的存儲引擎類型必須為MyISAM

問題是match   against對中文模糊搜索支持不是太好

新建一個utf8 MyISAM類型的表並建立一個全文索引  :

  1. CREATE TABLE articles (
  2.     id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
  3.     title VARCHAR(200),
  4.     body TEXT,
  5.     FULLTEXT (title,body)
  6. ) ENGINE=MyISAM  DEFAULT >

其中FULLTEXT(title, body) 給title和body這兩列建立全文索引,之後檢索的時候註意必須同時指定這兩列。

給這個表添加點測試數據

  1. INSERT INTO articles (title,body) VALUES
  2.     ('MySQL Tutorial','DBMS stands for DataBase ...'),
  3.     ('How To Use MySQL Well','After you went through a ...'),
  4.     ('Optimizing MySQL','In this tutorial we will show ...'),
  5.     ('1001 MySQL Tricks','1. Never run mysqld as root. 2. ...'),
  6.     ('MySQL vs. YourSQL','In the following database comparison ...'),
  7.     ('MySQL Security','When configured properly, MySQL ...');

3. 全文檢索測試

  1. SELECT * FROM articles   WHERE MATCH (title,body) AGAINST ('database'); 

註意 MATCH (title,body) 裡面的值必須是前面建立全文索引的兩個欄位不能少。

 

mysql 預設支持全文檢索的字元長度是4,可以用SHOW VARIABLES LIKE 'ft_min_word_len' 來查看指定的字元長度,也可以在mysql配置文件my.ini 更改最小字元長度,方法是在my.ini 增加一行 比如:ft_min_word_len = 2,改完後重啟mysql即可。  

另外,MySQL還會計算一個詞的權值,以決定是否出現在結果集中,具體如下:

mysql在集和查詢中的對每個合適的詞都會先計算它們的權重,一個出現在多個文檔中的詞將有較低的權重(可能甚至有一個零權重),因為在這個特定的集中,它有較低的語義值。否則,如果詞是較少的,它將得到一個較高的權重,mysql預設的閥值是50%,上面‘you’在每個文檔都出現,因此是100%,只有低於50%的才會出現在結果集中。

全文檢索語法

SELECT * FROM articles WHERE MATCH (title,body)     AGAINST ('+apple -banana' IN BOOLEAN MODE);   + 表示AND,即必須包含。- 表示NOT,即不包含。

SELECT * FROM articles WHERE MATCH (title,body)     AGAINST ('apple banana' IN BOOLEAN MODE);   apple和banana之間是空格,空格表示OR,即至少包含apple、banana中的一個。

SELECT * FROM articles WHERE MATCH (title,body)     AGAINST ('+apple banana' IN BOOLEAN MODE);   必須包含apple,但是如果同時也包含banana則會獲得更高的權重。

SELECT * FROM articles WHERE MATCH (title,body)     AGAINST ('+apple ~banana' IN BOOLEAN MODE);   ~ 是我們熟悉的異或運算符。返回的記錄必須包含apple,但是如果同時也包含banana會降低權重。但是它沒有 +apple -banana 嚴格,因為後者如果包含banana壓根就不返回。

SELECT * FROM articles WHERE MATCH (title,body)     AGAINST ('+apple +(>banana <orange)' IN BOOLEAN MODE);   返回同時包含apple和banana或者同時包含apple和orange的記錄。但是同時包含apple和banana的記錄的權重高於同時包含apple和orange的記錄

最後如果要模糊搜索只要在在搜索的詞後面加上*號就可以,如

"SELECT * FROM table_name WHERE MATCH(column) AGAINST('search*' IN BOOLEAN MODE)"

經測試,非常快速!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 有些用戶在把Win7/Win8.1升級到Win10正式版後,發現屏幕一直不停閃爍,以至於無法正常使用。出現這種情況的原因可能有很多,微軟社區的論壇審閱人Alex_Shen給出了一種解決方案:進入安全模式停止兩個服務。好系統官網將其提供的方法進行整理後供大家參考。 工具/原料 好系統重裝助手 具體操作 ...
  • 本文來自:https://www.breakyizhan.com/sql/5648.html1. 儲存與管理資料儲存與管理資料一直是資訊應用上最基本、也是最常見的技術。在還沒有使用電腦來管理你的資料時,你可能會使用這樣的方式來保存世界上所有的國家資料:這樣的作法在生活中是很常見的,例如親友的通訊錄,... ...
  • 看了網上好多種教程,自己嘗試失敗了好多次,最後總算弄好了,具體如下 zip下載地址:https://dev.mysql.com/downloads/mysql/ 之後點擊No thanks, just start my download. 下載之後解壓文件 然後配置環境變數,這樣可以直接在cmd中輸 ...
  • 第二篇這裡嘗試聊聊緩存的主從(Master-Slave),以及相關的高可用實現(High-Availability)(具體應用依然以Redis 舉例) 1.1 關於主從分離的取捨觀點 是否採用主從分離(這裡特指讀寫分離),個人目前的觀點是,它在很多場景里,並不是一個很好的方案。 我更想說的是,甚至任... ...
  • 一偽分佈模式 特點:在單機上,模擬一個分散式的環境,具備Hadoop的所有功能 HDFS:NameNode + DataNode + SecondaryNameNode Yarn:ResourceManager + NodeManager (*)hadoop-env.sh JAVA_HOME /ro ...
  • 背景 考慮以下場景: InfoTable(信息表): | Name | Gender | Age | Score | | | | | | | 張三 | 男 | 21 | 90 | | 李四 | 女 | 20 | 87 | | 王五 | 男 | 22 | 92 | | 趙六 | 女 | 19 | 94 ...
  • 前段時間維護的一個事業群的其中一條業務線的開發找到運維,提出來了一個MongoDB的優化問題,那段時間MongoDB正在從op管理移交給db進行維護,整個部門都對MongoDB的運維經驗缺乏,MongoDB的優化更是一個未知的挑戰。當op找到我,核心系統的公共服務平臺用來進行簡訊服務的MongoDB ...
  • 一. 完全備份恢復說明 xtrabackup二進位文件有一個xtrabackup --copy-back選項,它將備份複製到伺服器的datadir目錄下。下麵是通過 --target-dir 指定完全備份文件的目錄,還原到datadir目錄下。 可以使用xtrabackup --move-back選 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...