我正在尝试对我的 MySQL 数据库进行基本的全文搜索 - 这是我正在使用的表:
删除表
任何输入都将不胜感激,因为我之前没有使用过全文搜索(或为此编制索引!)
谢谢
编辑:
我之所以选择使用FULLTEXT
,是因为假设LIKE
搜索速度很慢 - 将会有很多这样的运行,因为它是用于 javascript 自动完成类型的东西。使用LIKE
是一个可行的选择吗?有人建议我不要这样做。(我提出这个问题是因为所有答案都说要使用LIKE
而不是解决我的实际问题)
我正在尝试对我的 MySQL 数据库进行基本的全文搜索 - 这是我正在使用的表:
删除表
任何输入都将不胜感激,因为我之前没有使用过全文搜索(或为此编制索引!)
谢谢
编辑:
我之所以选择使用FULLTEXT
,是因为假设LIKE
搜索速度很慢 - 将会有很多这样的运行,因为它是用于 javascript 自动完成类型的东西。使用LIKE
是一个可行的选择吗?有人建议我不要这样做。(我提出这个问题是因为所有答案都说要使用LIKE
而不是解决我的实际问题)
MySQL全文搜索功能有限,搜索速度相对较慢。我建议使用Solr或Sphinx等外部全文搜索引擎进行此类查询。我对 Solr 不熟悉,但对于 Sphinx,您可以在配置文件中租用与 enable_star 选项一起支持的前缀索引。
这是一个关于如何用 Sphinx 替换 MySQL FT的示例。您还可以使用 Sphinx 进行分面搜索、相关文档搜索和其他有用的东西。
希望这可以帮助。
使用LIKE
命令并使用百分号 ( %
) 作为通配符:
SELECT user_id, username, first_name, last_name
FROM users
WHERE (username LIKE 'Sav%')
OR (email LIKE 'Sav%')
OR (first_name LIKE 'Sav%')
OR (last_name LIKE 'Sav%');
你在这里混合了你的隐喻。您想使用 FULLTEXT 有充分的理由,然后使用 LIKE 中的语法。
尝试只搜索没有通配符的普通“savo”,看看是否可以接受。
顺便说一句,Mysql FULLTEXT 搜索的 2 个大问题:
它不会对输入少于 4 个字母而不会返回并弄乱 cnf 做出反应(我认为它是 4 个,你需要检查一下)
如果结果集计数大于可用总行数的 50%,则它认为搜索失败,并且不返回任何内容。值得记住的是,只测试 12 行,并说他们都有这个词test
。哎哟;)
我认为你正在尝试做这样的事情:
select * from users where (
username like ('Sav%')
or email like ('Sav%')
or first_name like ('Sav%')
or last_name like ('Sav%') );