バッチインデックス
このページの翻訳はAIによって自動的に行われました。可能な限り正確な翻訳を心掛けていますが、原文と異なる表現や解釈が含まれる場合があります。正確で公式な情報については、必ず英語の原文をご参照ください。
xConnectはバッチがxConnectに提出されるたびにストレージ層の同期トークンを増分します。クライアントのSyncTokenプロパティが検索時に設定されている場合、インデックスがその数に追いついた場合にのみ結果が返されます。
!重要検索結果が返される際にすべてのバッチがインデックス化されている保証は、クライアントインスタンスにローカルで行われます。並列スレッドでxConnectにデータを提出すると、クライアントAがクライアントBより先に検索結果を返すことがあります。
最新の同期トークンはバッチの結果とともにクライアントに返されます:
await client.SubmitAsync();
var searchSynchronizationToken = client.SyncToken;
!注デバイスプロファイルには変更追跡が有効になっていません。
10,000件の連絡先を5バッチ送信した場合、インデックス作業者が5回目のバッチまでの変更をインデックス化した時点で、その10,000件の連絡先のインデックス作成は完了します。このバッチは特定の同期トークンで表されます。50,000件の連絡先のインデックス作成が完了したことを確認するために:
- 5回のバッチを提出してください。
- 最終バッチで返される SyncToken への参照を保存します。例えば、List Managerはリスト定義項目に同期トークンを保存します。
- インデックスが完了しているかどうかを確認するコードで、 SyncToken プロパティを保存トークンに設定します。
- このクライアントを使ってダミーサーチを実行してください。インデックス作成が提供された同期トークンに追いついた場合にのみ結果が返されます。
何を検索しても、インデックスが指定された数以上に達するまで結果は返されません。 SyncTokenがnullであれば、結果は即座に返されます。クライアントは特定の同期トークンにインデックスが追いつくのを待つ必要がありません。
シナリオ
次のシナリオでは、xConnectクライアントAが多数の連絡先を追加し、ListSubscriptionsファセットを設定して新しいリストに登録します。別のページでは 、xConnectクライアントBが連絡先検索を使ってそのリスト内のすべての連絡先を返しています。しかし、クライアントBのSyncTokenプロパティが設定されていないため、インデックスが完了する前に結果が返され、結果カウントが正確でなくなります。

インデックス作成が完了したときにだけ結果が返されるようにするために、返された返SyncTokenをクライアントAに保存してください。例えば、リストIDのSQLテーブルと、そのリストに追加される最新の連絡先の同期トークンを管理できます。
ジョブID
サブスクリプションリスト ID
シンクトークン
1
A256FE54-9915-4779-AFE1-511B74795DDE
6e26FE54-9915-4779-afe1-511b74795dde
検索を行う前に、SyncTokenプロパティを示された保存値に設定してください。インデックス作成が完了するまで結果は返されません。
using Sitecore.XConnect; using Sitecore.XConnect.Client; using Sitecore.XConnect.Collection.Model; using System; using System.Linq;
namespace Documentation { public class ChangeTracking { // Async example public async void ExampleAsync() { using (XConnectClient client = Sitecore.XConnect.Client.Configuration.SitecoreXConnectClientConfiguration.GetClient()) { // Manually set sync token client.SyncToken = Guid.Parse("6e26fe54-9915-4779-afe1-511b74795dde").ToByteArray();
try { var listId = Guid.Parse("a256fe54-9915-4779-afe1-511b74795dde"); var query = client.Contacts.Where(c => c.ListSubscriptions().Subscriptions.Any(s => s.ListDefinitionId == listId));
// Will only return results when indexing is complete var results = await query.GetBatchEnumerator(); } catch (XdbExecutionException ex) { // Handle exception or timeout } } }
// Sync Example public void ExampleSync() { using (XConnectClient client = Sitecore.XConnect.Client.Configuration.SitecoreXConnectClientConfiguration.GetClient()) { // Manually set sync token client.SyncToken = Guid.Parse("6e26fe54-9915-4779-afe1-511b74795dde").ToByteArray();
try { var listId = Guid.Parse("a256fe54-9915-4779-afe1-511b74795dde"); var query = client.Contacts.Where(c => c.ListSubscriptions().Subscriptions.Any(s => s.ListDefinitionId == listId));
// Will only return results when indexing is complete var results = query.GetBatchEnumeratorSync(); } catch (XdbExecutionException ex) { // Handle exception or timeout } } } } }