Php MySQL全文与通配符字符串不匹配

Php MySQL全文与通配符字符串不匹配,php,mysql,full-text-search,myisam,full-text-indexing,Php,Mysql,Full Text Search,Myisam,Full Text Indexing,我正在尝试对我的MySQL数据库进行基本的全文搜索-以下是我使用的表: 删除的表格 任何输入都将不胜感激,因为我以前从未使用过全文搜索(或为此编制索引!) 谢谢 编辑: 我之所以选择使用全文,是因为像这样的搜索应该是缓慢的,因为会有很多这样的搜索在运行,因为它是针对javascript自动完成类型的东西。像一样使用是可行的选择吗?有人劝我不要这样做。(我提出这个问题是因为所有的答案都说使用LIKE而不是解决我的实际问题)使用LIKE命令并使用百分比符号(%)作为通配符: SELECT user_

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

删除的表格

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

谢谢

编辑:


我之所以选择使用
全文
,是因为像
这样的搜索应该是缓慢的,因为会有很多这样的搜索在运行,因为它是针对javascript自动完成类型的东西。像
一样使用
是可行的选择吗?有人劝我不要这样做。(我提出这个问题是因为所有的答案都说使用
LIKE
而不是解决我的实际问题)

使用
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%');

我想你是想做这样的事情:

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

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

下面是一个关于的例子。您还可以使用Sphinx进行分面搜索、相关文档搜索和其他有用的东西


希望这有帮助。

你在这里混合了你的隐喻。如果出于充分的理由想使用全文,那么可以使用LIKE中的语法

尝试搜索不带通配符的纯“savo”,看看这是否可以接受

顺便说一句,Mysql全文搜索有两个大问题:

  • 如果输入的字母少于4个,它不会做出反应,而不会返回并干扰cnf(我认为是4个,您需要检查一下)

  • 如果结果集计数大于可用总行数的50%,则表示搜索失败,并且不返回任何结果。当只测试vs 12行时,值得记住,并说它们都有单词
    test
    。哎哟


  • 我之所以选择使用全文,是因为像
    这样的
    搜索应该很慢,因为会有很多这样的搜索在运行,因为它是针对javascript自动完成类型的东西。您认为使用类似于
    是可行的选择吗?有人建议我不要这样做。在要搜索的每个列中添加一个mysql索引。这应该会有帮助。我使用了
    like
    在小规模的情况下搜索autocomplete而没有问题。问题是,您实际上无法在MySQL中创建能够有效处理多列“like”查询的索引。MySQL内部用于这些索引的B树索引有局限性。在查询中,它们只能处理一个范围,如a=5和b='somestring',以及c=Sav%'。这意味着索引只能覆盖一个带有通配符的类,其他类将逐个进行筛选。您可以看到,在EXPLAIN output中,最小字长由MySQL配置文件中的ft_min_word_len选项控制,可以根据需要进行调整: