根据关键字出现对搜索结果进行排名
Posted
技术标签:
【中文标题】根据关键字出现对搜索结果进行排名【英文标题】:Ranking search results based on keyword appearance 【发布时间】:2011-11-30 00:53:13 【问题描述】:我需要能够在多个字段中搜索多个关键字,然后根据匹配的关键字数量以及关键字匹配的位置对结果进行排名(例如,与出现在 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 by
、having
和 order by
子句中使用别名。
【讨论】:
说创建表格时必须开启全文,有没有办法解决? NO 当然不是,你怎么能在没有全文索引的表上进行全文搜索。执行alter table add index ....
以添加全文索引。
抱歉,我可以在创建表后添加索引吗?
@MildFuzz,是的,没问题,alter table
可能需要很长时间才能在一张大桌子上完成,但您可以随时更改所有内容。
是的,您可以查询information_schema
数据库关于您的表。看到这个问题:***.com/questions/5213339/…以上是关于根据关键字出现对搜索结果进行排名的主要内容,如果未能解决你的问题,请参考以下文章