【问题标题】:what is the best practice to implement SOLR in Ecom applications?在 Ecom 应用程序中实施 SOLR 的最佳实践是什么?
【发布时间】:2011-08-28 12:46:46
【问题描述】:

我是 SOLR 的新用户。我正在开发一个具有 SQL 数据库的电子商务 Web 应用程序。我想在应用程序中为我的“类别页面”实现 SOLR,我们将在其中显示该类别的产品以及可用库存、价格和更多详细信息等特定信息。此外,我们希望根据库存情况限制产品展示,如果没有库存,我们将不会展示这些产品。

我正在尝试使用 Delta 导入查询来实现 SOLR,以使我的类别页面更快。我担心的是从 SOLR 获取数据时页面的性能以及实时数据(如股票和价格)的准确性。

实际上我获取产品数据的数据库查询有点复杂并且有多个连接,所以我必须在 SOLR 数据库中创建几个相关实体。所以由于这个数据上传到 SOLR 很慢。这使得频繁上传数据(即使使用增量导入查询)变得困难,因此我的应用程序缺少产品库存等实时数据。

基本上我想知道实现 SOLR 的最佳实践方法。我很困惑 1. 我应该将我的所有数据导出到 SOLR,然后从 SOLR 获取所有详细信息吗? (我担心性能和实时数据) 2. 我应该只从 SOLR 获取索引数据(比如产品 ID),然后从我的 SQL 数据库获取其他详细信息吗? (不确定这种方法的性能)。

所以请帮助我并建议我如何以最佳方式为我的应用实现 SOLR。

感谢所有帮助!

【问题讨论】:

    标签: solr solrnet


    【解决方案1】:

    我在开发电子商务解决方案和作为搜索提供程序的 SOLR 时遇到的一个很好的案例实践是仅从 SOLR 检索 ID 并从 SQL 服务器获取数据。

    我创建了一个模式,每次在数据库中添加一些新产品时都会更新。(在我的情况下,产品是由用户在管理控制台中添加的,在你的情况下,您可以使用 @Mauricio Scheffer 评论最新更新)

    架构中的一个字段是 ID - 代表数据库中产品的 ID。 在查询 SOLR 后,我收到了 N 个适合查询的文档,并且通过 ID 字段,我从数据库中获取了所有信息并将其显示给用户。

    所以好的部分是用户将始终从您的数据库中获取数据(实时数据),并且由于 SOLR,他的搜索结果会非常快速地显示。

    您可以向架构中添加可用于过滤结果的不同字段,例如

    • 类别
    • 日期
    • 价格
    • 尺寸
    • 等等……

    还有您需要查询的不同字段:

    • 标题
    • 说明
    • 姓名
    • 等等……

    并且还要添加产品 ID。

    所以在对 SOLR 进行查询后,您有一个产品 ID 列表,现在您唯一需要做的就是实现一个函数,该函数将根据 ID 从数据库中获取产品并将其显示在搜索结果页面上.

    这种方法性能非常好,因为基于主键从数据库元素中选择是从 sql 中检索数据的最快方法。

    我在一个拥有 1.000.000 种产品的网站上工作,搜索时间始终低于 0.2 秒 单用户查询时,浏览器中的页面加载时间低于 0.6 秒。 (我记得运行 SOLR 和 SQL 的服务器是 8Gb 内存和四核 1.8GB)

    希望这种类型的实现对您有用。

    【讨论】:

    • 此解决方案(本身)不会产生实时数据,正如您所声称的,您仍然对可能已过时的 Solr 运行查询。关系数据库中的数据。
    • 是的,请再次阅读第二段。此外,在向 solr 提交数据时,我正在更新自上次提交以来修改的所有数据(更新、删除、添加)
    • “实时”在这种情况下意味着 Solr 中的数据新鲜度,我看不出你在哪里解决了这个问题。
    • 我创建了一个单一的模式,它每次都更新一些新产品被添加到数据库中...为什么你认为数据在如果我每次将产品添加到 SQL 数据库时都更新它,SOLR 就不新鲜??? (不是我更新的架构,而是使用该架构的 SOLR 核心的索引......也许这是误解)
    • 我错过了那部分,我的错!抱歉,糟糕的一天。
    【解决方案2】:

    您可以设置数据库触发器或数据访问层事件,以便在发生更改时向 Solr 发送数据,并配置 autoCommit 以控制新鲜度。

    另见:

    【讨论】:

    • 感谢 Mauricio,我会检查这些链接。但我不能对我的数据库架构或数据进行任何更改。所以不管是什么都要处理。产品详细信息也分为几个表,所以我必须在不同的表上创建许多触发器。我认为这将再次成为数据库的性能因素。
    • @K24:抱歉,我指的是 Solr 架构,而不是数据库架构。即使您的关系数据库中有联接,您也必须在填充 Solr 索引时展平数据。
    猜你喜欢
    • 2011-08-22
    • 1970-01-01
    • 2010-11-10
    • 2011-09-19
    • 2011-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-14
    相关资源
    最近更新 更多