1

我正在尝试对我的 MySQL 数据库进行基本的全文搜索 - 这是我正在使用的表:

删除表

任何输入都将不胜感激,因为我之前没有使用过全文搜索(或为此编制索引!)

谢谢

编辑:

我之所以选择使用FULLTEXT,是因为假设LIKE搜索速度很慢 - 将会有很多这样的运行,因为它是用于 javascript 自动完成类型的东西。使用LIKE是一个可行的选择吗?有人建议我不要这样做。(我提出这个问题是因为所有答案都说要使用LIKE而不是解决我的实际问题)

4

4 回答 4

2

MySQL全文搜索功能有限,搜索速度相对较慢。我建议使用SolrSphinx等外部全文搜索引擎进行此类查询。我对 Solr 不熟悉,但对于 Sphinx,您可以在配置文件中租用与 enable_star 选项一起支持的前缀索引。

这是一个关于如何用 Sphinx 替换 MySQL FT的示例。您还可以使用 Sphinx 进行分面搜索、相关文档搜索和其他有用的东西。

希望这可以帮助。

于 2012-10-18T09:47:29.170 回答
1

使用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%');
于 2012-10-18T02:06:35.713 回答
1

你在这里混合了你的隐喻。您想使用 FULLTEXT 有充分的理由,然后使用 LIKE 中的语法。

尝试只搜索没有通配符的普通“savo”,看看是否可以接受。

顺便说一句,Mysql FULLTEXT 搜索的 2 个大问题:

  1. 它不会对输入少于 4 个字母而不会返回并弄乱 cnf 做出反应(我认为它是 4 个,你需要检查一下)

  2. 如果结果集计数大于可用总行数的 50%,则它认为搜索失败,并且不返回任何内容。值得记住的是,只测试 12 行,并说他们都有这个词test。哎哟;)

于 2012-10-18T10:03:23.153 回答
-1

我认为你正在尝试做这样的事情:

 select * from users where (
username like ('Sav%') 
or email like ('Sav%') 
or first_name like ('Sav%') 
or last_name like ('Sav%') );
于 2012-10-18T02:10:15.513 回答