2016-06-07 54 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