1

目前我正在尝试为我的网站创建一个搜索功能,允许用户使用他们的全名(名字或姓氏)或他们的用户名搜索其他用户。现在我创建了一个临时搜索,它使用 mysql 的LIKE功能和 %name% 来允许使用通配符。它非常简单。我遇到的问题是在提供全名并且数据库中只有名称的缩短版本时尝试搜索名称。例如:

搜索 Richard 只会找到 Richards 而不是 Richs。对于如何创建能够做到这一点而又不会非常低效的东西,我真的很难过。我打算使用 SOUNDEX,但这只对英文名称和单词有用。

另外我想问一下使用像 Apaches Lucene 这样的搜索引擎来索引数据库是否更好?我正在考虑这个,但不确定是否值得,因为搜索引擎只会搜索小的全文字符串。

谢谢

4

3 回答 3

0

使用近似字符串匹配对结果进行排名,并显示给定阈值内的所有结果。

您可以从评论中提到的levenshtein开始,然后返回最低分数。Levenshtein 计算差异,因此低分意味着高相似度。0 分表示完全匹配。

于 2013-08-30T22:42:14.463 回答
0

如果他们输入全名,您首先必须使用 PHP 根据空格分隔名称。
然后你必须取名字并根据你想要的字符数来分割它。例如。如果你有 Antonio,分成 4 个字符给 Anto。
然后你做你的搜索功能。

以下是如何拆分为 4 个字符:
$str = "Antonia";
$arr2 = str_split($str, 4);
回声 $arr2[0];

于 2013-08-30T23:02:22.413 回答
-2

您可以尝试以下方法:

搜索.html

<html>
    <head>
        <title>Search the Database</title>
    </head>

    <body>

    <form action="/test/search.php" method="post">
     Search: <input type="text" name="term" /><br />
    <input type="submit" name="submit" value="Submit" />
    </form>

    </body>
 </html>

搜索.php

<?php
mysql_connect ("localhost", "username","password")  or die (mysql_error());
mysql_select_db ("database");

$term = $_POST['term'];

$sql = mysql_query("select * from database where XXXXXX like '%$term%'");

while ($row = mysql_fetch_array($sql)){
    echo 'ID: '.$row['XXXXX'];
    echo '<br/> First Name: '.$row['XXXX'];
    echo '<br/> Last Name: '.$row['XXXX'];
    echo '<br/> Phone: '.$row['XXXX'];
    echo '<br/><br/>';
    }

?>
于 2013-08-30T22:40:17.160 回答