根据关键字出现对搜索结果进行排名

Posted

技术标签:

【中文标题】根据关键字出现对搜索结果进行排名【英文标题】:Ranking search results based on keyword appearance 【发布时间】:2011-11-30 00:53:13 【问题描述】:

我正在 php/mysql 中创建搜索功能。

我需要能够在多个字段中搜索多个关键字,然后根据匹配的关键字数量以及关键字匹配的位置对结果进行排名(例如,与出现在 post_title 中的关键字相比,它应该排名更高) post_content,所有其他条件都相同。

然后我需要它回退到升序发布日期,所有其他条件都相同。

理想情况下,我可以在 mySQL 查询中执行此操作。我可以使用哪些方法?

【问题讨论】:

你在使用全文索引吗? 我不知道,我用的是wordpress数据库 可能不会,它会使用 innodb 表,然后它们不(还)支持全文索引。那么,您必须编写排名内容。全文索引“免费”为您提供。 我喜欢他们苹果的声音。 【参考方案1】:

如果您使用 MyISAM,您可以在文本字段上设置全文索引。

请参阅此问题以获取操作方法:Keyword search using PHP MySql?

现在您可以执行如下查询:

SELECT 
  MATCH(`data`) AGAINST('word1 word2 word3') AS relevance  
  , field1
  , field2
FROM table1
WHERE MATCH(`data`) AGAINST('word1 word2 word3')
ORDER BY relevance DESC

您可以在您的选择中重复 MATCH AGAINST 子句,它会给您一个相关编号。 您需要在 where 子句中重新声明它。但幸运的是,您可以在 group byhavingorder by 子句中使用别名。

【讨论】:

说创建表格时必须开启全文,有没有办法解决? NO 当然不是,你怎么能在没有全文索引的表上进行全文搜索。执行alter table add index .... 以添加全文索引。 抱歉,我可以在创建表后添加索引吗? @MildFuzz,是的,没问题,alter table 可能需要很长时间才能在一张大桌子上完成,但您可以随时更改所有内容。 是的,您可以查询information_schema 数据库关于您的表。看到这个问题:***.com/questions/5213339/…

以上是关于根据关键字出现对搜索结果进行排名的主要内容,如果未能解决你的问题,请参考以下文章

搜索排名/相关性算法

Algolia:如何根据值对搜索进行排名?

了解搜索引擎的工作原理是什么

SQL查询结果加入排序值的问题

算法倍增算法 - 后缀数组

如何经由搜索引擎优化关键词排名做到首页