我是SOLR的新用户。我正在开发一个拥有SQL数据库的电子商务Web应用程序。我想在应用程序中为我的“类别页面”实施SOLR,我们将使用特定信息(如可用库存,价格和更多详细信息)显示该类别的产品。此外,我们希望根据库存情况限制产品展示,如果没有库存,那么我们就不会展示这些产品。
我正在尝试使用Delta导入查询来实现SOLR,以使我的类别页面更快。我关心的是从SOLR获取数据时的页面性能以及Stock和Price等实时数据的准确性。
实际上我的数据库查询获取产品数据有点复杂并且有几个连接,所以我必须在SOLR数据库中创建几个相关的实体。因此,由于此数据上传到SOLR很慢。这使得上传数据很困难(即使使用增量导入查询),因此我的应用程序缺少像产品库存这样的实时数据。
基本上我想知道实施SOLR的最佳实践方法。我很困惑 1.我应该将所有数据导出到SOLR,然后从SOLR获取所有详细信息吗? (我担心性能和实时数据) 2.我应该只从SOLR获得索引数据(比如产品的id),然后从我的SQL数据库中获取其他详细信息? (不确定这种方法的性能)。
所以请帮助我并建议我如何以最佳方式为我的应用程序实施SOLR。
所有帮助都是有意义的!!
答案 0 :(得分:1)
您可以设置数据库触发器或数据访问层事件,以便在发生更改时将数据发送到Solr,并配置autoCommit以控制新鲜度。
另见:
答案 1 :(得分: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.8 gb,我记得)
希望这种类型的实现对您有用。