Azure Searchクエリで1000件を超えるドキュメントがヒットするとArgumentNullExceptionエラーがスローされる


解説

Azure Searchエンジンには、部分的な検索応答の継続と呼ばれる機能があります。この機能により、ヒットしたドキュメントの数が制限(ドキュメント1000件)を超えた場合でも、クエリに一致するすべてのドキュメントを読み取ることができます。しかし、Azure Searchプロバイダーが、継続要求のURLに余分なスラッシュ(「/」)を追加することにより、Azure Searchサービスが404 Not Foundステータス コードを返し、エラーが発生して検索結果が空になる場合があります。この問題が発生した場合、次のメッセージがログに記録されます。

Exception: System.ArgumentNullException
Message: Value cannot be null.
Parameter name: s
Source: mscorlib
   at System.IO.StringReader..ctor(String s)
   at Newtonsoft.Json.Linq.JObject.Parse(String json, JsonLoadSettings settings)
   at Sitecore.ContentSearch.Azure.Http.SearchResultsDeserializer.Deserialize(String textResults)
   at Sitecore.ContentSearch.Azure.Query.SearchResultIterator.LoadNextPage(SearchRequest& nextPageRequest)
   at Sitecore.ContentSearch.Azure.Query.SearchResultIterator.MoveNext()
   at Sitecore.ContentSearch.Azure.Query.SearchResultIterator.<GetEnumerator>d__9.MoveNext()
   at Sitecore.ContentSearch.Azure.Query.CloudSearchResults`1.<GetSearchHits>d__15.MoveNext()
   at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()

解決策

この問題を解決するには、次のいずれかの方法をお試しください。

Sitecore XP 9.3の場合、KB1001879で入手可能な対応する累積的なHotfixをダウンロードしてインストールします。

または、Solr検索プロバイダーに切り替えます。