2

わかりましたので、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); 

?>

前もって感謝します

4

1 に答える 1

2

「どうすればこのクエリを改善できますか?」

インデックスを使用します。ここでは、FULLTEXTインデックスが役立つ場合があります。

最新のInnoDBエンジンはFULLTEXTインデックスもサポートしていると思います。(MySQL 5.6以降)

考えられるすべての結果が得られないようにするには、タプルが条件にどの程度一致するかを決定するスコアを計算しORDER BY score DESC LIMIT 20、ベスト20の一致を取得します。例については、この回答を参照してください。

于 2012-04-10T11:49:02.160 に答える