【问题标题】:Phone number search with PHP/MySQL - Best Practice?使用 PHP/MySQL 进行电话号码搜索 - 最佳实践?
【发布时间】:2012-12-28 10:46:59
【问题描述】:

我正在寻找使用 PHP 和 MySQL 数据库构建一个黄页式搜索引擎。这个数据库显然存储了姓名、地址,最重要的是,电话号码。我将提示用户选择他们正在执行的搜索类型,以便我可以准确地清理和处理输入。对于名称/地址,我很可能会实施看起来最合适的全文搜索?

但是,对于电话号码,我将尽可能干净地存储它们(仅数字字符,没有空格 - 即 (07)55 200 314 将存储为 0755200314)。我想知道是否有纯粹搜索数字的最佳做法(即简单的 LIKE '%$search%')?我的理解是 MySQL 全文搜索不合适,因为它需要用户输入整个电话号码,而不仅仅是部分电话号码(我打算为其提供匹配项)。

我们将不胜感激有关此主题的任何意见。

【问题讨论】:

  • 对不起,但是...您想实现子字符串电话搜索吗?例如,所有包含 123 的手机?
  • 我可以建议使用 php 函数。
  • @ÁlvaroG.Vicario - 只有在至少输入 5-6 位数字(电话号码长度从 8-10 位不等)后才会调用搜索

标签: php mysql full-text-search search-engine


【解决方案1】:

不要重新发明轮子:使用生产就绪且经过良好测试的解决方案,例如 http://sphinxsearch.com/ 或其他一些搜索工具。您的数据库看起来很少更改,但规模很大 - 这些工具将对其进行一次索引,然后允许您为部分匹配编写可靠的查询、忽略拼写错误、结果按自定义权重排序的复杂查询等。

【讨论】:

  • 你说得对,数据库的规模绝对庞大,而且非常静态。我知道 Sphinx,但我自己从未使用过它,但它适用于所有类型的数据(文本、varchar、int)吗?编辑:只是做了一点阅读,Sphinx 似乎只适用于字符串。将纯数字存储为 varchar/text 没有固有问题吗?
【解决方案2】:

对于phone LIKE '2134%',您不需要FULLTEXT 索引。它使用通常的BTREE 索引。这样,用户应该从一开始就输入正确的电话号码。

另外FULLTEXT 搜索意味着对字长的限制。不少于 4 个字符(如果我没记错的话)。而且搜索电话号码也不是合适的解决方案。

如果我的电话号码有误,例如:真实号码是 333-15-14 并且用户输入 332-15-14,就在 之后332我们已经有另一个数字,另一个范围,它与所需的不匹配。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多