V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
MySQL 5.5 Community Server
MySQL 5.6 Community Server
Percona Configuration Wizard
XtraBackup 搭建主从复制
Great Sites on MySQL
Percona
MySQL Performance Blog
Severalnines
推荐管理工具
Sequel Pro
phpMyAdmin
推荐书目
MySQL Cookbook
MySQL 相关项目
MariaDB
Drizzle
参考文档
http://mysql-python.sourceforge.net/MySQLdb.html
makelove
V2EX  ›  MySQL

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

  •  
  •   makelove · 2023-01-04 10:40:05 +08:00 · 860 次点击
    这是一个创建于 470 天前的主题,其中的信息可能已经有所发展或是发生改变。

    打算给 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 全文的限制还是别的全文方案也是只能搜索一个关键词才是快的?

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

    Huliya1993
        1
    Huliya1993  
       2023-01-04 11:49:17 +08:00
    搜索文章用了 ES ,生成文章的时候同步一份给 ES 就完事了,还挺无脑方便的。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   4553 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 01:07 · PVG 09:07 · LAX 18:07 · JFK 21:07
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.