【问题标题】:Product list page in webapp: use database queries or search engine?webapp中的产品列表页面:使用数据库查询还是搜索引擎?
【发布时间】:2011-04-08 14:53:58
【问题描述】:

我正在寻找设计可扩展 Web 应用程序(使用 Rails)的最佳实践,其中产品列在具有搜索标题和描述、选择类别和排序等功能的页面上。

我看到两个选项:

  1. 仅在用户搜索关键字时使用搜索引擎(Solr、IndexTank),其他所有内容都查询数据库。
  2. 对所有内容都使用搜索引擎:默认列表(没有任何用户操作的列表)、显示类别、排序和 obv。搜索。

还有两个子选项:

  1. 从搜索引擎中检索 id,然后查询 db(或缓存?)以获取数据
  2. 在搜索引擎中存储显示产品所需的所有数据并在搜索时检索所有相关数据

你怎么看?提前谢谢..

【问题讨论】:

  • 确实没有足够的信息来给出建议。对于非常公开且可抓取的网站,仅使用谷歌自定义搜索通常会比您实施的更好。
  • 我不同意 Kalendae。这些是常见的设计问题,我在下面的回答中对此进行了扩展。

标签: ruby-on-rails database-design web-applications solr search-engine


【解决方案1】:

(请注意,我在这里的回答将根据我使用 Solr 的经验来确定……)

对于您的第一组问题:我建议您通过搜索引擎进行尽可能多的搜索。 Solr 可以很好地处理所有类别过滤和分面。您可能希望与基于关键字的搜索、分面等结合使用的任何页面都可以完全通过 Solr。

在 Solr 中,按字段值排序的通配符查询不一定是最有效的查询类型(它会在查询时对所有匹配记录进行排序,然后丢弃除第一页以外的所有记录),但也不应如此糟糕的。密切关注初始结果页面,如有必要,直接从 SQL 或缓存中提供更有趣的内容,以便将真正的搜索留给 Solr。

请记住,如果没有进行任何搜索,这种特殊情况并不是真正的“搜索结果”页面,而是“空白”页面。相应地进行设计。

对于后一组问题,两者都是常见且有效的模式,至少在 Solr 中是这样,并且归结为客户端实现。例如,当您调用其搜索对象的results 方法时,Solr 的 Sunspot ruby​​ 客户端将延迟加载相关的 ActiveRecord 对象。这在使用成熟的 ActiveRecord 对象渲染视图时非常方便。

不过,Sunspot 还提供对 Solr 返回的原始存储值的访问,因此如果您的毫秒数不足,您可以节省访问数据库的时间。

玩得开心!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-25
    • 1970-01-01
    • 1970-01-01
    • 2012-08-04
    • 1970-01-01
    • 2017-07-23
    相关资源
    最近更新 更多