关于 MySQL 的全文查询,是不是没有高效的办法限定在一个结果集里搜全文?

2023-01-04 10:40:05 +08:00
 makelove

打算给 App 加个简单的搜索功能,不想搞得太复杂,所以就先试了下 MySQL 内置的全文, 比如我要限定在一个用户的文章里搜:

select * from article 
where
	user_id = ?
	match (title) against ('+???' in boolean mode)

这么干的话貌似会先用全文索引搜索全部用户的文章,然后按用户 ID 一行行过滤,我试了下性能似乎不太好,在千万非 SSD 表上要个 0.5 秒。

然后我看了下 MySQL 可以同时搜索二个关键词,那我建一列 meta ,放用户 ID,然后我同时搜索这个用户 ID 和关键词:

select * from article 
where match (meta, title) against ('+??? +USERID_???' in boolean mode)

发现性能几乎完全一致也要 0.5 秒。 但我单搜一个关键词就非常快 0.001 秒级别的。

select * from article 
where match (meta, title) against ('+???' in boolean mode)

所以 MySQL 的全文搜索就是只能搜索一个条件是非常快的,其它的条件都是在前一个搜索结果里过滤? 所以这是 MySQL 全文的限制还是别的全文方案也是只能搜索一个关键词才是快的?

所以你们实现搜索某用户的文章是用的什么办法?

1017 次点击
所在节点    MySQL
1 条回复
Huliya1993
2023-01-04 11:49:17 +08:00
搜索文章用了 ES ,生成文章的时候同步一份给 ES 就完事了,还挺无脑方便的。

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

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

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

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

© 2021 V2EX