php - mysql/php 搜索引擎结果太多且结果缓慢

标签 php mysql

好吧,我大概可以明白为什么我得到了很多结果,因为我使用了 MATCH 查询。我想要的是输出相关搜索。例如,如果搜索是“对绿色感兴趣”,则仅输出表中包含兴趣、绿色或 IT 的结果(如果有意义的话)。

现在我得到了所有结果,而且它真的相当慢。我不想使用 mysql/php 以外的任何东西来实现这一点,因此没有像 Lucene 或替代品这样的第三方搜索引擎。

这是搜索代码:

    <?php

mysql_connect("webhost", "user", "pass") or die(mysql_error());
mysql_select_db("replies") or die(mysql_error());

// Retrieve result using term
$term = $_POST['term'];

$sql = mysql_query("SELECT * from 'replies' `where interest_in_green_it` MATCH '%$term%' or `green_it_good_thing MATCH` '%$term%' or    `green_it_save_environment` MATCH '%    $term%' or  `green_it_save_money` MATCH '%$term%' or    `green_it_incentive` MATCH '%$term%' or `uel_green_it MATCH` '%$term%' or   `MATCH_green_it` MATCH '%$term%' or     `printing_costs` MATCH '%$term%' or `travel_costs` MATCH '%$term%' or   `comments` MATCH '%$term%' or   `uel_green_modules` MATCH '%$term%' or  `year_of_study` MATCH '%    $term%' or      `questionnaire_filled` MATCH '%$term%'");

while ($row = mysql_fetch_array){
echo 'ID: '.$row['ID'];
echo '<br/> Do you have an interest in green IT?: '.$row['interest_in_green_it'];
echo '<br/> Do you think green IT is a good thing?: '.$row['green_it_good_thing'];
echo '<br/> Would you consider green IT if it meant saving the environment?: '.$row['green_it_save_environment'];
echo '<br/> Would you consider green IT if it meant saving money?: '.$row['green_it_save_money'];
echo '<br/> What would be the better incentive to practice green IT?: '.$row['green_it_incentive'];
echo '<br/> DO you think UEL is doing enough to practice green IT? : '.$row['uel_green_it'];
echo '<br/> Do you like green IT?: '.$row['like_green_it'];
echo '<br/> Your estimated monthly travel costs to UEL: '.$row['travel_costs'];
echo '<br/> Your estimated printing costs at UEL at any one time: '.$row['printing_costs'];
echo '<br/> Your comments: '.$row['comments'];
echo '<br/> Would you like to see more green modules at UEL?: '.$row['uel_green_modules'];
echo '<br/> What is your year of study?: '.$row['year_of_study'];
echo '<br/> If you did not fill in the questionnaire why not?: '.$row['questionnaire_filled'];
echo '<br/><br/>';
}

$_GET = array_map('trim', $_GET); 
$_POST = array_map('trim', $_POST); 
$_COOKIE = array_map('trim', $_COOKIE); 
$_REQUEST = array_map('trim', $_REQUEST); 
if(get_magic_quotes_gpc()): 
$_GET = array_map('stripslashes', $_GET); 
$_POST = array_map('stripslashes', $_POST); 
$_COOKIE = array_map('stripslashes', $_COOKIE); 
$_REQUEST = array_map('stripslashes', $_REQUEST); 
endif; 
$_GET = array_map('mysql_real_escape_string', $_GET); 
$_POST = array_map('mysql_real_escape_string', $_POST); 
$_COOKIE = array_map('mysql_real_escape_string', $_COOKIE); 
$_REQUEST = array_map('mysql_real_escape_string', $_REQUEST); 

?>

提前谢谢

最佳答案

“如何改进此查询?”

使用 index 。一个FULLTEXT index在这里可能有用。

我相信最新的 InnoDB 引擎也支持 FULLTEXT 索引。 (MySQL 5.6+)

为了不获得所有可能的结果,请计算一个分数来确定元组与您的条件的匹配程度,并ORDER BY Score DESC LIMIT 20,以获得最佳的 20 个匹配项。请参阅this answer举个例子。

关于php - mysql/php 搜索引擎结果太多且结果缓慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10088057/

相关文章:

php - 数组php中的重复总和

java - 使用 Twitter 身份验证验证用户

php - 使用 JOIN 获取记录并使用 group by 获取最新记录

javascript - 从jquery获取多个值并将其发布到php

php - MySQL IF 语句?

mysql - 即使 WHERE 语句不匹配也显示表中的所有行

php - yii 2.0 admin create 无法在 ActiveForm 中运行

php - Yii2 插入同一张表的多条记录

php - 从 HTML 表单上传图像以及其他表格条目,同时使用图像信息更新表格

php - mysqli_insert_id() 返回的预期 ID 与实际不同