是的,我在幾年前遇到了這個問題,並一直在爲我的客戶使用此解決方案。就結果而言,它使事情工作得很好。
基本上它將3個字符以下的任何內容分成LIKE搜索和任何超過3個字符的全文布爾搜索。我目前正在發佈我的分層搜索版本。但直到我完成。我發佈了全文部分,以便您可以使用代碼。如果你有任何問題或做得更好。我只是要求你將它發佈在我的Project Hosted網站上,以便它變得更好。
完整的功能顯示在源鏈接。
$parseQuery = explode(" ",$query);
foreach($parseQuery as $key => $qvalue)
{
if(strlen($qvalue) > 3)
{
$buildQuery .= "$qvalue ";
}
elseif(strlen($qvalue) >= 2)
{
$buildLike[] = "`blog` LIKE '%$qvalue%'";
}
}
if($buildLike != "")
{
$numCountQuery = 0;
$countforbuilding = count($buildLike) - 1;
foreach($buildLike as $key => $queryforLike)
{
if($numCountQuery != $countforbuilding)
{
$finalBuildLike .= "$queryforLike AND";
}
else
{
$finalBuildLike .= "$queryforLike";
}
$numCountQuery++;
}
}
if(($finalBuildLike != "") && ($buildQuery != ""))
{
$finalBuildLike = "AND $finalBuildLike";
}
if($buildQuery != "")
{
$buildDescription = $buildQuery;
$buildQuery = "MATCH(blog) AGAINST ('".trim($buildQuery)."')";
}
http://code.google.com/p/php-mysql-layered-search/
希望這有助於。
感謝您的輸入,但我不太喜歡這個解決方案,因爲切換到LIKE將徹底改變結果集 – robjmills 2011-03-29 15:16:14
沒有問題。我也這樣想過,直到我把它作爲測試並看到報告。看起來邏輯上不可能認爲mysql可以從一個角色產生一個好的布爾分數,但總是有更好的方法。讓我知道你發現了什麼。 – RichardW11 2011-03-29 20:46:26