在基本的mysql搜索引擎中按相关性排序

时间:2012-10-01 17:27:40

标签: php mysql ranking relevance

我在mysql中有一个表。它包含大约一百个网站的链接,标题,描述和关键字。并非每个网站都有关键字字段。我在我写的网络爬虫上爬了Apple.com,并将苹果公司的网站编入索引。

我将表格链接到我的搜索引擎,我遇到了问题。我正在使用的代码没有按相关性排序。通过这种方式,我的意思是如果用户在搜索引擎中键入“Apple”,它将返回相当随机的结果。如果我输入'买ipad',ipad就会出现而不是苹果商店。我希望查询扫描所有字段,以查看每个用户输入在字段中的次数,然后排名最相关。 * f有冲突,较高的id赢...基本上。

顺便说一句,如果我输入iphone或ipad,会显示正确的结果。我有两个不同的查询单独和一起的术语,并希望也知道如何将它们混合在一起进行1次查询。

   Terms together:
   $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);


     }


       Terms Seperate
       $query = " SELECT * FROM scan WHERE ";
   $terms = array_map('mysql_real_escape_string', $terms);
   $i = 0;
   foreach ($terms as $each) {
   if ($i++ !== 0) {
   $query .= "or";
   }
   $query.= "Match(title, description, keywords, link) Against ('".implode(' ', $terms )." in boolean mode);


    }

1 个答案:

答案 0 :(得分:-1)

您需要为MATCH语句使用别名。

Select *, MATCH(tags) AGAINST ('search query' IN BOOLEAN MODE) as relevance
from scan HAVING relevance >0 ORDERY BY relevance DESC