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

标签 sql search seo

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

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

为了保持灵 active ,我将基本数据扔到我的搜索类中,如下所示:

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

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

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

我知道我的问题非常本地化,可能过于模糊,无法以目前的形式回答,所以我会尝试稍微澄清一下我的问题。我不会问你关于我的问题的最佳实践或简单答案,但如果你能为我提供一些关于这些基本问题的好提示,我将非常感激:

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

一如既往,请询问而不是单击“关闭”,也许我可以更清楚地说明情况。谢谢你,fabrik。

最佳答案

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

我必须弄清楚代码中某个地方组装了该数组。组装后,您可以遍历它并只查询每个表一次。在该循环中,您拥有所需的所有上下文:表名。

然后您将该数组的数组返回给任何将其组装成结果的客户端。如果表名足以构建 URL,您就可以开始了。如果您需要有关每个表的更多信息,例如其 ID 列的名称,请构造结果数组以包含有关每个表的所需元数据。

总的来说,看起来您的结构很好,并且在尝试避免多次查询时遇到了麻烦。别担心。多个查询的问题在于,当在循环中反复查询相同 *表*时,当这是普遍的设计模式时,性能就会下降。

关于sql - 动态搜索,产生搜索结果链接(反向路由),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5976904/

相关文章:

php - 使用搜索功能动态删除 Div 元素而无需重新加载页面

seo - 有什么方法可以更改由谷歌索引结果创建的代码段吗?

MySQL > 查找具有相同兴趣的用户

php - MySql 选择结果合并了来自同一个表和其他表的多个查询

PHP 从外部数据库中选择非常慢

php - 关于 URL 结构的建议 : Forced to have a question mark in the URL

angular - 使用外部 API 调用更新 angular universal 中的元标记

sql - 如何获取配置单元中仅具有 NULL 值的所有列的列表?

c - 如何搜索、查找和打印用户给出的单词的索引?

search - Neo4j 作为搜索引擎