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