Solr インデックスの切り替え

概要

再構築後に Solr インデックスを切り替える方法について説明します。

あるインデックスの再構築を行っても、現在使用中の検索インデックスが影響を受けることのないように、core ごとにインデックスを再構築するように Solr を設定できます。インデックスの再構築と最適化が完了すると、Sitecore は 2 つの core を切り替え、再構築および最適化されたインデックスが使用されます。

SwitchOnRebuildSolrSearchIndex クラスは SolrSearchIndex クラスから継承され、特定のインデックスに対して 2 つの core を維持する機能を追加します。この機能は本番環境のみで重要となるため、テスト中、および本番環境に移行する前は、SwitchOnRebuildSolrSearchIndex 実装によってカスタム インデックスを再設定できます。

注記

Sitecore 9.0 Update 2 以降では、SolrCloud インデックスの切り替えもサポートされます。

インデックスが完全に再構築されると、Sitecore は Solr へ SWAP 要求を送信することで、プライマリ core とセカンダリ core を切り替えます。

重複する Solr インデックスを作成し、core ごとにインデックスを再構築するように Solr を設定するには:

  1. Solr サーバーから既存の itembuckets フォルダーをコピーし、コピーの itembuckets_sec を呼び出します。

  2. itembuckets_sec/core.properties ファイルを更新し、新しい core の名前を設定します。

    name=itembuckets_sec

  3. Solr を再起動します。

  4. 2 つの core を確認します。これには、次の 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>
    ...
    

注記

設定ファイルの変更後は、プライマリ core のインデックスが Web サイトで使用されます。インデックスの完全な再構築を開始すると、再構築は常にセカンダリ core で実行されます。再構築後、セカンダリ core がプライマリ core になります。

複数のインデックスが同一の core を共有するように設定している場合、インデックスの完全な再構築を行うたびに、セカンダリ core がすべてのインデックスに対するプライマリ core になります。

たとえば、次のように設定しているとします。

<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 core を使用します。これは、sitecore_master_index インデックスに対して SwitchOnRebuild を指定していない場合であっても同じです。

このため、本番環境では、インデックスごとに個別の core を設定する必要があります。これには、次のような設定を使用します。

<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 とキャッシュ クリアに伴う不確実な動作が生じることを回避できます。

注記

このセクションで説明する機能は、Sitecore 9、Update 2 以降で使用できます。

SwitchOnRebuildSolrSearchIndex クラスは、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 を true に設定している場合、Sitecore インスタンスはエイリアスを作成し (まだ作成されていない場合)、これらのエイリアスをコレクションにマップします。エイリアスを手動で作成することもできます。

SolrCloud を使用するように Sitecore を設定する場合は、次のガイドラインに従います。

  • アクティブなインデックス更新戦略と組み合わせる場合は (インデックスに手動以外のインデックス更新戦略が 1 つ以上存在する)、SwitchOnRebuildSolrCloudSearchIndex インデックス タイプのみを使用します。

  • 特定の検索インデックスに対しては、1 つの Sitecore インスタンスのみが SwitchOnRebuildSolrCloudSearchIndex インデックス タイプを使用できます。他のすべての Sitecore インスタンスは SolrSearchIndex タイプを使用する必要があり、core パラメーターとして main alias を使用します。

    <index id="sitecore_web_index" type="Sitecore.ContentSearch.SolrProvider.SolrSearchIndex, Sitecore.ContentSearch.SolrProvider">
      <param desc="core">$(id)MainAlias</param>