MySQL FULLTEXT与通配符不匹配

时间:2012-10-18 01:57:06

标签: php mysql full-text-search myisam full-text-indexing

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

删除了表格

任何输入都会受到赞赏,因为我之前没有使用全文搜索(或索引此事!)

由于

编辑:

我选择使用FULLTEXT,因为LIKE搜索的速度很慢 - 会有很多这些搜索正在运行,因为这是针对javascript自动完成类型的事情。使用LIKE是否可行?我被告知反对它。 (我提出这个问题是因为所有答案都说使用LIKE而不是解决我的实际问题)

4 个答案:

答案 0 :(得分:2)

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

以下是how to replace MySQL FT with Sphinx的示例。您还可以将Sphinx用于分面搜索,相关文档搜索和其他有用的东西。

希望这有帮助。

答案 1 :(得分: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%');

答案 2 :(得分:1)

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

尝试在没有通配符的情况下搜索简单的“savo”,看看是否可以接受。

使用Mysql FULLTEXT搜索BTW 2大问题:

  1. 如果没有返回并且弄乱cnf(我认为它是4,你需要检查这个),它不会对少于4个字母的反应作出反应

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

答案 3 :(得分:-1)

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

 select * from users where (
username like ('Sav%') 
or email like ('Sav%') 
or first_name like ('Sav%') 
or last_name like ('Sav%') );