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查询吗?也许是你上面提到的查询。你能从数据库中得到结果吗?我的意思是你自己看看