复杂的搜索解决方法

时间:2010-12-07 18:29:22

标签: php mysql search complexity-theory

在此之前,这不一定是一个问题..但我真的想知道你对这种“模式”搜索的表现和可能出现的问题的看法。

我需要在多个表上创建一个非常复杂的搜索,其中包含大量过滤器,范围和规则 ......我意识到我可以创建这样的内容:

  1. 提交搜索表单
  2. 在内部我逐步运行每个过滤器和逻辑(这可能需要几秒钟)
  3. 在找到所有匹配的记录(我想要的结果)后,我在searches表上创建了一条记录,生成了此搜索的标记(基于搜索参数),如 86f7e437faa5 并保存所有匹配的记录ID
  4. 将访问者重定向到类似mysite.com/search?token=86f7e437faa5的页面
  5. 而且,在结果页面上,我只需要发现我正在谈论的搜索内容并分页结果ID(从searches表中检索)。

    这将进行刷新&分页更快因为我不需要在每个网页浏览上运行所有搜索逻辑。如果用户更改过滤器或搜索条件,我将返回步骤2并生成新的搜索令牌。

    我从来没有看到过关于这方面的教程或其他内容,但我认为像BBForum或Invision这样的论坛会对搜索做些什么,对吧?在搜索之后,我将重定向到像search.php?id = 1231(我没有在URL或POST args内部看到搜索参数)。

    这个“令牌”的持续时间不会超过30分钟~1小时。所以“静态搜索”只是出于性能原因。

    您如何看待这个?它会工作吗?有什么考虑? :)

4 个答案:

答案 0 :(得分:2)

您的系统可能有特殊标记,如86f7e437faa5和缓存搜索请求。它是系统效率和可扩展性的一种非常有用的机制。

但是用户必须根据可用性原则查看所有参数。

因此,在服务器端动态生成参数哈希将是一个很好的解决方案。系统检查在搜索表中存在生成的哈希,如果找到则返回结果。 如果没有散列,系统会从基表进行查询并将新结果保存到搜索表中。

答案 1 :(得分:1)

对我来说似乎足够合乎逻辑。

话虽如此,鉴于您对应用程序的描述,您是否考虑过使用Sphinx。无论表和/或过滤器和/或规则的数量如何,所有耗时的工作都在索引中,并且在场景之前/之后完成。过滤/规则/字段/表格都是在事后快速完成的。

因此,与您的情况类似,Sphinx可以非常快速地为您提供您的ID,因为所有的辛苦工作都已预先完成。

答案 2 :(得分:0)

TiuTalk,

您是否考虑将搜索保存在“搜索”表中?如果是这样,请记住,基于param的生成令牌对于给定的参数集将保持不变,并且持续时间。如果经常更改您的搜索库,则不能依赖已保存的搜索,因为它可能会返回过期结果。否则,它似乎是一个很好的解决方案。

我宁愿将令牌基于用户会话。你觉得怎么样?

@ g0nc1n

答案 3 :(得分:0)

如果您控制服务器(例如在VPS中),Sphinx似乎是一个不错的解决方案。

如果您不这样做并且简单的全文搜索对您来说还不够,我想这是一个很好的解决方案。 但对于我而言,与使用缓存的分页搜索相比,它似乎并没有那么不同。它似乎比使用简单url引用缓存的分页搜索更好。但是你仍然有搜索保持静态的问题。我建议你不时刷新保存的搜索。