搜索多种内容类型

时间:2012-08-16 19:14:23

标签: php mysql performance wordpress

这是我一直在努力解决的一个问题的概括。我的情况是我有一个WordPress网站有多个“帖子类型”(例如文章,博客帖子,产品等)。如今常见的做法,我想在不同的类别中显示每种帖子类型的搜索结果。

我遇到的问题是构建搜索。我应该为每种帖子类型运行单独的数据库查询,还是应该运行一个大查询并通过PHP将所有内容分开?我倾向于倾向于后者,但我遇到的问题是分页。我可能不必在查询上设置任何LIMIT,因为如果我有一个帖子类型的多个匹配项,搜索将不会返回其他帖子类型的任何结果。

因此,从性能和一般最佳实践的角度来看,如果没有LIMIT子句的情况下有一个大查询,或者为每次搜索运行多个查询,会更好吗?

注意:这类似于我在WordPress Stack Exchange网站上问过的a question。我接受了多重查询解决方案,但我仍然不确定这一点。

2 个答案:

答案 0 :(得分:1)

根据我的经验,通常最好让数据库尽可能少地完成工作,让PHP完成大部分工作。它通常更快。

所以,我会尝试做两个非常简单的查询(每个表一个),然后用PHP代码合并/排序它们。

如果您的数据集非常大,或者您的网站主机是垃圾,那么您的PHP脚本可能会耗尽内存...然后,只有这样,开始以正确的方式寻找它是个好主意在MySQL中做(我怀疑临时表可能是正确的地方)。

但如果你遇到PHP的性能限制,那么我怀疑你在MySQL中所做的任何事情实际上会更慢,你必须改变你的数据库结构才能获得良好的性能。一种方法是保留现有的表结构,但是第三个表包含来自所有表的重复数据 - 仅用于搜索,以及一些代码以保持所有内容同步。

例如,我们有一个表格,其中包含网站用户上传的每个pdf文档,我们还有另一个表格,其中包含任何文档中的每个单词,以及多对多链接在这些之间的表。

每当上传新的pdf时,我们会找到其中的每个单词,并将记录插入到链接表中。这样我们就不必实际搜索PDF文档,我们只搜索已经过结构化的索引表,以便快速搜索。

答案 1 :(得分:0)

对于此类型的搜索,我会开始使用Solr之类的解决方案进行索引编制。您可以使用此类解决方案执行大量操作,并且它们可以很好地匹配以通用方式搜索的用户类型。