mysql全文搜索中文应用
发布:smiling 来源: PHP粉丝网 添加日期:2014-10-09 10:40:09 浏览: 评论:0
今天要介绍的就是mysql全文搜索的应用,全文检索的表的存储引擎类型必须为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()执行全文搜索,举例如下:
SELECT body FROM articles WHERE Match(body) Against('www.phpfensi.com');
如上Match是正对指定的列进行搜索,Against('www.phpfensi.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
Tags: mysql全文搜索 mysql中文搜索
- 上一篇:mysql 日期比较函数
- 下一篇:解决mysql导入导出数据乱码办法
相关文章
- ·mysql中文全文搜索之学习笔记(2014-10-02)
- ·mysql全文搜索与中文全文搜索方法(2014-10-08)
- ·MySQL中全文搜索详解介绍(2014-10-10)
- ·Mysql match against 全文搜索的用法(2014-10-10)
- ·MySQL中获得更好的全文搜索结果(2014-10-13)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)