全文排名

时间:2012-10-01 19:50:52

标签: php

  

可能重复:
  how to have ranking based on how many words match user input

如何根据字段标题,说明,关键字,链接中输入的字词数量对字词数量进行排名并对其进行排名。

因此,通过提供更多用户提交的单词来排序更高的结果。假设用户输入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;
                      }

1 个答案:

答案 0 :(得分:0)

虽然我确信可以在mysql中实现这一点,但像solr/lucene这样的全文搜索索引旨在直接处理这些内容。你可能会找到更好的资源和帮助走这条路。

使用php,复制mysql查询返回的数组:

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

然后你可以遍历$行并将分数分配给

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

score_row是一种帮助方法,可以根据哪些列具有哪些术语以及您对“重要性”的定义来返回更高的分数。

然后按分数对行进行排序,然后按原样打印结果。