-1

重複の可能性:
ユーザー入力に一致する単語数に基づいてランキングを設定する方法

入力された単語の量によってランク付けされ、タイトル、説明、キーワード、リンクのフィールドで切り出されたタイプの量によってランク付けされる検索エンジンを作成するにはどうすればよいですか。

したがって、上位の結果は、ユーザーが送信した単語の数が多い順に並べられます。ユーザーがiPhoneで入力した場合、iPhoneのキーワードがリンク、説明、およびタイトルフィールドに表示されるため、説明でのみ言及しているAppleや、タイトルと説明で言及しているApple Storeよりも上位にランク付けされます。 .

私のコードは以下の通りです:

 $query = " SELECT * FROM scan WHERE "; 

 $terms = array_map('mysql_real_escape_string', $terms);
 $i = 0; 
 foreach ($terms as $each) {
  if ($i++ !== 0){
        $query .= " AND "; 
  }
  $query .= "Match(title, description, keywords, link) Against ('".implode(' ',$terms)." IN BOOLEAN MODE') ";
  } 
  $secs = microtime();  



$query = mysql_query($query) or die('MySQL Query Error: ' . mysql_error( $connect ));

echo '<p class="time">Qlick showed your results in ' . number_format($secs,2) . ' seconds.</p>';     

 $numrows = mysql_num_rows($query);
if ($numrows > 0) {

      while ($row = mysql_fetch_assoc($query)) {
            $id = $row['id'];
            $title1 = $row['title'];
            $description = $row['description'];
            $keywords = $row['keywords'];
            $link = $row['link'];
            $rank = $row['rank'];
          $title = substr($title1,0,60);

        echo '<h2><a class="ok" href="' . $link . '">' . $title . '</a></h2>' . PHP_EOL;
                    echo '<p class="kk">' . $description . '<br><br><span class="keywords">' . PHP_EOL;            
                    echo '<p><a class="okay" href="' . $link . '">' . $link . '<br><br><span class="keywords">' . PHP_EOL;
                      }
4

1 に答える 1

0

これを mysql 内に実装することは可能だと確信していますが、 solr/luceneのような全文検索インデックスは、このようなものを直接処理するように設計されています。より良いリソースを見つけて、その道を進んでいくのを助けるかもしれません。

PHP を使用して、mysql クエリによって返された配列をコピーします。

while ($row = mysql_fetch_assoc($query))
{ 
 $rows[] = $row;
}

次に、$rows をループしてスコアを割り当てることができます

foreach ($rows as $row)
  $row['score'] = score_row($row, $terms)

score_row は、どの列にどの用語が含まれているか、および「重要度」の定義に応じて、より大きなスコアを返すヘルパー メソッドです。

次に、行をスコアで並べ替え、結果を印刷します。

于 2012-10-01T19:58:43.907 に答える