2016-06-07 51 views
0

我在我的網站上運行了一個簡單的搜索引擎,但每次搜索「6月7日」這個非常具體的術語時,它都會顯示與「june」在數據庫中。我無法弄清楚如何讓我的PHP搜索引擎從數據庫調用特定的關鍵字..幫助?PHP搜索引擎與MySQL數據庫中的特定術語不匹配

這裏是我的代碼..

<?PHP 
    function getmicrotime() 
    { 
list($usec, $sec) = explode(" ", microtime()); 
return ((float)$usec + (float)$sec); 
} 
//initializing connection to the database 
$connection_string = dirname(__FILE__) . "/connectionstring.php"; 
require_once($connection_string); 
//selecting table 
    mysql_select_db("jaguartr_logins") or die ('Unable to select database.'); 
//max number of results on the page 
$RESULTS_LIMIT=1000; 
if(isset($_GET['search_term']) && isset($_GET['search_button'])) 
{ 
    $search_term = $_GET['search_term']; 
if(!isset($first_pos)) 
{ 
    $first_pos = "0"; 
} 

$start_search = getmicrotime(); 

// initializing MySQL query 
$sql_query = mysql_query("SELECT * FROM news WHERE MATCH(title,article) AGAINST('$search_term')"); 

// additional check. Insurance method to re-search the database again in case of too many matches (too many matches cause returning of 0 results) 
if($results = mysql_num_rows($sql_query) != 0) 
{ 
    $sql = "SELECT * FROM news WHERE MATCH(title,article) AGAINST('$search_term') LIMIT $first_pos, $RESULTS_LIMIT"; 
    $sql_result_query = mysql_query($sql);   
} 
else 
{ 
    $sql = "SELECT * FROM news WHERE (title LIKE '%".mysql_real_escape_string($search_term)."%' OR article LIKE '%".$search_term."%') "; 
    $sql_query = mysql_query($sql); 
    $results = mysql_num_rows($sql_query); 

    $sql_result_query = mysql_query("SELECT * FROM news WHERE (title LIKE '%".$search_term."%' OR article LIKE '%".$search_term."%') LIMIT $first_pos, $RESULTS_LIMIT "); 
} 

$stop_search = getmicrotime(); 

//calculating the search time 
$time_search = ($stop_search - $start_search); 
} 
?> 

<?PHP 
    if($results != 0) 
    { 
?> 
+0

你有更長的搜索條件相同的問題嗎?我的意思是,7只是一個字符短,可以忽略。嘗試更長的時間。 –

+0

是的,如果我在搜索欄中輸入「June 7」,它會在數據庫中提取以「J」開頭的任何內容 – Tom

回答

0

要搜索字符列中的特定字符串值,可以使用LIKE條件

WHERE mycol LIKE '%june 7%' 

如果你想使用一個完整的文本索引,您可以使用布爾搜索並使用雙引號表示匹配的確切短語

WHERE MATCH (mycol) AGAINST ('+"june 7"' IN BOOLEAN MODE) 

但我期望全文搜索不會返回任何結果,因爲標記「7」比最小標記長度短。 (可以是innodb_ft_min_token_sizeft_min_word_len,具體取決於表是InnoDB還是MyISAM)。

這是MySQL的問題。如果你無法獲得MySQL查詢來完成你需要的搜索,那麼你可能需要一個不同的搜索引擎。 PHP代碼需要半知道MySQL搜索限制是什麼,並根據特定的單詞或短語創建適當的SQL來執行搜索。

+0

我需要%search_term%與數據庫中的內容完全匹配。我沒有在MySQL中執行查詢,我只是想用我的php從數據庫中檢索完全匹配。 – Tom