【问题标题】:How to implement Solr into Sitecore如何在 Sitecore 中实施 Solr
【发布时间】:2012-08-21 09:34:56
【问题描述】:

我必须在 Sitecore 中实现 Solr 索引,我想知道最好的方法是什么?

我研究了以下方法:

  1. 捕获发布结束事件(或其他事件),然后将项目推送到 solr 索引
  2. 实现自定义数据库爬虫并从历史表中获取所有更改。然后使用自定义索引推送数据到 solr。

第二种方法听起来像是一种方法(在我看来)。在这种情况下,我需要创建新的搜索索引或搜索管理器吗?

如果有人以前做过,你能指出我正确的方向吗?另外,如果您可以发布一些有关 sitecore-solr 实施的文章的链接。

更新 好的,在阅读了 sitecore 文档之后,这就是我想出的:

  1. 创建自定义 SolrConfiguration 类,您可以在其中设置 solrserviceurl 等属性、添加索引及其定义(自定义 solr 索引)

  2. 创建 SolrIndex 并将其(在配置文件中)添加到您的 SolrConfiguration。哪个实例化,solrindex 应该订阅 Sitecore History Manager 的 AddEntry 事件,并与 solr 爬虫通信。

  3. 创建自定义处理器并挂钩到站点核心初始化管道。处理器应该初始化 SolrConfiguration(从第 1 步开始)

  4. 由于您的配置文件中的所有内容都将使用反射构建,因此您可以根据您的配置文件获取配置实例

听起来怎么样。请问有没有cmets?

【问题讨论】:

    标签: solr sitecore sitecore6


    【解决方案1】:

    我们已经在一些网站上这样做了,并且倾向于有一个新的“已发布”solr 索引和“未发布”索引

    我们打断:

    OnItemSaving

    将内容推送到未发布索引的事件(您可能不需要这个,这取决于您是否想要预览模式下的内容)

    OnPublishItemProcessed

    我们在这里处理对已发布索引的添加和更新,如果不深入研究代码,我不确定我们如何处理这里的删除,但肯定会处理 OnItemDelete 上的删除(如下所述)

    OnItemDelete

    我们在此处中断以从已发布和未发布的索引中删除内容(我认为我们在此处从已发布的索引中删除,因为 Sitecore 让您发布父节点以便将删除内容发布到 Web 数据库)

    希望对您有所帮助,如果可以的话,我会发布代码(但我会被骂)。

    【讨论】:

    • 嗨,我喜欢这种方法。建议说事件应该用于简单、快速的项目相关操作(如果我错了,请纠正我)。我知道如果您订阅事件并更新您的 solr 索引,它会正常工作,但这是否有任何性能问题?
    • 我们没有收到任何性能问题的报告,它已经实施了我们工作过的几个大型网站(内容很多)。
    • 我还没有详细研究过这个,但是这个github.com/jerrong/Sitecore-Item-Buckets 看起来确实非常非常有趣,可能值得你研究。 (啊,看起来它只是 Sitecore 6.5,但这对你来说可能还是有好处的?)
    【解决方案2】:

    除了已经发布的答案(我认为这是一种很好的做事方式)之外,我将分享我们是如何做到的。

    我们基本上只是看了一下 Sitecore 数据库爬虫,并决定像它的做法那样做一些事情。

    我们利用Custom Item Generator 的显着修改版本来促进强类型对象和具有与我们的 Solr 模式对应的属性的对象之间的映射。对于与 Solr 的实际通信,我们使用SolrNet

    一般的想法是我们递归地遍历所有项目(从站点根目录开始)并根据其模板将它们映射到适当的类型。然后我们对该项目进行索引过程(在我们的实现中,有些项目需要将多个文档索引到 Solr)。

    这种方法对我们来说非常有效,除了我要指出的是,因为我们同时为所有内容编制索引,它往往会在发布和反映对索引所做的任何更改的站点之间引入一点延迟时间。我们在开始时做出的一个疏忽,但很快就会修复,那就是我们没有“未发布”的索引(这意味着我们需要发布网站才能看到更新)。它实际上并没有对我们的解决方案产生太大影响,但我绝对可以看到其他人的解决方案,所以请记住这一点。

    我们并不是特别想从索引中删除项目,因此我们将索引作为发布:结束事件进行。

    我希望这些额外的见解对您有所帮助。据我所知,关于这种特定产品组合的信息并不多,但我可以告诉你,这绝对是可能的,而且非常有用。

    【讨论】:

    • 这也行得通(测试了这种方法),但听起来不对 - 必须将数据库爬虫添加到索引(这是一个 lucene 索引),这意味着您将不断更新 2索引...或在更新您的 solr 索引后取消作业,因此记录不会添加到您的 sitecore lucene 索引中?
    • Solr 实现独立于 Sitecore Lucene 索引运行。澄清一下,我们只是将数据库爬虫作为灵感(特别是收集项目以进行索引的方法)。我们并没有积极地将 Sitecore Lucene 索引用于任何事情。正如我之前所说,我们实际上只有一个索引(将来会添加第二个),并且通过配置我们告诉它索引 Web 数据库。
    • 您是否注意到任何性能问题?另外你是如何处理重建索引的?
    • 唯一的性能问题是我们发布时间和索引更新时间之间的延迟时间(可能会通过将历史引擎引入索引过程来解决这个问题)。重建索引(目前)通过以下方式完成: 1. 删除当前索引 2. 索引所有项目 3. 将索引添加提交到 Solr。
    • 你如何为所有项目编制索引(第 2 步)。你有一个自定义机制来做到这一点吗?我检查并重建索引没有触发爬虫上的 AddItem(或 DeleteItem)?
    猜你喜欢
    • 2017-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多