我正在构建一个类似于Best Buy's和NewEgg's的“缩小搜索结果”功能。将用户的过滤器选择存储在可以共享/加入书签的URL中的最佳做法是什么?
显而易见的选择是简单地将所有用户的选择保留在查询字符串中。然而,这两个例子都在做一些更加神秘的事情:
百思买:
http://www.bestbuy.com/site/olstemplatemapper.jsp?id=pcat17080&type=page&qp=crootcategoryid%23%23-1%23%23-1~~q70726f63657373696e6774696d653a3e313930302d30312d3031~~cabcat0500000%23%230%23%2311a~~cabcat0502000%23%230%23%23o~~nf518||24363030202d2024383939&list=y&nrp=15&sc=abComputerSP&sp=%2Bcurrentprice+skuid&usc=abcat0500000
看起来他们正在为搜索分配一些独特的价值并暂时将其存储在他们身边。或者将他们的db id包装在一堆垃圾中,因为他们通过默默无闻地相信安全性?
保持这样简单有一些固有的缺点吗?
www.mydomain.com?color=blue&type=laptop
因此,当我选择一个17英寸的屏幕尺寸作为过滤器时,它只需重新加载页面,并添加了额外的查询字符串:
www.mydomain.com?color=blue&type=laptop&screen-size=17
另外,为了澄清,我可能会使用URL中数据库中的相应ID来更容易/更快地进行验证和解析,但问题仍然是我的简单方法中是否存在某些问题。
提前致谢!
答案 0 :(得分:2)
分面搜索领域的首批参与者之一是Endeca,许多larger online stores(PC连接,Home Depot,Walmart ......)仍在使用它们。您可能需要查看their website。 有一个Drupal plug-in for faceted search。查看demo。
我不认为URL组成很重要,但我认为以可读形式呈现参数可能很危险。使用“引导式搜索”的一个优点是,您可以通过不允许无效的参数组合来避免生成空结果集。如果查询字符串是用户可编辑的,则它们可以提出无效组合,从而绕过引导式搜索。
答案 1 :(得分:1)
我认为更人性化的方式,即www.mydomain.com?color=blue&type=laptop&screen-size=17是更好的方法。只需确保在进入数据库之前清理来自URL的所有内容。
答案 2 :(得分:0)
查询字符串具有非常可达的最大长度(255?),这可能是序列化的原因。