MATCH AGAINST 查询结果Empty set 空值

完整的一句中文可以匹配到,就如一个完整的单词可以匹配到一样。

但是,在一句完整的中文句子中就找不到词了。而英文句子有空格,这样就可以找到词。

经测试,果然是这样(在一句完整的中文句子中就找不到词了。而英文句子有空格,这样就可以找到词。)

http://xiaorui.cc/2016/02/03/浅谈mysql-fulltext全文索引的优缺点/ //看这篇文章-> 搜索中文的时候最好加上通配符*符号,不然是搜不到汉字.

但是,经我测试,SELECT * FROM fulltext_sample WHERE MATCH(copy) AGAINST('*银行转账免费啦*' in boolean mode); 还要加上这诘句:in boolean mode 才可以搜到结果。但是,我不断换中文句子去搜索测试,有好多时候都是搜不到中文的。如果要实现Full Text全文索引必须要分词,就像英文句子一样要有空格,或者标点符号隔开。

最后,我还是使用上like语句:

SELECT * FROM fulltext_sample WHERE copy like '%银行%' or '%上海%' order by copy desc; 再加上排序语句:order by copy desc; 有效且精准匹配出相关内容。

 

我不甘心啊,又查阅一番资料发现->http://zhangxz.blog.51cto.com/5490116/1603852

MySQL的FULLTEXT怎么断字: 
字母、数字、底线的组合视为一个字,不会把底线断字。 
会被断字的字符:空白、逗号(,)与点(.),但不用这些断字的语言,如中文,就得自行手动断字。 
可以自行实做一个断字的外挂来取代内建的断字parser。 
接受一个单引号,如aaa'bbb视为一个字,但是aaa''bbb就是两个字。 
前缀或字尾的单引号会被去掉,如'aaa或aaa'。 
全文搜寻时,stopword与少于四个字符的字符串会被忽略。 
可以覆写内建的stopword清单。 
可以修改最少四个字符的设定。 

通过MySQL全文搜索实现中文的相关搜索

http://www.21andy.com/new/20080123/779.html //推荐阅读,不过搞这么麻烦,我还不如用like算了。

 

这里要补充一下,关于like多条件查询:

SELECT * FROM fulltext_sample WHERE copy like '%银行2017%' or '%上海%' order by copy desc; //有些时候,只能查询出包含“银行2017”一词的内容,其后含有“上海”一词查询不出来。经过修改如下:

SELECT * FROM fulltext_sample WHERE copy like '%银行2017%' or copy like '%上海%' or copy like '%新年%' order by copy desc; 这样写就完美了!!

 

现在的时间是:23:18 2017-1-22,经测试发现,MATCH AGAINST 语句可以将查询出最相关的数据排在最前面,而like 加 order by语句就做不到这程度了。

posted @ 2017-01-22 13:10  stma  阅读(1252)  评论(0)    收藏  举报