我有一个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;
答案 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'),'%')