MySQL 全文搜索得不到所要的结果

Jacky.Wang 发布于 2016/06/14 16:43
阅读 501
收藏 1

MySQL版本:5.7.9
表结构:

CREATE TABLE `promotion` ( 
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `keyword` varchar(255) NOT NULL, 
    PRIMARY KEY (`id`),
    FULLTEXT KEY `building` (`keyword`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

在keyword字段中建立了一个全文索引,表中有大量数据。

用LIKE语句查询

SELECT id, keyword FROM `promotion` WHERE keyword LIKE '%保利国际广场%';

查询结果:
1 保利国际广场
2 保利国际广场论坛
3 北京保利国际广场
4 保利国际广场论坛
5 保利国际广场地址
6 ……

用全文搜索

SELECT id, keyword FROM `promotion` MATCH(keyword) AGAINST ('保利国际广场' IN BOOLEAN MODE)

查询结果:
1 保利国际广场

以上的查询有点像精确匹配了,凡是包含“保利国际广场”的词都没出来,在网上查询了一些资料以后修改成了以下的语句

SELECT id, keyword FROM promotion MATCH(keyword) AGAINST ('保利国际广场*' IN BOOLEAN MODE)

查询结果:
1 保利国际广场
2 保利国际广场论坛
3 保利国际广场论坛
4 保利国际广场地址
5 ……

这个结果有点像模糊匹配了,但是……“北京保利国际广场”这个词没有匹配到

请问,如何才能用全文搜索的方法获得像LIKE一样的结果呢?

谢谢大家

加载中
0
Elven_Xu
Elven_Xu
mysql编码看一下
0
paulversion
paulversion
mysql不支持中文的和中文混编的全文索引,用sphinx吧。
0
空无一长物
这里加*的意思是前缀必须是保利国际广场
0
空无一长物
试试+保利国际广场
0
Jacky.Wang
Jacky.Wang

引用来自“Elven_Xu”的评论

mysql编码看一下
utf8编码
0
Jacky.Wang
Jacky.Wang

引用来自“K袁”的评论

这里加*的意思是前缀必须是保利国际广场
那有什么方法可以匹配到其它位置,例如在结尾,在中间。谢谢
空无一长物
回复 @Jacky.Wang : http://dev.mysql.com/doc/refman/5.7/en/fulltext-search-ngram.html看下这个链接,你需要下载一个plugin
Jacky.Wang
Jacky.Wang
回复 @K袁 : 我是mysql 5.7.9,在配置文件中没有这个参数,手动添加好以后,重启MySQL,再删除索引重建,问题依然在,缺少“北京保利国际广场”
空无一长物
回复 @Jacky.Wang : 应该是中文的问题,将这个参数--innodb_ft_min_token_size设置为1,然后重新建索引
Jacky.Wang
Jacky.Wang
SELECT id, keyword FROM promotion MATCH(keyword) AGAINST ('+保利国际广场' IN BOOLEAN MODE) 搜索结果更少了
空无一长物
+保利国际广场,我上面说了
0
Jacky.Wang
Jacky.Wang

引用来自“paulversion”的评论

mysql不支持中文的和中文混编的全文索引,用sphinx吧。
MySQL 5.7.9已经支持中文的全文索引了,只是可能还支持的不够好。没用过sphinx,而且时间上也不允许
0
Jacky.Wang
Jacky.Wang

引用来自“K袁”的评论

试试+保利国际广场
加了“+”号,结果更少了
返回顶部
顶部