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

Luceneでインデックス用の2つのディレクトリを維持することができます。これにより、インデックスディレクトリが完全なインデックス再構築前にリセット(削除)される問題が解決されます。これは本番環境でのみ問題となるため、テスト中や本番環境に移行する前にSwitchOnRebuildLuceneIndexクラスを使ってカスタムインデックスを再構成できます。

SwitchOnRebuildLuceneIndexクラスはLuceneIndexクラスから継承しています。特定のインデックスごとに2つのディレクトリを維持する機能を追加します。

SwitchOnRebuildLuceneIndexオブジェクトを初期化すると、セカンダリフォルダの存在を検証します。そのフォルダが存在しない場合は、そのフォルダを作成します。ベースラインディレクトリの名前に \_secを付け加え、作成するフォルダ名として使います。

インデックスはIndexReader.LastModified(Directory) メソッドを用いて、最後の修正日に基づいてプライマリディレクトリを選択します。最新のディレクトリをプライマリディレクトリとして使用します。

[インデックスプロパティストア](https://doc.sitecore.com/xp/ja/developers/91/platform-administration-and-architecture/the-index-property-store.html "The index property store")には、どのディレクトリがプライマリでどちらがセカンダリであるかの情報が含まれています。

SwitchOnRebuildLuceneIndexオブジェクトは、CrawlingLogオブジェクトが初期化される際に以下のエントリを書き込みます。

“Resolving directories from index meta data store”
"Resolving directories by last time modified"
"Primary directory last modified = '…'"
"Secondary directory last modified = '…'"
“ReadUpdateDirectory is set to …”
“FullRebuildDirectory is set to '{0}'”

インデックスの完全な再構築が完了すると、プライマリとセカンダリーのディレクトリが入れ替わります。

Luceneをインデックス用に2つのディレクトリを維持するために設定する方法:

-   特定の検索インデックスの型参照をSitecore.ContentSearch.LuceneProvider.SwitchOnRebuildLuceneIndexに変更します:
    
    <indexes hint="list:AddIndex">
     <index id="content\_index"
     type="Sitecore.ContentSearch.LuceneProvider.SwitchOnRebuildLuceneIndex,
     Sitecore.ContentSearch.LuceneProvider">
     <param desc="name">$(id)</param>
     <param desc="folder">$(id)</param>
    ...
    

> !注設定ファイルをSwitchOnRebuildLuceneIndexメソッドで検索インデックスに調整した後、ウェブサイトはプライマリディレクトリのインデックスを使用します。完全なインデックスリビルドを行うたびに、このリビルドはセカンダリディレクトリで行われます。リビルド後はセカンダリディレクトリがプライマリディレクトリになります。