搜索建议 - PHP - MySQL


search suggestion - PHP - MySQL

我有一个MySQL查询,如下所示;

$query = "SELECT * FROM dictionary WHERE word LIKE '%".$word."%' ORDER BY word LIMIT 10";

这将在我的字典数据库中搜索(并显示)单词。

搜索将返回;

Drunken for Drunk, etc, etc..Drunken for Drunke, etc, etc..Drunken for Drunken, etc, etc..

但它不会为Drunkin返回Drunken.我想将这个词显示为建议词(就像我们在谷歌中看到的那样)。我该怎么做?

以下是我的完整代码供参考;

$db = new pdo("mysql:host=localhost;dbname=dictionary", "root", "password");
$query = "SELECT * FROM dictionary WHERE word LIKE '%".$word."%' ORDER BY word LIMIT 10";
$result = $db->query($query);
$end_result = '';
if ($result) {
    while ( $r = $result->fetch(PDO::FETCH_ASSOC) ) {
        $end_result .= $r['word'].'<br>';
    }
}
echo $end_result;

尝试使用 SOUNDEX

Soundex 键具有发音相似的单词产生的属性 相同的 Soundex 键,因此可用于简化搜索 您知道发音但不知道拼写的数据库。这 Soundex 函数返回一个 4 个字符长的字符串,以 信。

以下是关于SO的一些问题,可能会引导您朝着正确的方向前进:

  • 谷歌"你的意思是吗?算法工作?
  • 如何实现"你的意思是"?

希望这有帮助。

Soundex 可能对简单的情况有所帮助,但如果你想正确实现这样的东西,你需要一个 Lucene 搜索索引,你可以在其中执行模糊(=不精确)搜索。看看Apache Solr PHP端口。

您将需要比 LIKE 语句更复杂的东西。它显示醉酒,因为醉酒包含"醉酒"一词。

更复杂的算法会查看键盘布局以查找可能的拼写错误:例如,如果您搜索"drumk",则可以解释字母M在N旁边(在QWERTY键盘上)并建议喝醉。

如果没有结果,您也可以尝试从搜索查询中删除最后一个字符:例如:如果您搜索醉酒但找不到任何内容,则可以尝试搜索醉酒等。

希望这有帮助。

只是为了记录,我很惊讶这里没有提到 levenshtein 函数,用于测量两个字符串的"距离"或相似性,尽管对于英语单词来说,似乎没有什么能击败 soundex 类型算法或最近的 Metaphone。

通过几行代码,您将从Google之类的东西中获得"你的意思是"。请参阅 php.net 文档中的示例 #1。

请注意,此示例基于静态单词数组。如果您需要从数据库中检索这些单词,则需要再实现几行...

最简单的方法:

从 table_name 中选择 *,其中 SOUNDEX(field_name) 如 CONCAT('%', SOUNDEX('searching_element'), '%')