MySQL-MySQL 全文查找 MATCH AGAINST 模式怎样实现中文多词模糊查找?

发布于 2016-11-19 12:18:04 字数 0 浏览 1783 评论 5

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

甜柠檬 2017-06-03 02:10:49

对于mysql中文模糊查询有两种方法:
第一.增加字段属性binary();
第二.修改my.cfg启动参数为default-character-set = gbk(或者gb2312).
比如:
执行 select * from mytable where mysqlname like "%不%" 。
一个SELECT查询中的LIKE语句来执行这种查询,尽管这种方法可行,
但对于全文查找而言,这是一种效率极端低下的方法,尤其在处理大量数据的时候。

甜柠檬 2017-04-15 11:26:19

其实 和英文的全文搜索一样:

select * from tab where MATCH(keywords) AGAINST("中文1 中文2 中文3 中文4")
但是需要调整ft_min_word_len;

难点在于将中文分词,我以前使用过 SCWS 分词,效果不错。

在线演示地址:http://www.ftphp.com/scws/demo/v4.php

想挽留 2017-03-29 12:42:21

对于大的数据库,将数据装载到一个没有 FULLTEXT 索引的表中,然后再使用 ALTER TABLE (或 CREATE INDEX) 创建索引,这将是非常快的。将数据装载到一个已经有 FULLTEXT 索引的表中,将是非常慢的。
1.使用Mysql全文检索fulltext的先决条件
表的类型必须是MyISAM
建立全文检索的字段类型必须是char,varchar,text

2建立全文检索
在建表中用FullText关键字标识字段,已存在的表用 ALTER TABLE (或 CREATE INDEX) 创建索引
CREATE fulltext INDEX index_name ON table_name(colum_name);

3.使用全文检索
在SELECT的WHERE字句中用MATCH函数,索引的关键词用AGAINST标识,IN BOOLEAN MODE是只有含有关键字就行,不用在乎位置,是不是起启位置.
SELECT * FROM articles WHERE MATCH (tags) AGAINST ('旅游' IN BOOLEAN MODE);

想挽留 2017-03-01 02:51:12

由于Mysql的默认配置是索引的词的长度是4,所以需要修改MySQL的配置文件my.cnf
在 [mysqld] 位置内加入:
ft_min_word_len = 2
其它属性还有
ft_wordlist_charset = gbk
ft_wordlist_file = /home/mysql/wordlist-gbk.txt
ft_stopword_file = /home/mysql/stopwords-gbk.txt

对于这几个参数解释一下:

ft_wordlist_charset 表示词典的字符集, 目前支持良好的有(UTF-8, gbk, gb2312, big5)
ft_wordlist_file 是词表文件, 每行包括一个词及其词频(用若干制表符或空格分开,消岐专用)
ft_stopword_file 表示过滤掉不索引的词表, 一行一个.
ft_min_word_len 加入索引的词的最小长度, 缺省是 4, 为了支持中文单字故改为 2

晚风撩人 2017-01-14 15:44:04

在使用mysql进行中文模糊查找时需要注意一些方面:
(如select * from mytable where mysqlname like "%中文%"),就象我现在一样,找到不应找到的行!
有一些朋友提出了解决办法,大致有两种:
其一,加字段属性binary(),
其二,改my.cfg启动参数为default-character-set =gbk(或gb2312).
我从问题的根本原因分析,
其一,字母大小不区分问题(通过方法一可以解决)
其二,这是大多数人没有想到的,我以前也没有想到,
例:
汉字“不”的第1、2字节ascii值分别为:178与187
汉字“安”的第1、2字节ascii值分别为:176与178
汉字“花”的第1、2字节ascii值分别为:187与168
聪明的人已经看出来了:在字符串“安花”中模糊查找字符“不”字时,mysql系统也会认为两者区配!

另外:
my.ini 文件中加入 default-character-set =gb2312 ,字段不要加 Binary 属性 ,执行 select * from mytable where mysqlname like "%不%"

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文