1. その他の開発タスク

Solr検索サービスが利用できるかどうかを調べる

Version:
日本語翻訳に関する免責事項

このページの翻訳はAIによって自動的に行われました。可能な限り正確な翻訳を心掛けていますが、原文と異なる表現や解釈が含まれる場合があります。正確で公式な情報については、必ず英語の原文をご参照ください。

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

たとえば、次のクエリは通常、at leat 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 
}  
この記事を改善するための提案がある場合は、 お知らせください!