Mysql全文搜尋match against的用法

2021-07-10 04:16:28 字數 2344 閱讀 5499

全文檢索在 mysql 中就是乙個 fulltext 型別索引。fulltext 索引用於 myisam 表,可以在 create table 時或之後使用 alter table 或 create index 在 char、 varchar 或 text 列上建立對於大的資料庫,將資料裝載到乙個沒有 fulltext 索引的表中,然後再使用 alter table   (或 create index) 建立索引,這將是非常快的。將資料裝載到乙個已經有 fulltext 索引的表中,將是非常慢的。

1.使用mysql全文檢索fulltext的先決條件

表的型別必須是myisam

建立全文檢索的字段型別必須是char,varchar,text

2.建立全文檢索先期配置

由於mysql的預設配置是索引的詞的長度是4,所以要支援中文單字的話,首先更改這個.

*unix使用者要修改my.cnf,一般此檔案在/etc/my.cnf,如果沒有找到,先查詢一下find / -name 'my.cnf'

在 [mysqld] 位置內加入:  

ft_min_word_len     = 2

其它屬性還有

ft_wordlist_charset = gbk

ft_wordlist_file = /home/soft/mysql/share/mysql/wordlist-gbk.txt

ft_stopword_file = /home/soft/mysql/share/mysql/stopwords-gbk.txt

稍微解釋一下:

ft_wordlist_charset 表示詞典的字符集, 目前支援良好的有(utf-8, gbk, gb2312, big5)

ft_wordlist_file 是詞表檔案, 每行包括乙個詞及其詞頻(用若干製表符或空格分開,消岐專用)

ft_stopword_file 表示過濾掉不索引的詞表, 一行乙個.

ft_min_word_len     加入索引的詞的最小長度, 預設是 4, 為了支援中文單字故改為 2

3.建立全文檢索

在建表中用fulltext關鍵字標識字段,已存在的錶用 alter table (或 create index) 建立索引

create fulltext index index_name on table_name(colum_name);

4.使用全文檢索

select * from articles where match (tags) against ('旅遊' in boolean mode);

5.詳細的說明請引數mysql官方**

這是mysql 5.1的,不過4.x也可以做為參考,基本一置.我用的就是mysql 4.1.

mysql支援全文索引(full-text) 已經很久了,目前,fulltext是一種只適用於myisam表的乙個索引型別,而且對定義索引列的資料型別也有限制,只能是以下三種的組合char、 varchar、text。fulltext可以在建立表的同時就一起定義好,或者在表建立完成之後,通過語句alter table或create index來追加索引,總之先後的效果是一樣的,但是兩者的效率卻是存在很大差異的,大量的實驗證明,對於大數量的表來說,先載入資料再來定義全文索引的 速度要遠遠優於在乙個已經定義好全文索引的表裡面插入大量資料的速度。一定會問:這是問什麼呢?其實,道理很簡單,前者只需要一次性對你的索引列表進行操 作,排序比較都是在記憶體中完成,然後寫入硬碟;後者則要一條一條去硬碟中讀取索引表然後再進行比較最後寫入,自然這樣速度就會很慢。mysql是 通過match()和against()這兩個函式來實現它的全文索引查詢的功能。match()中的欄位名稱要和fulltext中定義的字段一致,如 果採用boolean模式搜尋,也允許只包括fulltext中的某個字段,不需要全部列出。against()中定義的是所要搜尋的字串以及要求資料 庫通過哪種模式去執行全文索引的搜尋查詢。下面通過乙個例子分別介紹一下fulltext所支援的3中搜尋模式。

mysql 全文檢索 中文分詞

支援中文的mysql 5.1+ 全文檢索分詞外掛程式

家用一下搜尋引擎就會發現,分詞的情況只是出現在當整詞命中為0的情況下。

而具體怎樣分詞,大家可以參考一下baidu搜尋試驗結果:

·如果搜「徐祖寧寧」,結果為「徐祖」+「寧寧」。(搜人名的情況下,它可能有乙個百家姓詞典,自動將姓後第乙個字歸前)

·搜「徐寧願」,結果為「徐寧願」。(說明「寧願」歸「徐」所有。同上。因為徐是姓。)

·搜「徐祖寧願」,結果為「徐祖」+「寧願」。(因為「寧願」是詞,故「徐」只帶「祖」。)

·搜「徐祖寧高」,結果為「徐祖寧」。(因為「寧高」不是關鍵字,所以「寧」歸前詞所有。而「高」可能因為是單字,為提高前詞搜尋效率故被省略。)

mysql中文全文搜尋

centos6 xampp1.7.7 mysql5.5 opt lampp bin mysql uroot ppassword mysql show variables like plugin dir 外掛程式路徑 opt lampp lib mysql plugin wget tar zxvf m...

mysql全文搜尋match against

1只能支援 英文搜尋 不能支援中文 中文請使用sphinx 斯芬克斯 coreseek 2 基本語法 select from article where match title,content against 查詢字串 3被搜尋的字段 必須為同一張表同時必須是fulltext 索引,除非 match...

MySQL的全文搜尋

mysql支援全文搜尋,主要是解決like查詢或其他多條件模糊查詢帶來的效能問題 以下文章內容主要介紹如何使用全文搜尋 另外本文主要介紹5.6及5.7 以上版本,過低版本在全文索引上與引擎 myisam innodb 有些區別就不做過多介紹了,現在應該大部分都是用5.6 版本了 介紹在mysql5....