MySql附近搜索

时间:2020-09-25 02:32:57

标签: sql search

例如,我想在“我的名字是约翰·乔·史密斯,我住在美国”中搜索“约翰·史密斯”。但是“ John”和“ Smith”之间不得超过5个字符。

如何使用MySql(php)来获得此信息?

我正在为我的数据库构建一个搜索引擎,我已经在使用MATCH AGAINST,但我也想提供另一种搜索方式。

谢谢你,安迪

2 个答案:

答案 0 :(得分:0)

您可能想探索

SOUNDEX()

,这将帮助您实现所需的功能,例如自动提示功能。 字符串。但这没有什么缺点,因为只考虑了前几个字符,首字母必须相同,否则您将很难找到匹配项。

对于更高级的需求,我认为您需要查看

Levenshtein距离又称两个字符串的“编辑距离”,并与 阈值

。这是较复杂但较慢的解决方案,但具有更好的灵活性

您可能想在这里参考示例教程

https://lucidar.me/en/web-dev/levenshtein-distance-in-mysql/#:~:text=Informally%2C%20the%20Levenshtein%20distance%20between,not%20match%20exactly%20the%20fields

答案 1 :(得分:0)

但是“ John”和“ Smith”之间不得超过5个字符

据我所知,

MySQL全文功能不提供这种灵活性。您可以使用like或正则表达式:

where col regexp 'John.{0,5}Smith'

如果您在子查询中进行全文搜索,则实际上可能具有合理的性能。

令人愉快的like表达式是:

where col like '%John%Smith%' and
      col not like '%John______Smith%'

有六个_