2010-05-01 144 views
1

,如果用戶輸入'good',它會顯示所有包含關鍵字'good'的結果。然而,如果用戶輸入「最好的最甜蜜」,則它不顯示結果,因爲沒有兩個詞彙一起出現的記錄;但出現在不同地方的入口處。在我的搜索表單中顯示多個單詞的搜索結果

例如,記錄說:

一個很好的動作是一個不斷剩餘 店和純產在「好」,它會顯示這個

用戶類型記錄,但如果用戶輸入「好」+「純」,則不會顯示任何內容。或者如果記錄中包含關鍵字「善行」,並且用戶在沒有連字符的情況下輸入「好行爲」,則不會顯示任何內容。

我想要的是,如果用戶輸入'好'+'純'或'好行爲',則應該包含這些關鍵字的記錄突出顯示它們。

的search.php代碼:

$search_result = ""; 

$search_result = $_POST["q"]; 

$search_result = trim($search_result); 

//Check if the string is empty 
if ($search_result == "") { 
    echo "<p class='error'>Search Error. Please Enter Your Search Query.</p>" ; 
    exit(); 
     } 

if ($search_result == "%" || $search_result == "_" || $search_result == "+") { 
    echo "<p class='error1'>Search Error. Please Enter a Valid Search Query.</p>" ; 
    exit(); 
     } 

$result = mysql_query('SELECT cQuotes, vAuthor, cArabic, vReference FROM thquotes WHERE cQuotes LIKE "%' . mysql_real_escape_string($search_result) .'%" ORDER BY idQuotes DESC', $conn) 
    or die ('Error: '.mysql_error()); 


function h($s) { 
    echo htmlspecialchars($s, ENT_QUOTES); 
} 

function highlightWords($string, $word) 
{ 

    $string = preg_replace("/".preg_quote($word, "/")."/i", "<span class='highlight'>$0</span>", $string); 
    /*** return the highlighted string ***/ 
    return $string; 

} 

?> 

<div class="caption">Search Results</div> 
<div class="center_div"> 
<table> 
    <?php while ($row= mysql_fetch_array($result, MYSQL_ASSOC)) { 
     $cQuote = highlightWords(htmlspecialchars($row['cQuotes']), $search_result); 
     ?> 
     <tr> 
     <td style="text-align:right; font-size:18px;"><?php h($row['cArabic']); ?></td> 
      <td style="font-size:16px;"><?php echo $cQuote; ?></td> 
      <td style="font-size:12px;"><?php h($row['vAuthor']); ?></td> 
      <td style="font-size:12px; font-style:italic; text-align:right;"><?php h($row['vReference']); ?></td> 
     </tr> 
    <?php } ?> 
</table> 
</div> 

search.html:

<form name="myform" class="wrapper"> 
     <input type="text" name="q" onkeyup="showUser()" class="txt_search"/> 
     <input type="button" name="button" onclick="showUser()" class="button"/> 
     <p> 
     <div id="txtHint"></div> 
    </form> 

回答

2

你想要什麼叫full-text searching。簡而言之,全文搜索基本上是單獨搜索每個單詞。

+0

我的表類型是INNODB。 。不幸的是它說它不支持FULLTEXT。 – input 2010-05-01 20:58:51

+0

在這種情況下,我建議你去看看http://stackoverflow.com/questions/1381186/fulltext-search-with-innodb,它完全處理如何解決這個問題。如果一個專門的搜索引擎(就像那篇文章中提到的那樣)對你來說是不可能的,你可以做其他事情,比如使用觸發器將你的InnoDB數據複製到MyISAM表並在該表上搜索,或者手動滾動你自己的解決方案分裂的內容和鏈接到正確的職位,如加布裏埃爾建議。 – 2010-05-01 21:14:11

+0

謝謝你的回答。決定繼續使用php替代品。 http://www.acuras.co.uk/articles/2-php-multi-word-mysql-search-algorithm-and-output – input 2010-05-03 10:48:22

1

你會想要實現內容索引來利用這種搜索,實質上是一個關聯表,它將每個單詞與一個內容組件(如你的記錄)關聯起來,當你搜索查詢索引並返回關聯的內容時,允許你通過計數來改變相關性,添加要索引的字段等。http://www.databasejournal.com/sqletc/article.php/1578331/Using-Fulltext-Indexes-in-MySQL---Part-1.htm這可能是一個好的開始。

+0

請參閱我上面的評論。我的表類型是INNODB。有沒有解決這個在INNODB中使用FULLTEXT的方法? – input 2010-05-01 21:01:41

+0

從我可以看到它出現大多數用戶正在創建一個輔助ISAM表來處理這個問題,我只能通過讀取INNODB中的內容並在ISAM中創建索引記錄來執行搜索,並且不返回結果,但通過鍵向INNODB查詢。 – Gabriel 2010-05-01 21:23:29

0

在我看來,正確地爲您的網站做一個搜索引擎是最難的事情之一。我只想在谷歌上登錄我的網站,並讓谷歌索引它。您可以自定義頁面的輸出並將該外觀整合到您的網站中。

唯一的證據將是「谷歌」品牌的搜索按鈕,但說實話,我認爲你現在可以刪除它。