【问题标题】:Paging: Storing Search Results分页:存储搜索结果
【发布时间】:2009-11-06 19:50:07
【问题描述】:

处理返回搜索结果的网页的正确方法是什么?

即第一次返回查询可能包含与用户单击第 2 页并再次运行查询时不同的结果。

大多数人如何处理这种情况?通常我使用的是内部 ASP.Net 应用程序(安全/带宽不是很重要的问题),所以我会将结果存储在 ViewState 中,并在回发时处理与查询数据库相反的数据。

外部 WWW 使用的正确方法是什么?我最好的猜测是将结果存储在一个临时数据库表中(不是字面上的临时表;我猜“登台”可能更准确),但我认为该表会因插入/删除/等而受到很大的打击,而且我认为您需要一个清理表格的过程,这似乎不是一个非常优雅的解决方案。

我在附近吗?

【问题讨论】:

    标签: search paging


    【解决方案1】:

    大多数应用程序不处理它......他们认为结果不会发生足够的变化以保证某种缓存机制。但是,如果您使用的是高度实时的数据(例如 Twitter 结果),您的分页链接很可能看起来像这样:

    ?q=your+query&olderthan={last result shown}&limit=10

    ...其中{last result shown} 是当前页面上最后一个结果的ID。此 ID 将用于让您查询早于指定 ID 的结果:SELECT * FROM table WHERE id < {last result shown}。

    【讨论】:

    • 我已经看过很多次了,它是一个有效的解决方案,但如果您想要或需要使用 POST 与 GET,它将无法工作。这也需要在您的应用程序中处理安全性 - 否则 sombody 可以将 URL 更改为 limit = 200000 - 如果您正在显示产品列表,比如说 - 您可以让您的服务器受到重击并冻结浏览器:-)
    • 这个方法可以很好地处理 POST 请求。只需将其滑入<input type="hidden" name="olderthan" value="0" />。关于限制限制......我认为这是不言而喻的;)
    • 我喜欢 'olderthan' 的概念。可以根据您允许的内容验证查询字符串,或者可以将值存储在视图状态中
    【解决方案2】:

    虽然它可能会占用大量内存,但您也可以考虑将搜索结果存储到会话中并在会话中分页,而不是每次都运行查询。

    【讨论】:

      【解决方案3】:

      会议怎么样?这是特定于会话的临时数据,那么为什么不使用会话呢?

      我已经很久没有做过asp了(从.NET时代之前:-)),但是在PHP或rails中,您可以将会话用于任何临时存储。您可以使用本地文件系统(在服务器上)或数据库作为会话存储。有很多方法可以优化,所以我不会担心数据库被锤击,除非你有成千上万的用户。此外,DB 旨在处理数以千计的插入和删除 - 任何主要的 DB - SQL 服务器、MySQL、PostgreSQL 都不应该有任何问题。

      【讨论】:

        猜你喜欢
        • 2011-01-17
        • 2012-07-31
        • 2014-03-26
        • 2017-02-24
        • 2018-02-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多