-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 回答