动态搜索,生成搜索结果链接(反向路由)

时间:2011-05-12 10:51:54

标签: sql search seo

只是拉扯我的cms并试图简化一些常见的任务,比如搜索。 cms有许多不同的模块,每个模块都可以用动态路由掩盖。

整个系统非常可靠且非常灵活,但这是搜索结果页面令人头疼的地方。

为了保持灵活性,我将基本数据投入到我的搜索类中,如下所示:

$search->addTable('content', array('title', 'excerpt', 'body', 'meta_keywords', 'meta_description'));
$search->addTable('event', array('title', 'description', 'tags'));

然后,我的搜索类从这些变量生成一个 sql查询,这将很好地找到结果(呃,也许'很好'现在不是最好的单词,因为结果集包含来自不同表的行,所以我无法分辨哪一行属于哪个表,因为所有结果都在一个数组中)

问题是,当我想显示结果页面时,我需要为每个结果制作合适的URL,这是非常困难的,因为我上面提到的系统灵活性(任何内容/模块都可以用任何东西掩盖)。

我理解我的问题是非常本地化的,可能太模糊,无法以当前的形式回答它,所以我会尝试澄清我的问题。我没有问你关于我的问题的最佳实践或简单的答案,但如果你能提供一些关于这些基本问题的好建议,我将非常感激:

  • 看起来生成单个查询不是最好的方法,因为我无法分辨哪一行属于哪个表(不同的表可能意味着不同的url制作方法)。另一种方法是分别查询每个表并将结果存储在多维数组中(键的表名)。在foreach循环中查询sql的AFAIK不是一种可接受的方法。是否可以在单个查询中标记每个结果行以反映其表名?
  • 如果我不为这些结果制作真实的(蒙面的,路由的)网址,那会不会影响我的搜索引擎优化,但我会显示非常基本的网址,例如(example.com/content/nice-url-slug)。谷歌可能因为重复而惩罚我的网站 - 这对我来说不合适。

一如既往,请不要点击关闭,也许我可以更多地澄清一下情景。谢谢你,fabrik。

1 个答案:

答案 0 :(得分:1)

简短的回答是,只要我们不说几十个查询就可以完成多个查询。这也意味着返回的结果将是一组集合,其结构类似于上面的数组,表名是该表中一组结果的关键。

我必须指出代码中某个地方有一个点可以组装该数组。组装完成后,您可以遍历它并查询每个表格一次。在该循环中,您拥有所需的所有上下文:表名。

然后将该数组数组返回到将其组合到结果中的客户端。如果表名足以构建URL,那么你就可以了。如果您需要有关每个表的更多信息,例如其ID列的名称,请构造结果数组以包含有关每个表的所需元数据。

总的来说,看起来你的结构很好,并且正试图避免多次查询。别担心。多个查询的问题是在循环中反复查询相同的 *表*时,这是普遍的设计模式然后是性能槽。