萬盛學電腦網

 萬盛學電腦網 >> 數據庫 >> mysql教程 >> mysql全文搜索中文應用

mysql全文搜索中文應用

今天要介紹的就是mysql全文搜索的應用,全文檢索的表的存儲引擎類型必須為MyISAM,否則不能做全文搜索哦。

首先用下面表舉例:

 代碼如下 復制代碼


01.CREATE TABLE articles (02.id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,03.title VARCHAR(200),04.body TEXT,05.FULLTEXT (title,body)06.) ENGINE=MyISAM DEFAULT CHARSET=utf8;

MySQL使用Match()和Against()執行全文搜索,舉例如下:

 代碼如下 復制代碼

SELECT body FROM articles WHERE Match(body) Against('www.phpddt.com');

如上Match是正對指定的列進行搜索,Against('www.phpddt.com')是正對指定詞進行搜索

另外:

使用查詢擴展WITH QUERY EXPANSION,將會搜索出更多結果(mysql會將匹配的行中有用的詞再次進行搜索,這樣搜索出來的結果更多,但可能不是你想要的);

使用布爾文本搜索IN BOOLEAN MODE,類似我們平時使用搜索引擎時用到的的語法:邏輯與、邏輯或、邏輯非等.支持的布爾操作符如下:

全文布爾操作符:
--------------------------------------------------------------------------------------------------------------
|操作符                        |      說明                                                                                  |
--------------------------------------------------------------------------------------------------------------
|    +                       |包含,詞必須存在                                                                            
|     -                      |排除,詞必須不出現                                                                        
|     >                      |包含,而且增加等級值                                                                     
|     <                      |包含,且減少等級值                                                                         
|     ()                      |把詞組成子表達式(允許這些子表達式作為一個組被包含,排除,排列等)
|      ~                     |取消一個詞的排序值
|     *                       |詞尾的通配符
|     " "                     |定義一個短語(與單個詞的列表不一樣,它匹配整個短語以便包含或排除這個短語) 
----------------------------------------------------------------------------------------------------------------

使用方法如下:

 代碼如下 復制代碼

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的記錄。

linux中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 http://mysqlcft.googlecode.com/files/mysqlcft-1.0.0-x86_64-bin.tar.gz
# tar zxvf mysqlcft-1.0.0-x86_64-bin.tar.gz
# cp mysqlcft.so /opt/lampp/lib/mysql/plugin

# /opt/lampp/bin/mysql -uroot -ppassword
mysql> INSTALL PLUGIN mysqlcft SONAME 'mysqlcft.so';
mysql> SELECT * FROM mysql.plugin;
mysql> SHOW PLUGINS;


ALTER IGNORE TABLE articles ADD FULLTEXT INDEX cnFullIndex (title,body) WITH PARSER mysqlcft;

SELECT * FROM articles WHERE MATCH(title,body) AGAINST ('北京' IN BOOLEAN MODE

copyright © 萬盛學電腦網 all rights reserved