在此之前,这不一定是一个问题..但我真的想知道你对这种“模式”搜索的表现和可能出现的问题的看法。
我需要在多个表上创建一个非常复杂的搜索,其中包含大量过滤器,范围和规则 ......我意识到我可以创建这样的内容:
searches
表上创建了一条记录,生成了此搜索的标记(基于搜索参数),如 86f7e437faa5 并保存所有匹配的记录ID 而且,在结果页面上,我只需要发现我正在谈论的搜索内容并分页结果ID(从searches
表中检索)。
这将进行刷新&分页更快因为我不需要在每个网页浏览上运行所有搜索逻辑。如果用户更改过滤器或搜索条件,我将返回步骤2并生成新的搜索令牌。
我从来没有看到过关于这方面的教程或其他内容,但我认为像BBForum或Invision这样的论坛会对搜索做些什么,对吧?在搜索之后,我将重定向到像search.php?id = 1231(我没有在URL或POST args内部看到搜索参数)。
这个“令牌”的持续时间不会超过30分钟~1小时。所以“静态搜索”只是出于性能原因。
您如何看待这个?它会工作吗?有什么考虑? :)
答案 0 :(得分:2)
您的系统可能有特殊标记,如86f7e437faa5和缓存搜索请求。它是系统效率和可扩展性的一种非常有用的机制。
但是用户必须根据可用性原则查看所有参数。
因此,在服务器端动态生成参数哈希将是一个很好的解决方案。系统检查在搜索表中存在生成的哈希,如果找到则返回结果。 如果没有散列,系统会从基表进行查询并将新结果保存到搜索表中。
答案 1 :(得分:1)
对我来说似乎足够合乎逻辑。
话虽如此,鉴于您对应用程序的描述,您是否考虑过使用Sphinx。无论表和/或过滤器和/或规则的数量如何,所有耗时的工作都在索引中,并且在场景之前/之后完成。过滤/规则/字段/表格都是在事后快速完成的。
因此,与您的情况类似,Sphinx可以非常快速地为您提供您的ID,因为所有的辛苦工作都已预先完成。
答案 2 :(得分:0)
TiuTalk,
您是否考虑将搜索保存在“搜索”表中?如果是这样,请记住,基于param的生成令牌对于给定的参数集将保持不变,并且持续时间。如果经常更改您的搜索库,则不能依赖已保存的搜索,因为它可能会返回过期结果。否则,它似乎是一个很好的解决方案。
我宁愿将令牌基于用户会话。你觉得怎么样?
@ g0nc1n
答案 3 :(得分:0)
如果您控制服务器(例如在VPS中),Sphinx似乎是一个不错的解决方案。
如果您不这样做并且简单的全文搜索对您来说还不够,我想这是一个很好的解决方案。 但对于我而言,与使用缓存的分页搜索相比,它似乎并没有那么不同。它似乎比使用简单url引用缓存的分页搜索更好。但是你仍然有搜索保持静态的问题。我建议你不时刷新保存的搜索。