【发布时间】:2014-05-26 18:00:56
【问题描述】:
我正在构建一个网络爬虫,它将爬取的结果收集到 MySQL 表中。
有五个主要列:URL, TITLE, DESCRIPTION, KEYWORDS, BODY。
目前我正在使用MySQL的FULLTEXT搜索功能如下:
SELECT URL,title, description, MATCH (description, keywords, title, URL) AGAINST ('$keyword' in boolean mode)
AS score FROM record
WHERE MATCH (description, keywords, title, URL) AGAINST ('$keyword' in boolean mode) order by score desc;";
但这并没有给我带来好的结果。考虑下图。
这里,Facebook 在搜索 "Facebook" 时排名第 23 位。(?)
我可以根据列名优先搜索吗?例如,我希望查询将最大优先级分配给URL,然后是description,然后是title,keywords.. 最后是body。
有什么建议吗?
【问题讨论】:
-
根据您需要的条件,您不会从查询中得到您想要的。您需要使用一些 php 处理查询结果以赋予它们优先级。
-
是的。你的观点是 100% 正确的。但是,如果我继续处理表中的每一条记录,系统就会变得非常慢。该表有数百万行。
-
你不会返回所有行然后处理...像你一样运行查询,然后处理。
-
@cale_b 是的.. 我没想到。那很有帮助。谢谢。
-
首先你需要考虑你的 MySQL 版本和存储引擎。您还需要研究用于全文搜索的 SQL 存储引擎的细微差别。一个很好的起点是:mysqlperformanceblog.com/2013/03/04/…。要真正在这方面取得任何进展,您至少需要了解 MyISAM 与 InnoDB for FTS。至于优先级,是的,你可以,但没有一种正确的方法可以做到这一点。这是一个学期的研究生课程(或两个。或五个)。简单的答案会有很多缺陷。
标签: php mysql search full-text-search