---
title: "スイッチSolrインデックス"
slug: "switch-solr-indexes"
abstract: "再構築後のSolrインデックスの切り替え方法を説明しています。"
---
# スイッチSolrインデックス

Solrを設定すれば、別のコアでインデックスを再構築し、再構築が現在使用されている検索インデックスに影響を与えないようにできます。再構築とインデックスの最適化が完了すると、Sitecoreは2つのコアを切り替え、再構築・最適化されたインデックスが使用されます。

SwitchOnRebuildSolrSearchIndexクラスはSolrSearchIndexクラスを継承し、特定のインデックスごとに2コアを維持する機能を追加します。これは本番環境でのみ重要なため、テスト中や本番環境に移行する前にSwitchOnRebuildSolrSearchIndex実装でカスタムインデックスを再構成できます。

インデックスを完全に再構築した後、Sitecoreは[SWAP](https://cwiki.apache.org/confluence/display/solr/CoreAdmin+API)リクエストをSolrに送信してプライマリコアとセカンダリコアを切り替えます。

Solrインデックスを複製し、別のコアでインデックスを再構築するためにSolrを設定するには:

1.  Solrサーバーから既存のitembucketsフォルダをコピーします。コピーを呼び出しitembuckets\_sec。
    
2.  新しいコアのitembuckets\_sec/core.propertiesファイルとセット名を更新してください:
    
    name=itembuckets\_sec
    
3.  Solrを再起動してください。
    
4.  2つのコアを確認してください。以下のURLにアクセスすることでできます(実際のセットアップに応じて変更してください):
    
    http://localhost:8983/solr/itembuckets/select/?q=\*:\*&version=2.2&start=0&rows=10&indent=on
    
    http://localhost:8983/solr/itembuckets\_sec/select/?q=\*:\*&version=2.2&start=0&rows=10&indent=on
    
    どちらも結果は0になるはずです(ただしXMLは見られます)。
    
5.  この実装を使用するには、特定の検索インデックスの型参照をSitecore.ContentSearch.SolrProvider.SwitchOnRebuildSolrSearchIndexに変更し、rebuildcoreパラメータを追加します。
    
    <indexes hint="list:AddIndex">
     <index id="content\_index"
     type="Sitecore.ContentSearch.SolrProvider.SwitchOnRebuildSolrSearchIndex,
     Sitecore.ContentSearch.SolrProvider">
     <param desc="name">$(id)</param>
     <param desc="core">itembuckets</param>
     <param desc="rebuildcore">itembuckets\_sec</param>
    ...
    

> !注設定ファイルを変更した後、ウェブサイトはプライマリコアのインデックスを使用します。完全なインデックス再構築を開始するたびに、Sitecoreはセカンダリコアでこれを行います。再構築後、セカンダリコアがプライマリコアになります。

## 各インデックスごとに別々のコア

複数のインデックスを同じコアを共有するように設定すると、完全なインデックス再構築を行うたびにセカンダリコアがすべてのインデックスのプライマリになります。

例えば、次のような構成があると仮定します:

<index id="sitecore\_web\_index" type="Sitecore.ContentSearch.SolrProvider.SwitchOnRebuildSolrSearchIndex, Sitecore.ContentSearch.SolrProvider">
 <param desc="name">$(id)</param>
 <param desc="core">itembucket</param>
 <param desc="rebuildcore">itembucket\_web\_rebuild</param>
...
<index id="sitecore\_master\_index" type="Sitecore.ContentSearch.SolrProvider.SolrSearchIndex, Sitecore.ContentSearch.SolrProvider">
 <param desc="name">$(id)</param>
 <param desc="core">itembucket</param>
 <param desc="propertyStore" ref="contentSearch/databasePropertyStore" param1="$(id)" />
...

インデックスの再構築が終わSitecoreると、両方のインデックスはitembucket\_web\_rebuildコアを使用します。たとえsitecore\_master\_indexインデックスのSwitchOnRebuild動作を指定していなくてもです。

このため、本番環境では各インデックスごとに別々のコアを設定するべきです。以下のような構成を使うことでこれを実現できます:

<index id="sitecore\_web\_index" type="Sitecore.ContentSearch.SolrProvider.SwitchOnRebuildSolrSearchIndex, Sitecore.ContentSearch.SolrProvider">
 <param desc="name">$(id)</param>
 <param desc="core">$(id)</param>
 <param desc="rebuildcore">$(id)\_rebuild</param>
...
<index id="sitecore\_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/databasePropertyStore" param1="$(id)" />
...

これにより、SwitchOnRebuildやキャッシュクリアに関わる不明瞭な動作を回避できます。

## Switch SolrCloudインデックス

> !注このセクションで説明する機能は、Sitecore 9、Update 2以降で利用可能です。

*SwitchOnRebuildSolrCloudSearchIndex*クラスを使ってSolrCloudでSolrインデックスを再構築・切り替えします。この実装ではコレクション名の代わりにSolrエイリアスを使用します。

SolrCloudを使用する場合、2つのインデックスの維持および切り替えの仕組みは異なります。*SwitchOnRebuildSolrCloudSearchIndex*クラスの実装ではコレクションエイリアスが使われています。検索や更新操作にはアクティブなエイリアスを、再構築操作にはリビルドエイリアスを使用します。再構築操作が完了すると、CREATEALIASコマンドはエイリアスが参照するコレクションを交換します。

構成はSolrで説明されているものに似ていますが、以下が異なります。

<index id="sitecore\_web\_index" type="Sitecore.ContentSearch.SolrProvider.SwitchOnRebuildSolrCloudSearchIndex, Sitecore.ContentSearch.SolrProvider">
 <param desc="mainalias">$(id)MainAlias</param>
 <param desc="rebuildalias">$(id)RebuildAlias</param>
 <param desc="collection">$(id)</param>
 <param desc="rebuildcollection">$(id)\_rebuild</param>
...
</index>

ここで

-   mainalias rebuildalias:それぞれアクティブエイリアスとリビルドエイリアスの名称で、Sitecoreインデックスで使用されます。
-   collection およびrebuildcollection:Sitecore索引の保存に使用されるSolrコレクションの名前。

ContentSearch.Solr.EnforceAliasCreation設定が真であれば、Sitecoreインスタンスがエイリアスを作成し、存在しない場合にコレクションにマッピングします。エイリアスは手動で作成することもできます。

SitecoreでSolrCloudを使用する際のガイドラインに従ってください:

-   SwitchOnRebuildSolrCloudSearchIndexインデックスタイプはアクティブインデックス更新戦略と組み合わせて使うだけです(インデックスには手動以外の少なくとも1つのインデックス更新戦略があります)。
    
-   特定の検索インデックスに対してSwitchOnRebuildSolrCloudSearchIndexインデックスタイプを使用できるのは1つのSitecoreインスタンスだけです。他のすべてのSitecoreインスタンスはSolrSearchIndex型を使用し、main aliasもcoreパラメータとして使用しなければなりません。
    
    <index id="sitecore\_web\_index" type="Sitecore.ContentSearch.SolrProvider.SolrSearchIndex, Sitecore.ContentSearch.SolrProvider">
     <param desc="core">$(id)MainAlias</param>
    
-   インデックスを担当するSitecoreインスタンスでは、InstanceName設定を使ってインスタンス名を設定する必要があります。
    
    例えば:
    
    <setting name="InstanceName" value="YOUR\_UNIQUE\_INSTANCE\_NAME" />
    
    これにより、新しい展開中にマシン名(Environment.MachineName)やサイト名(HostingEnvironment.SiteName)が変更された場合でも、アクティブなSolrコレクションの情報を失うのを防ぎます。
    
    それ以外のすべてのインスタンスは、メインエイリアスで検索インデックスを参照しており、これは変わりません。