---
title: "Solr検索サービスが利用可能かどうかを確認しましょう"
slug: "find-out-if-the-solr-search-service-is-available"
abstract: "検索サービスが利用できない場合に空のSolr検索結果が発生するかどうかを判断する方法を示しています。"
---
# Solr検索サービスが利用可能かどうかを確認しましょう

クエリを実行したときにSolr検索サービスが利用できない場合、検索プロバイダーは空のコレクションに対してLINQクエリを実行したときに得られる結果と同様の結果を生成します。このトピックでは、検索サービスが利用できない場合に空の結果が発生するかどうかを判断する方法を示しています。

> !注Solr検索はXM CloudのUI内でのみ内部利用用であり、改変してはいけません。検索機能の作成には、[Sitecore Search](https://doc.sitecore.com/search/en/developers/search-developer-guide/getting-started-with-sitecore-search.html)などの検索ツールをご利用ください。XM Cloud環境でのSitecore Search統合についての詳細は [、「Sitecore Searchの統合](https://developers.sitecore.com/learn/accelerate/xm-cloud/implementation/sitecore-search/integrating-sitecore-search)」を参照してください。

例えば、次のクエリは通常、少なくとも1つの要素を持つ配列を返します:

var result = context.GetQueryable<SearchResultItem>()
.Where(it => it.Content == "sitecore").ToArray();

しかし、クエリを実行した際にSolrインスタンスが利用できない場合、クエリは空の配列を返します。同様のことが他のLINQメソッドでも起こります。例えば .First():

var result = context.GetQueryable<SearchResultItem>()
 .Where(it => it.Content == "sitecore").First();

通常、このクエリは検索クエリと一致する最初の要素を返します。しかし、クエリを実行したときにSolrインスタンスが利用できない場合、クエリはInvalidOperationException("Sequence contains no elements.") 例外を発生させます。これは空の結果が出た場合のFirst() メソッドの標準的な挙動です。

検索クエリが空の結果を生成する理由を区別する必要があることがあります。つまり、結果が本当に空なのか、それとも検索サービスが利用できないからなのか?

Solr検索サービスが利用できないかどうかを確認するには:

-   ThrowOnErrorExecutionContext実行コンテキストのインスタンスを次のクエリに渡します。
    
    var result = context.GetQueryable<SearchResultItem>(new ThrowOnErrorExecutionContext())
    .Where(it => it.Content == "sitecore").ToArray();
    

ThrowOnErrorExecutionContextコンテキストをクエリに適用すると、通常の条件下では前述の例と同様にLINQクエリが結果を返します。しかし、Solrインスタンスが利用できない場合、検索プロバイダーはSearchServiceUnavailableException例外を投げ出し、それをキャッチして処理できます。

var queryable = context.GetQueryable<SearchResultItem>(new ThrowOnErrorExecutionContext());
try
{
var result = queryable.Where(it => it.Content == "sitecore").ToArray();
}
catch (SearchServiceUnavailableException ex)
{
// Handle unavailable search service
}