簡體   English   中英

PHP搜索引擎與MySQL數據庫中的特定術語不匹配

[英]PHP search engine isn't matching to specific term in MySQL database

我的網站上運行着一個簡單的搜索引擎,但是每次我搜索非常具體的術語(例如“ june 7”)時,它都會在數據庫中顯示與“ june”相關的所有內容。 我不知道如何讓我的PHP搜索引擎從數據庫中調用特定的關鍵字。

這是我的代碼。

    <?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)
   {
?> 

要在字符列中搜索特定的字符串值,可以使用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來執行搜索。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM