搜索建议 - PHP - MySQL

时间:2012-06-01 12:02:45

标签: php mysql search pdo search-suggestion

我有一个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..

Drunken 不会返回Drunkin。我想将这个词显示为一个建议词(就像我们在google中看到的那样)。我怎么能这样做?

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

$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;

5 个答案:

答案 0 :(得分:2)

尝试使用 SOUNDEX

  

Soundex 键具有发音类似于产生的属性   相同的soundex键,因此可用于简化搜索   您知道发音而不是拼写的数据库。这个   soundex函数返回一个长度为4个字符的字符串,以a开头   信。

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

希望这有帮助。

答案 1 :(得分:1)

Soundex可能对简单案例有帮助,但是如果你想要正确实现这样的东西,你需要一个Lucene搜索索引,你可以在其上执行模糊(=非准确)搜索。看看Apache Solr PHP port

答案 2 :(得分:0)

你需要比LIKE语句更复杂的东西。它显示Drunken for Drunk,因为Drunken包含单词Drunk。

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

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

希望这会有所帮助。

答案 3 :(得分:0)

仅仅是为了记录,我很惊讶这里没有提到levenshtein功能,用于测量&#34;距离&#34;或两个字符串的相似性,尽管对于英语单词来说,似乎没有什么能比soundex类型的算法或最近的Metaphone更胜一筹。

只需几行代码即可获得&#34;您的意思是&#34;来自谷歌的东西。请参阅php.net文档中的example #1

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

答案 4 :(得分:-1)

最简单的方法:

SELECT * FROM table_name WHERE soundex(field_name)LIKE CONCAT('%',soundex('searching_element'),'%')