可能重复:
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;
}
答案 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是一种帮助方法,可以根据哪些列具有哪些术语以及您对“重要性”的定义来返回更高的分数。
然后按分数对行进行排序,然后按原样打印结果。