MySQL 全文搜索,如何才能连同中文标点一起搜?

2022-11-19 06:32:34 +08:00
 Jiangoogle
mysql5.7, Myisam

想模拟出和 like "%你好,我是%" 一样的效果

现在用的是 match () against('"你好,我是" in boolean mode)

同时把 ft_stopword_file 已经设成了 '',并已经重启服务,repair table xx quick 重建索引

但仍然一加标点就搜不到,请问如何解决?
2376 次点击
所在节点    MySQL
8 条回复
ajaxgoldfish
2022-11-19 08:08:41 +08:00
我猜,转译 ascll 码
ajaxgoldfish
2022-11-19 08:11:13 +08:00
百度上的 1 、查询带有中文标点符号,使用 COLLATE Chinese_PRC_CS_AS_WS ,注意在%%中间输入就要是中文符号。

select * from TASK where info COLLATE Chinese_PRC_CS_AS_WS like '%,%'
ajaxgoldfish
2022-11-19 08:12:12 +08:00
@ajaxgoldfish 大意了,没看题,各位请无视我
brader
2022-11-19 10:13:17 +08:00
刚测试了一下,是可以达到你这个效果的。你再试试。

CREATE TABLE posts (
id INT PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(255),
body TEXT,
FULLTEXT ( title , body ) WITH PARSER NGRAM
) ENGINE=INNODB CHARACTER SET UTF8MB4;

INSERT INTO posts(title,body)
VALUES('MySQL 全文搜索','MySQL 提供了具有许多好的功能的内置全文搜索'),
('MySQL 教程','学习 MySQL 快速,简单和有趣');

SELECT * FROM posts WHERE MATCH (title , body) AGAINST ("快速,简单" IN BOOLEAN MODE);
brader
2022-11-19 10:15:57 +08:00
注意使用 show variables like "%ft%" 和 show variables like "%ngram_token_size%",查看你设置的分词粒度
brader
2022-11-19 10:29:41 +08:00
对了,如果上面那个搜索语句找不到,而你仅仅需要查包含这样的简单场景,还是使用 SELECT * FROM posts WHERE MATCH (title , body) AGAINST ("速," IN natural language MODE); 会好点,分词粒度看你需要,可以设置为 2 ,甚至是 1
Jiangoogle
2022-11-19 19:30:24 +08:00
@brader 不行啊,可能是因为你用的是 InnoDB ?
我的环境是:mysql5.7.20 ,MyISAM ,
配置是:ft_stopword_file = '',ngram_token_size = 2

CREATE TABLE `tmp` (`book_name` char(32) NOT NULL, FULLTEXT KEY `book_name` (`book_name`) WITH PARSER `ngram`) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4;

insert into tmp values('你好,我的');

mysql> select book_name from tmp where match(book_name) against('"你好,"' in boolean mode) ;
+-----------------+
| book_name |
+-----------------+
| 你好,我的 |
+-----------------+
1 row in set (0.00 sec)

mysql> select book_name from tmp where match(book_name) against('"你好,我的"' in boolean mode);
Empty set (0.00 sec)

mysql> select book_name from tmp where match(book_name) against('"你好"' in boolean mode);
+-----------------+
| book_name |
+-----------------+
| 你好,我的 |
+-----------------+
1 row in set (0.00 sec)

就上边这三种情况,不知道为什么
Jiangoogle
2022-11-20 17:43:24 +08:00
继续求助

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/896345

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX