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

Php MySQL搜索结果-按相关性排序,php,mysql,codeigniter,Php,Mysql,Codeigniter,我正在尝试编码一个基本搜索引擎的相关功能,它搜索网站的数据库。让我们以Yelp为例。 (直接链接到页面) 问题1 他们如何确定“最佳匹配”?我猜他们至少搜索一次包含关键字的所有条目,然后根据关键字在标题/标签/描述中出现的次数进行排序 问题2 对于按“最高评分”和“最受评论”排序,他们搜索包含关键字的所有条目,然后分别按平均评分和评论数排序 问题3 我将CodeIgniter与MySQL和活动记录一起使用。假设我的表“products”包含“id、name、categories、tags、des

我正在尝试编码一个基本搜索引擎的相关功能,它搜索网站的数据库。让我们以Yelp为例。 (直接链接到页面

问题1 他们如何确定“最佳匹配”?我猜他们至少搜索一次包含关键字的所有条目,然后根据关键字在标题/标签/描述中出现的次数进行排序

问题2 对于按“最高评分”和“最受评论”排序,他们搜索包含关键字的所有条目,然后分别按平均评分和评论数排序

问题3 我将CodeIgniter与MySQL和活动记录一起使用。假设我的表“products”包含“id、name、categories、tags、description”列

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

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

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


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

谢谢,我想我会在网站发展时(希望如此!)研究sphinx之类的东西。如果我使用LIKE,我如何确定3列中某个特定关键字的发生次数?我不认为你能找到发生次数,但更像是如果它存在或不存在,看看这个,这应该能让你大致了解它是如何工作的