2010-07-12 91 views
0

嗨我试图创建一个搜索框,以姓氏和/或名字和/或电话号码搜索客户。MySQL全文搜索(php)

这里是我的SQL查询:

SELECT * 
    FROM customer 
WHERE Match(c_fname,c_lname,c_phone) Against('$keywords') 

我的问题是,当我搜索的法案,而不是如果我搜索用户bob为什么它的工作?

另一个问题是我如何区分字段(最重要的姓氏),所以如果我搜索约翰史密斯和输出是威尔史密斯,罗布史密斯,约翰克林顿和约翰史密斯,约翰史密斯将非常最佳。

回答

3

默认情况下,MysQL全文搜索引擎将从全文搜索中排除3个字母或更少的单词。

MySQL Manual

的最小和的 话要被索引的最大长度由 的ft_min_word_len和ft_max_word_len 系统变量来定义。 (请参见第5.1.4节, “服务器系统变量”。) 的默认最小值是四个 个字符;默认最大值为 版本相关。

此外,存在于表中50%或更多行中的单词被认为是通用的并且不匹配。系统定义为常用词的停用词也不做。在不重新编译MySQL的情况下,无法提高标准全文搜索的50%阈值。相反,您可能需要考虑使用布尔模式全文搜索,它没有这个50%的行问题。

布尔模式全文搜索的细节可以在MySQL手册的Boolean Full-Text Searches部分找到。

The list of default stopwords in MySql website。

+0

搜索史密斯不起作用ether – Ross 2010-07-12 22:48:22

+1

如果史密斯在表中的行数超过50%,那么MySQL会将其视为一个常用词并在全文搜索中忽略它。 – 2010-07-12 22:55:54