【发布时间】:2011-09-09 17:16:48
【问题描述】:
好的,所以我正在尝试在多个列中进行全文搜索,就像这样简单:
SELECT * FROM pages WHERE MATCH(head, body) AGAINST('some words' IN BOOLEAN MODE)
现在我想按相关性排序,(找到多少个单词?)我已经能够用这样的东西来做:
SELECT * , MATCH (head, body) AGAINST ('some words' IN BOOLEAN MODE) AS relevance
FROM pages
WHERE MATCH (head, body) AGAINST ('some words' IN BOOLEAN MODE)
ORDER BY relevance
现在是我迷路的部分,我想优先考虑head 列中的相关性。
我想我可以创建两个相关性列,一个用于head,一个用于body,但那时我会在表格中进行三次相同的搜索,以及我正在制作的内容这个函数,性能很重要,因为查询将被连接并与其他表匹配。
那么,我的主要问题是,是否有更快的方法来搜索相关性并确定某些列的优先级? (作为奖励,甚至可能使相关性计数单词在列中出现的次数?)
任何建议或意见都会很棒。
注意:我将在 LAMP 服务器上运行它。 (本地测试中的 WAMP)
【问题讨论】:
-
您真的必须在 WHERE 子句中的 SELECT 子句 和 中都添加 MATCH...AGAINST 吗?不能在 SELECT 子句中给它取别名,在 WHERE 子句中引用别名吗?我正在尝试使用准备好的语句,这对我来说似乎是多余的/奇怪的。
-
不,正如 MySQL 文档自 5.5 以来所述,MATCH ... AGAINST 将在 SELECT 和 WHERE 中计算一次,因此没有额外的开销。