今天要介紹的就是mysql全文搜索的應(yīng)用,全文檢索的表的存儲引擎類型必須為MyISAM,否則不能做全文搜索.
首先用下面表舉例,代碼如下:
- 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()執(zhí)行全文搜索,舉例如下:
SELECT body FROM articles WHERE Match(body) Against('m.survivalescaperooms.com');
如上Match是正對指定的列進(jìn)行搜索,Against('m.survivalescaperooms.com')是正對指定詞進(jìn)行搜索.
另外:使用查詢擴(kuò)展WITH QUERY EXPANSION,將會搜索出更多結(jié)果(mysql會將匹配的行中有用的詞再次進(jìn)行搜索,這樣搜索出來的結(jié)果更多,但可能不是你想要的);
使用布爾文本搜索IN BOOLEAN MODE,類似我們平時(shí)使用搜索引擎時(shí)用到的的語法,邏輯與、邏輯或、邏輯非等.支持的布爾操作符如下.
- 全文布爾操作符:
- --------------------------------------------------------------------------------------------------------------
- |操作符 | 說明 |
- --------------------------------------------------------------------------------------------------------------
- | + |包含,詞必須存在
- | - |排除,詞必須不出現(xiàn)
- | > |包含,而且增加等級值
- | < |包含,且減少等級值
- | () |把詞組成子表達(dá)式(允許這些子表達(dá)式作為一個(gè)組被包含,排除,排列等)
- | ~ |取消一個(gè)詞的排序值
- | * |詞尾的通配符
- | " " |定義一個(gè)短語(與單個(gè)詞的列表不一樣,它匹配整個(gè)短語以便包含或排除這個(gè)短語)
- ----------------------------------------------------------------------------------------------------------------
使用方法如下:
- 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中的一個(gè),代碼如下 :
- SELECT * FROM articles WHERE MATCH (title,body)
- AGAINST ('+apple banana' IN BOOLEAN MODE);
必須包含apple,但是如果同時(shí)也包含banana則會獲得更高的權(quán)重,代碼如下:
- SELECT * FROM articles WHERE MATCH (title,body)
- AGAINST ('+apple ~banana' IN BOOLEAN MODE);
~ 是我們熟悉的異或運(yùn)算符,返回的記錄必須包含apple,但是如果同時(shí)也包含banana會降低權(quán)重,但是它沒有 +apple -banana 嚴(yán)格,因?yàn)楹笳呷绻琤anana壓根就不返回,代碼如下:
- SELECT * FROM articles WHERE MATCH (title,body)
- AGAINST ('+apple +(>banana <orange)' IN BOOLEAN MODE);
返回同時(shí)包含apple和banana或者同時(shí)包含apple和orange的記錄,但是同時(shí)包含apple和banana的記錄的權(quán)重高于同時(shí)包含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
新聞熱點(diǎn)
疑難解答
圖片精選