【问题标题】:MySQL full text search (php)MySQL 全文搜索 (php)
【发布时间】:2010-07-12 22:43:46
【问题描述】:

您好,我正在尝试创建一个搜索框来按姓氏和/或名字和/或电话号码搜索客户。

这是我的 SQL 查询:

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

我的问题是为什么它在我搜索 bill 时有效,而在我搜索 bob 时无效?

另一个问题是我如何对字段进行优先级排序(姓氏最重要),这样如果我搜索 John Smith 并且输出是 Will smith、Rob Smith、John Clinton 和 John Smith,John Smith 就会排在首位.

【问题讨论】:

    标签: sql mysql full-text-search


    【解决方案1】:

    MySQL 全文搜索引擎默认会从全文搜索中排除不超过 3 个字母的单词。

    来自MySQL Manual

    最小和最大长度 要索引的单词由 ft_min_word_len 和 ft_max_word_len 系统变量。 (见第 5.1.4 节, “服务器系统变量”。) 默认最小值为四 人物;默认最大值是 版本相关。

    此外,出现在表中 50% 或更多行中的单词被认为是常见的并且不匹配。系统定义为常用词的停用词也不会。在不重新编译 MySQL 的情况下,不可能增加标准全文搜索的 50% 阈值。相反,您可能需要考虑使用不存在 50% 行问题的布尔模式全文搜索。

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

    MySql 网站上的list of default stopwords

    【讨论】:

    • 如果 Smith 在表中超过 50% 的行中,则 MySQL 会将其视为常用词,从全文搜索中忽略它。
    猜你喜欢
    • 2012-01-16
    • 1970-01-01
    • 1970-01-01
    • 2010-10-22
    • 2015-07-03
    • 1970-01-01
    • 2010-10-30
    • 1970-01-01
    相关资源
    最近更新 更多