Php 全文排名

Php 全文排名,php,Php,可能重复: 如何让搜索引擎根据键入的单词数量进行排名,并根据字段标题、描述、关键字和链接中出现的类型数量进行排名 因此,用户提交的单词越多,结果越高。假设用户输入iPhone,iPhone关键词会出现在链接、描述和标题字段中,因此排名会高于仅在描述中提及iPhone的Apple和在标题和描述中提及iPhone的Apple Store 我的代码如下: $query = " SELECT * FROM scan WHERE "; $terms = array_map('mysql_real

可能重复:

如何让搜索引擎根据键入的单词数量进行排名,并根据字段标题、描述、关键字和链接中出现的类型数量进行排名

因此,用户提交的单词越多,结果越高。假设用户输入iPhone,iPhone关键词会出现在链接、描述和标题字段中,因此排名会高于仅在描述中提及iPhone的Apple和在标题和描述中提及iPhone的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;
                      }
$query=“选择*从扫描位置”;
$terms=array\u map('mysql\u real\u escape\u string',$terms);
$i=0;
foreach($条款为每个$){
如果($i++!==0){
$query.=“和”;
}
$query.=“将(标题、描述、关键字、链接)与(”)匹配。内爆(“”,$terms)。“在布尔模式下”)”;
} 
$secs=微时间();
$query=mysql\u query($query)或die('mysql查询错误:'.mysql\u错误($connect));
echo'

Qlick在中显示了您的结果。数字格式($secs,2)。'秒。

'; $numrows=mysql\u num\u行($query); 如果($numrows>0){ while($row=mysql\u fetch\u 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); 回音“.PHP_EOL; echo'

。$description.

'.PHP\u EOL; 回显“”.$link.

”.PHP\u EOL; }


虽然我确信在mysql中实现这一点是可能的,但像这样的全文搜索索引设计用于直接处理这些内容。您可能会找到更好的资源,并在这方面提供帮助

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

while ($row = mysql_fetch_assoc($query))
{ 
 $rows[] = $row;
}
然后,您可以在$rows上循环并为其分配分数

foreach ($rows as $row)
  $row['score'] = score_row($row, $terms)
score_row是一个helper方法,它根据哪些列包含哪些术语以及您对“重要性”的定义返回更高的分数


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

这与您之前提出的问题不同吗?这要简单得多,而且我不知道如何删除StackOverflow上的问题。我宁愿找到mysql实现方法。您感兴趣的基本操作是排序。如果必须使用sql,那么您的查询必须使用'order by'子句,如
order by X
,其中X是反映每个字段所需权重的计算值。如果您愿意在获取结果后在php中执行此操作,或者甚至在页面加载时在javascript中执行此操作(假设您有html客户端),你可能会写一些更容易理解的东西。你知道从哪里开始吗?给我一个指导的地方?当然。你已经成功地从php执行了一个简单的sql查询吗?也许是你上面提到的查询。你能从数据库中得到结果吗?我的意思是你自己看看