インデクサーの停止

クローラー・サービスの停止で説明しているように、アクティブな各検索コレクションのクローラーとインデクサーを停止することは、通常は上位レベルの管理操作の一部として自動的に行われます。ただし、一部の管理操作では、その操作を実行するために、その前に検索コレクションを休止する必要があるため、このセクションで説明するように、検索コレクションのクローラーとインデクサーを手動で停止することが必要になる場合もあります。

注: コレクションのクローラーとインデクサーの両方を終了する必要がある場合は、インデクサーを終了する前にクローラーを終了する必要があります。こうすることで、当該コレクションで保留中の作業がある場合、クローラーが自動的にインデクサーを再始動することを防ぎます。

以下は、SOAP の search-collection-indexer-stop 関数を C# で手動で使用する例を示したものです。

    SearchCollectionIndexerStop stop = new SearchCollectionIndexerStop();
    stop.collection = COLLECTION;
    port.SearchCollectionIndexerStop(stop);

デフォルトでは、指定されたコレクションのインデクサーは、search-collection-indexer-stop 関数が呼び出されたときに、直ちに終了することはありません。これは、インデクサーがクローラーから受け取った照会または索引データをアクティブに処理している可能性があるためです。インデクサーが実際に終了してからアプリケーションが処理を行うようにすることが重要である場合は、インデクサー処理が終了するまでアプリケーションをスリープさせるための適切な値を指定して Thread.Sleep() 呼び出しを追加できます。

即時停止を強制する必要がある場合、以下の C# の例のように SearchCollectionIndexerStop オブジェクトの .kill = true フィールドを設定することによってデフォルトの動作がオーバーライドされ、インデクサーが即時に停止するようになります。

    SearchCollectionIndexerStop scistop = new SearchCollectionIndexerStop();
    scistop.collection = COLLECTION;
    scistop.kill = true;
    port.SearchCollectionIndexerStop(scistop);

インデクサーの強制終了によって、進行中の照会が失敗することがあり、そのコレクションの (インデクサーを開始する) クローラーが再始動すると、現在索引付け中の文書を再度索引付けしなければならないこともあるため、この強制終了は推奨されません。