Php 基于关键字外观的搜索结果排名

Php 基于关键字外观的搜索结果排名,php,mysql,search,Php,Mysql,Search,我正在PHP/mySQL中创建一个搜索函数 我需要能够在多个字段中搜索多个关键字,然后根据匹配的关键字数量和关键字匹配的位置对结果进行排序(例如,与post_内容相比,post_标题中出现的关键字的排名应该更高,其他条件相同) 然后,在所有其他条件相同的情况下,我需要它返回到上升的发布日期 理想情况下,我可以在mySQL查询中执行此操作。我可以使用哪些方法?如果使用MyISAM,可以在文本字段上设置全文索引 有关如何操作,请参见此问题: 现在,您可以执行如下查询: SELECT MATCH

我正在PHP/mySQL中创建一个搜索函数

我需要能够在多个字段中搜索多个关键字,然后根据匹配的关键字数量和关键字匹配的位置对结果进行排序(例如,与post_内容相比,post_标题中出现的关键字的排名应该更高,其他条件相同)

然后,在所有其他条件相同的情况下,我需要它返回到上升的发布日期


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

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

有关如何操作,请参见此问题:

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

SELECT 
  MATCH(`data`) AGAINST('word1 word2 word3') AS relevance  
  , field1
  , field2
FROM table1
WHERE MATCH(`data`) AGAINST('word1 word2 word3')
ORDER BY relevance DESC
您可以重复select中的
匹配
子句,它将为您提供一个相关编号。

您需要在
where
子句中重述它。但幸运的是,您可以在
group by
having
order by
子句中使用别名。

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

有关如何操作,请参见此问题:

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

SELECT 
  MATCH(`data`) AGAINST('word1 word2 word3') AS relevance  
  , field1
  , field2
FROM table1
WHERE MATCH(`data`) AGAINST('word1 word2 word3')
ORDER BY relevance DESC
您可以重复select中的
匹配
子句,它将为您提供一个相关编号。


你需要在
where
子句中重申它。但幸运的是,你可以在
groupby
having
order by
子句中使用别名。

你使用全文索引吗?我不知道,我使用的是wordpress数据库可能不是,它将使用innodb表,而它们(现在)没有支持全文索引。那你就得写你的排名了。全文索引免费提供给你。我喜欢苹果的声音。你用的是全文索引吗?我不知道,我用的是wordpress数据库可能不是,它会用innodb表,而他们(现在)没有支持全文索引。那你就得写你的排名了。全文索引免费提供给你。我喜欢苹果的声音。它说在创建表时必须打开全文,有办法吗?没有当然没有,你怎么能对没有全文索引的表进行全文搜索。执行
alter table add index….
添加全文索引。对不起,这样我就可以在创建表后添加索引了?@MildFuzz,是的,没问题,在一个大表上完成
alter table
可能需要很长时间,但您可以随时更改所有内容。是的,您可以查询有关ta的
信息\u schema
数据库ble.看到这个问题了吗:它说在创建表时必须打开全文,有办法吗?当然没有,你怎么能在没有全文索引的表上进行全文搜索。执行
alter table add index…
来添加全文索引。对不起,这样我就可以在创建表后添加索引了?@MildFuzz,是的,没问题,
alter table
在一个大表上完成可能需要很长时间,但您可以随时更改所有内容。是的,您可以查询有关您的表的
信息\u schema
数据库。查看此问题: