PHP 搜索引擎与 MySQL 数据库中的特定术语不匹配

标签 php mysql database google-app-engine

我的网站上运行着一个简单的搜索引擎,但每次我搜索“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%' 

如果您想使用全文索引,您可以使用 bool 搜索并使用双引号来指示与精确短语的匹配

 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 来执行搜索。

关于PHP 搜索引擎与 MySQL 数据库中的特定术语不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37691137/

相关文章:

mysql - 创建程序错误 weekday()

mysql - 测试用例数据库设计

一行中的最小和最大行的 SQL 值

php - How to Capture Szimek/Signature_Pad with PHP (Capture Javascript into PHP Variable)?

php - 数据库中无限嵌套的组织树

php - Joomla 不读取自定义 php.ini

php - 为什么 1024 * 1024 * 1024 * 1024 * 1024 返回 float ?

mysql - 按顺序插入表

JavaScript ajax(获取)

database-design - 混合数据库系统 : NoSQL for data, 用于关系的 SQL。最佳实践?