类似文字搜索

时间:2012-07-04 00:58:56

标签: php mysql search

使用以下代码搜索类似的文字。但由于某些原因,无论我搜索什么,它都只返回相同的值。有人可以看到问题可能是什么?

    $result = mysql_query("SELECT keyword FROM search");
$storeArray = Array();
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
$storeArray[] =  $row['keyword'];  
      }
foreach ($storeArray as $key){
    //echo "'".$key."'";
}  



$my_word = $_POST['value'];

$all_words = array(
"'".$key."'"
);

$bestMatch = array('word' => $my_word, 'match' => 2);

foreach($all_words as $word) {
similar_text($word, $my_word, $percent);
if($percent > $bestMatch['match']) $bestMatch = array('word' => $word, 'match' =>     $percent);
}

if($bestMatch['match'] < 100) echo 'Did you mean: <strong>' . $bestMatch['word'] .   '</strong>';

2 个答案:

答案 0 :(得分:1)

我编辑了一下,告诉我这是不是你想要的。

$my_word = $_POST['value'];
$bestMatch = array('word' => $my_word, 'match' => 2);
$result = mysql_query("SELECT keyword FROM search");
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
            //run similar text on each row
        similar_text($row['keyword'], $my_word, $percent);
            //if row has a better score, overwrite $bestMatch
        if ($percent > $bestMatch['match'])
            $bestMatch = array('word' => $row['keyword'], 'match' => $percent);
}
if ($bestMatch['match'] < 100)
    echo 'Did you mean: <strong>' . $bestMatch['word'] .   '</strong>';

编辑:不要忘记similar_text仅显示已经具有很大相似性(主要是长度)的单词的良好结果,我认为这是80%的相似性(结合两个字符数)和长度)。虽然不是100%肯定...

答案 1 :(得分:0)

看来你在代码中这样做了,只能解释一个结果。

$all_words = array(
    "'".$key."'"
);

foreach($all_words as $word) {
    // ...
}

你正在做的是在foreach()上运行$key,这不存在,因此获得与''最接近的匹配...这将永远是同一件事

尝试将foreach()更改为foreach($storeArray as $word)或类似内容。

这里有一些调试策略 - 将此代码放在if($bestMatch['match'] < 100)上面。

echo '<pre>';
echo $my_word;
print_r($storeArray);
print_r($all_words);
echo '/<pre>';

您正在寻找的是$all_words包含您希望在similar_text()上运行的所有字词。