MySQL 全文搜索支持, mysql 5.6.4支持Innodb的全文检索和类memcache的nosql支持
背景:搞個個人博客的全文搜索得用like啥的,現在mysql版本號已經大于5.6.4了也就支持了innodb的全文搜索了,剛查了下目前版本號都到MySQL Community Server 5.6.19 了,所以,一些小的應用可以用它做全文搜索了,像sphinx和Lucene這樣偏重的、需要配置或開發的,節省了成本。
這兒有一個原創的Mysql全文搜索的文章, mysql的全文搜索功能:
http://blog.csdn.net/bravekingzhang/article/details/6727541
基于mysql全文索引的深入理解:
http://www.jb51.net/article/37738.htm
為什么要設置 Mysql 的 ft_min_word_len=1:
http://blog.csdn.net/shilian_h/article/details/6215537
MySQL 全文搜索支持簡述:
從MySQL 4.0以上 myisam引擎就支持了full text search 全文搜索,在一般的小網站或者blog上可以使用這個特性支持搜索。
那么怎么使用了,簡單看看:
1.創建一個表,指定支持fulltext的列
??CREATE TABLE articles (
????id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
????title VARCHAR(200),
????body TEXT,
????FULLTEXT (title,body)
??);
2.插入一些數據作為測試
??INSERT INTO articles (title,body) VALUES
????('MySQL Tutorial','DBMS stands for DataBase ...'),
????('How To Use MySQL Well','After you went through a ...'),
????('Optimizing MySQL','In this tutorial we will show ...'),
????('1001 MySQL Tricks','1. Never run mysqld as root. 2. ...'),
????('MySQL vs. YourSQL','In the following database comparison ...'),
????('MySQL Security','When configured properly, MySQL ...');
3.select查詢fulltext的列?
??SELECT * FROM articles
????WHERE MATCH (title,body) AGAINST ('database');
查詢結果:
??5????????MySQL vs. YourSQL????????In the following database comparison ...????
??1????????MySQL Tutorial?????????????? DBMS stands for DataBase ...???
全文查詢中的boolean語句, + -跟普通的搜索引擎語法一樣
??SELECT * FROM articles WHERE MATCH (title,body)
???? AGAINST ('+MySQL -YourSQL' IN BOOLEAN MODE);
innodb不支持fulltext,當然可以使用http://sphinxsearch.com/ sphinx來dump數據庫數據支持全文搜索。
原文地址:http://www.javaarch.net/jiagoushi/700.htm
后記,MySQL 5.6.4里才添加了InnoDB引擎的Full-Text索引支持,或用張宴兄弟的基于Sphinx+MySQL的千萬級數據全文檢索(搜索引擎)架構設計: http://blog.s135.com/post/360/
Q:
我想在查詢時使用MATCH(...) AGAINST(...)語法,但是我的數據表引擎是Innodb,當我CREATE FULLTEXT INDEX的時候,返回提示The used table type doesn't support FULLTEXT indexes。
我想問的是在innodb引擎中是否不能使用FULLTEXT引擎?有什么替代品嗎?可以使用MATCH(...) AGAINST(...)語法嗎?
A:
MySQL 5.6.4里才添加了InnoDB引擎的Full-Text索引支持。
不能升級MySQL版本的話:
推薦用Lucene(ElasticSearch比較容易部署)或Sphinx這樣的第三方解決方案。
innodb 不支持FULLTEXT類型的全文索引,但是innodb可以使用sphinx插件支持全文索引,并且效果更好。
sphinx 是一個開源軟件,提供多種語言的API接口,可以優化mysql的各種查詢。
如果這個表更新不頻繁,查詢量不大,又趕時間,可以用觸發器、定時任務或者其他類似的DBA技巧創建支持全文索引的鏡像表(如MyISAM類型的),代碼改動會小一些。
MySQL5.6 InnoDB FULLTEXTIndexes研究測試:
http://blog.csdn.net/zyz511919766/article/details/12780173
mysql 5.6.4支持nosql:
在最新的 mysql-5.6.4-labs-innodb-memcached 中,實現了簡單的給予 key/value的nosql功能,其主要原理
就是mysqld除了監聽3306端口之外,同時監聽11211端口。使mysqld和memcached服務處在同一進程中。通過
數據庫、表與字段的映射,將緩存在memcache的數據插入到映射的表中。安裝包中提供了三張表:containers
cache_policies和config_options,表containers就提供了映射關系,表cache_policies提供了三種存儲方式(
innodb_only數據只插入表,cache_only只緩存數據,caching即緩存數據又插入表),表config_options中提供
了一個默認分隔符“|”,就是說如果在表containers的values字段中定義了col1,col2...字段,那在設置緩存值時就
可以用val1|val2的形式,這樣將會把val1插入到col1,val2插入到col2。
來自:http://blog.csdn.net/sunny5211/article/details/7357893
這個不能算是全文搜索, 只是傳統的全表搜索。如果使用mysql的全文檢查,在200萬數據集上,不可能用那么長的時間的。
使用mysql全文檢索的方法如下:
1. 配置mysql參數ft_min_word_len=1
在數據表的文本字段中創建fulltext索引。
2.將原始文本進行分詞(處理成按空格分隔的字符串),可使用一些開源的分詞模塊實現。 再導入到mysql數據表中
3. 使用mysq select * from tb1 where title match'詞語' 進行檢索。
來自:http://www.oschina.net/question/123890_133459
作者:justwinit@向東博客 專注WEB應用 構架之美 --- 構架之美,在于盡態極妍 | 應用之美,在于藥到病除
地址:http://www.justwinit.cn/post/7253/
版權所有。轉載時必須以鏈接形式注明作者和原始出處及本聲明!
轉載于:https://www.cnblogs.com/Yongzhouunknown/p/4814853.html
總結
以上是生活随笔為你收集整理的MySQL 全文搜索支持, mysql 5.6.4支持Innodb的全文检索和类memcache的nosql支持的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: hightmaps 按地图上显示的统计数
- 下一篇: BZOJ 1270: [BeijingW