Sitecore:为多站点设置 Solr 核心的最佳实践
Sitecore: Best practices for setting up Solr core for multisite
我知道我们可以在 Solr 中创建 N 个核心。但是我不清楚为 sitecore 多站点实施设置 Solr 核心的最佳实践。
设想:
我们在一个 sitecore 实例中有 5 个站点。每个网站都有搜索能力要求。
最佳实践问题:
各站点可以共享核心索引和主索引吗?
并且,为 Web 索引创建站点特定的核心?
我们是否需要设置配置文件或类似文件以建立站点与 solr 核心之间的关系?
3.1。我想,每个站点都需要有 sitecore solr 索引配置文件吗?
例如Sitecore.ContentSearch.Solr.SiteA.Index.Web(包含自定义索引名称的开箱即用索引文件的副本?)
- 我们是否需要编写任何智能(站点上下文)以便搜索将使用正确的 solr 核心?
这个问题的答案确实是基于意见的。没有一种解决方案在所有情况下都是理想的。
https://sitecorechat.slack.com
上什至有人对此进行了讨论。
首先您需要考虑是否要在站点之间重复使用任何内容。如果是,那么您可以使用开箱即用的 Sitecore 索引。您不会从单独的索引中得到那么多。当然你可以创建单独的索引,但有些内容必须多次爬取。
如果要创建单独的索引:
保持 sitecore_core_index
、sitecore_master_index
和 sitecore_web_index
不变 - Sitecore 将使用它们 运行 内容编辑器搜索和其他 Sitecore后台搜索。
为每个站点创建 Solr master
和 web
核心,例如site1_master_index
和 site1_web_index
.
对于每个站点,复制 sitecore_master_index
和 sitecore_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
个位置。
使用约定进行正确的索引搜索,例如:
ISearchIndex SearchIndex
{
get
{
return ContentSearchManager.GetIndex(Sitecore.Context.Site.Name + "_" + Sitecore.Context.Database.Name + "_index");
}
}
我知道我们可以在 Solr 中创建 N 个核心。但是我不清楚为 sitecore 多站点实施设置 Solr 核心的最佳实践。 设想: 我们在一个 sitecore 实例中有 5 个站点。每个网站都有搜索能力要求。
最佳实践问题:
各站点可以共享核心索引和主索引吗?
并且,为 Web 索引创建站点特定的核心?
我们是否需要设置配置文件或类似文件以建立站点与 solr 核心之间的关系?
3.1。我想,每个站点都需要有 sitecore solr 索引配置文件吗? 例如Sitecore.ContentSearch.Solr.SiteA.Index.Web(包含自定义索引名称的开箱即用索引文件的副本?)
- 我们是否需要编写任何智能(站点上下文)以便搜索将使用正确的 solr 核心?
这个问题的答案确实是基于意见的。没有一种解决方案在所有情况下都是理想的。
https://sitecorechat.slack.com
上什至有人对此进行了讨论。
首先您需要考虑是否要在站点之间重复使用任何内容。如果是,那么您可以使用开箱即用的 Sitecore 索引。您不会从单独的索引中得到那么多。当然你可以创建单独的索引,但有些内容必须多次爬取。
如果要创建单独的索引:
保持
sitecore_core_index
、sitecore_master_index
和sitecore_web_index
不变 - Sitecore 将使用它们 运行 内容编辑器搜索和其他 Sitecore后台搜索。为每个站点创建 Solr
master
和web
核心,例如site1_master_index
和site1_web_index
.对于每个站点,复制
sitecore_master_index
和sitecore_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
个位置。
使用约定进行正确的索引搜索,例如:
ISearchIndex SearchIndex { get { return ContentSearchManager.GetIndex(Sitecore.Context.Site.Name + "_" + Sitecore.Context.Database.Name + "_index"); } }