Sitecore:为多站点设置 Solr 核心的最佳实践

Sitecore: Best practices for setting up Solr core for multisite

我知道我们可以在 Solr 中创建 N 个核心。但是我不清楚为 sitecore 多站点实施设置 Solr 核心的最佳实践。 设想: 我们在一个 sitecore 实例中有 5 个站点。每个网站都有搜索能力要求。

最佳实践问题:

  1. 各站点可以共享核心索引和主索引吗?

  2. 并且,为 Web 索引创建站点特定的核心?

  3. 我们是否需要设置配置文件或类似文件以建立站点与 solr 核心之间的关系?

3.1。我想,每个站点都需要有 sitecore solr 索引配置文件吗? 例如Sitecore.ContentSearch.Solr.SiteA.Index.Web(包含自定义索引名称的开箱即用索引文件的副本?)

  1. 我们是否需要编写任何智能(站点上下文)以便搜索将使用正确的 solr 核心?

这个问题的答案确实是基于意见的。没有一种解决方案在所有情况下都是理想的。

https://sitecorechat.slack.com 上什至有人对此进行了讨论。

首先您需要考虑是否要在站点之间重复使用任何内容。如果是,那么您可以使用开箱即用的 Sitecore 索引。您不会从单独的索引中得到那么多。当然你可以创建单独的索引,但有些内容必须多次爬取。

如果要创建单独的索引:

  1. 保持 sitecore_core_indexsitecore_master_indexsitecore_web_index 不变 - Sitecore 将使用它们 运行 内容编辑器搜索和其他 Sitecore后台搜索。

  2. 为每个站点创建 Solr masterweb 核心,例如site1_master_indexsite1_web_index.

  3. 对于每个站点,复制 sitecore_master_indexsitecore_web_index 的配置并设置内容根目录的正确位置。

    例如创建 Sitecore.ContentSearch.Solr.Index.Master.config 文件 (Site1.ContentSearch.Solr.Index.Master.config) 的副本,并将其内容更改为:

<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/">
  <sitecore>
    <contentSearch>
      <configuration type="Sitecore.ContentSearch.ContentSearchConfiguration, Sitecore.ContentSearch">
        <indexes hint="list:AddIndex">
          <index id="site1_master_index" type="Sitecore.ContentSearch.SolrProvider.SolrSearchIndex, Sitecore.ContentSearch.SolrProvider">
            <param desc="name">$(id)</param>
            <param desc="core">$(id)</param>
            <param desc="propertyStore" ref="contentSearch/indexConfigurations/databasePropertyStore" param1="$(id)" />
            <configuration ref="contentSearch/indexConfigurations/defaultSolrIndexConfiguration" />
            <strategies hint="list:AddStrategy">
              <strategy ref="contentSearch/indexConfigurations/indexUpdateStrategies/syncMaster" />
            </strategies>
            <locations hint="list:AddCrawler">
              <content type="Sitecore.ContentSearch.SitecoreItemCrawler, Sitecore.ContentSearch">
                <Database>master</Database>
                <Root>/sitecore/content/site1</Root>
              </content>
              <media type="Sitecore.ContentSearch.SitecoreItemCrawler, Sitecore.ContentSearch">
                <Database>master</Database>
                <Root>/sitecore/media library/site1</Root>
              </media>
            </locations>
          </index>
        </indexes>
      </configuration>
    </contentSearch>
  </sitecore>
</configuration>

此配置告诉 Sitecore 仅索引此索引中的 /sitecore/content/site1/sitecore/media library/site1 个位置。

  1. 使用约定进行正确的索引搜索,例如:

    ISearchIndex SearchIndex
    {
        get
        {
            return ContentSearchManager.GetIndex(Sitecore.Context.Site.Name + "_" + Sitecore.Context.Database.Name + "_index");
        }
    }