打算给 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 全文的限制还是别的全文方案也是只能搜索一个关键词才是快的?
所以你们实现搜索某用户的文章是用的什么办法?
1
Huliya1993 2023-01-04 11:49:17 +08:00
搜索文章用了 ES ,生成文章的时候同步一份给 ES 就完事了,还挺无脑方便的。
|