4

搜索后我发现如何对字符串进行模糊搜索

但我有一个字符串数组

$search = {"a" => "laptop","b" => "screen" ....}

我从数据库 MySQL 中检索到的

是否有任何对单词数组进行模糊搜索的 php 类或函数

或者至少是一些有用信息的链接

我看到一条建议使用 PostgreSQL 的评论

它具有模糊搜索能力,但是

该公司已经有一个 MySQL 数据库

有什么推荐吗??

4

2 回答 2

4

可以在 MySQL 中执行此操作,因为您已经有一个 MySQL 数据库 -如何在 MYSQL 中使用 PHP 对公司名称进行模糊匹配以自动完成?其中提到了MySQL Double Metaphone 实现,并在 SQL for MySQL 5.0+ 中有一个实现

编辑:很抱歉在这里回答,因为评论中不能包含更多内容......

Since you've already accepted an answer using PHP Levenshtein function then I suggest you try that approach first. Software is iterative; the PHP array search may be exactly what you want but you have to test and implement it first against your requirements. As I said in your other question a find as you type solution might be the simplest solution here, which simply narrows the product as the user types. There might not be a need to implement any fuzzy searching since you are using the User to do the fuzzy search themselves :-)

For example a user starts typing S, a, m which allows you to narrow the products to those beginning with Sam. So you are always only letting the user select a product you already know is valid.

于 2011-08-01T10:18:15.427 回答
3

查看Levenshtein 函数

基本上,它为您提供了字符串之间的差异(在成本方面)。即,将字符串 A 转换为字符串 B 的成本是多少。

给自己设置一个阈值 levenshein 距离,任何低于这两个词的词都意味着它们相似。

此外,Bitap 算法更快,因为它可以通过按位运算符实现,但我相信您必须自己实现它,除非某处有 PHP 库。

编辑 要使用 levenshtein 方法:

搜索字符串是“maptop”,并且您将“成本阈值”设置为 2。这意味着您希望任何与搜索字符串相距两个字符串转换操作的单词。

所以你遍历你的字符串数组“A”,直到

levenshtein ( A[i] , searchString ) <= 2

那将是你的对手。但是,您可能会得到多个匹配的单词,因此您可以自行决定如何处理额外的结果。

于 2011-08-01T10:08:59.500 回答