MySQL搜索结果 - 按相关性排序

时间:2011-05-09 23:26:06

标签: php mysql codeigniter

我正在尝试编写搜索网站数据库的基本搜索引擎的相关功能。让我们以Yelp为例。 (指向页面的直接链接 http://www.yelp.com/search?find_desc=chinese&ns=1&find_loc=New+York%2C+NY

问题1

他们如何确定“最佳匹配”?我猜他们会搜索包含关键字的所有条目至少一次,然后按关键字出现在标题/标签/说明中的次数排序。

问题2

按“最高评分”和“评论最多”进行排序,他们会搜索包含关键字的所有条目,然后按平均评分和评论数量进行排序。

问题3

我正在使用CodeIgniter与MySQL和Active Records。让我们说我的表'产品'有列'id,name,categories,tags,description'。

  • 如何执行返回所有行的查询,其中关键字出现在其中一列中,并且
  • 如何计算关键字出现在MySQL查询的其中一列中的次数。

1 个答案:

答案 0 :(得分:2)

按相关性排序,特别是当涉及关键字/文本时,这不是一项简单的任务。当您处理像Yelp这样的大型数据集时,您需要专门的全文搜索引擎,如Sphinx http://sphinxsearch.com/

Sphinx和类似的搜索引擎允许您根据完整记录中关键字匹配的数量对您的记录进行排序(等等)

如果您的记录集很小,那么我认为您可以通过使用使用LIKE的复杂order by子句来进行相当简单的相关性搜索。