1. 検索に関する研究

Searchインタラクション

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

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

このトピックでは、インタラクション(行動検索とも呼ばれる)クエリの方法を示します。各例では、client.GetBatchEnumerator() / client.GetBatchEnumeratorSync() 手法を使って 結果をページ付けします。

!注xConnect検索のサポート方法一覧 を参照してください。

インタラクションIDによるSearchはサポートされていません。インタラクションIDが分かっている場合は、コレクションデータベースからインタラクションを取得してください。

以下の例は、接触IDによる相互作用の検索方法を示しています。

!注このクエリは結合を必要としません。

using System; using System.Collections.Generic; using System.Linq; using Sitecore.XConnect; using Sitecore.XConnect.Client;

namespace Documentation { public class SearchInteractionByContactId { // Async example public async void ExampleAsync() { using (Sitecore.XConnect.Client.XConnectClient client = Sitecore.XConnect.Client.Configuration.SitecoreXConnectClientConfiguration.GetClient()) { try { var contactID = Guid.NewGuid(); // Replace with real contact ID

IAsyncQueryable queryable = client.Interactions .Where(x => x.Contact.Id == contactID);

var enumerator = await queryable.GetBatchEnumerator(20);

while (await enumerator.MoveNext()) { var interactionBatch = enumerator.Current; // Batch of <= 20 } } catch (XdbExecutionException ex) { // Handle exception } } }

// Sync example public void ExampleSync() { using (Sitecore.XConnect.Client.XConnectClient client = Sitecore.XConnect.Client.Configuration.SitecoreXConnectClientConfiguration.GetClient()) { try { var contactID = Guid.NewGuid(); // Replace with real contact ID

IAsyncQueryable queryable = client.Interactions .Where(x => x.Contact.Id == contactID);

var enumerator = queryable.GetBatchEnumeratorSync(20);

while (enumerator.MoveNext()) { var interactionBatch = enumerator.Current; // Batch of <= 20 } } catch (XdbExecutionException ex) { // Handle exception } } } } }

以下の例は、指定された定義IDを持つ少なくとも1つのイベントを持つ相互作用の検索方法を示しています。

using System; using System.Collections.Generic; using System.Linq; using Sitecore.XConnect; using Sitecore.XConnect.Client;

namespace Documentation { public class SearchInteractionByEventDefinition { public async void Example() { using (Sitecore.XConnect.Client.XConnectClient client = Sitecore.XConnect.Client.Configuration.SitecoreXConnectClientConfiguration.GetClient()) { try { var someGoalId = Guid.Parse("0565e9b0-936c-4594-8cc3-5fcace3918ed"); // Replace with real goal ID

IAsyncQueryable<Sitecore.XConnect.Interaction> queryable = client.Interactions .Where(x => x.Events.Any(y => y.DefinitionId == someGoalId));

var enumerable = await queryable.GetBatchEnumerator(20);

while (await enumerable.MoveNext()) { var interactionBatch = enumerable.Current; // Batch of <= 20 interactions

foreach (var interaction in interactionBatch) { var matchingGoals = interaction.Events.OfType().Where(x => x.DefinitionId == someGoalId).ToList(); } }

} catch (XdbExecutionException ex) { // Handle exception } }

}

public void ExampleSync() { using (Sitecore.XConnect.Client.XConnectClient client = Sitecore.XConnect.Client.Configuration.SitecoreXConnectClientConfiguration.GetClient()) { try { var someGoalId = Guid.Parse("0565e9b0-936c-4594-8cc3-5fcace3918ed"); // Replace with real goal ID

IAsyncQueryable<Sitecore.XConnect.Interaction> queryable = client.Interactions .Where(x => x.Events.Any(y => y.DefinitionId == someGoalId));

var enumerable = queryable.GetBatchEnumeratorSync(20);

while (enumerable.MoveNext()) { var interactionBatch = enumerable.Current; // Batch of <= 20 interactions

foreach (var interaction in interactionBatch) { var matchingGoals = interaction.Events.OfType().Where(x => x.DefinitionId == someGoalId).ToList(); } }

} catch (XdbExecutionException ex) { // Handle exception } } } } }

!注一部のイベントモデルは固定定義IDを持ち、IDへの参照をハードコーディングする代わりにEventDefinitionIdプロパティを使います。例えば、ページビューイベントを検索するには、PageViewEvent.EventDefinitionIdプロパティを使います。

以下の例は、イベントタイプで検索する方法を示しています。例えば、GoalまたはOutcomeのすべてのイベントです。

using System.Collections.Generic; using System.Linq; using Sitecore.XConnect; using Sitecore.XConnect.Client;

namespace Documentation { public class SearchInteractionByEventType { public async void Example() { using (Sitecore.XConnect.Client.XConnectClient client = Sitecore.XConnect.Client.Configuration.SitecoreXConnectClientConfiguration.GetClient()) { try { IAsyncQueryable<Sitecore.XConnect.Interaction> queryable = client.Interactions .Where(x => x.Events.OfType().Any());

var enumerable = await queryable.GetBatchEnumerator(20);

while (await enumerable.MoveNext()) { var interactionBatch = enumerable.Current; // Batch of <= 20 interactions

foreach (var interaction in interactionBatch) { var matchingGoals = interaction.Events.OfType(); } } } catch (XdbExecutionException ex) { // Handle exception } } }

public void ExampleSync() { using (Sitecore.XConnect.Client.XConnectClient client = Sitecore.XConnect.Client.Configuration.SitecoreXConnectClientConfiguration.GetClient()) { try { IAsyncQueryable<Sitecore.XConnect.Interaction> queryable = client.Interactions .Where(x => x.Events.OfType().Any());

var enumerable = queryable.GetBatchEnumeratorSync(20);

while (enumerable.MoveNext()) { var interactionBatch = enumerable.Current; // Batch of <= 20 interactions

foreach (var interaction in interactionBatch) { var matchingGoals = interaction.Events.OfType(); } } } catch (XdbExecutionException ex) { // Handle exception } } } } }

以下の例は、結果などの事象の性質を使って相互作用を探す方法を示しています。

using System; using System.Collections.Generic; using System.Linq; using Sitecore.XConnect; using Sitecore.XConnect.Client;

namespace Documentation { public class SearchInteractionByEventTypeProperty { public async void Example() { using (Sitecore.XConnect.Client.XConnectClient client = Sitecore.XConnect.Client.Configuration.SitecoreXConnectClientConfiguration.GetClient()) { try { IAsyncQueryable<Sitecore.XConnect.Interaction> queryable = client.Interactions .Where(x => x.Events.OfType().Any(f => f.MonetaryValue > 100.00m && f.CurrencyCode == "DKK"));

var enumerable = await queryable.GetBatchEnumerator(20);

while (await enumerable.MoveNext()) { var interactionBatch = enumerable.Current; // Batch of <= 20 interactions

foreach (var interaction in interactionBatch) { var matchingOutcomes = interaction.Events.OfType(); } }

} catch (XdbExecutionException ex) { // Handle exception } } }

public void ExampleSync() { using (Sitecore.XConnect.Client.XConnectClient client = Sitecore.XConnect.Client.Configuration.SitecoreXConnectClientConfiguration.GetClient()) { try { IAsyncQueryable<Sitecore.XConnect.Interaction> queryable = client.Interactions .Where(x => x.Events.OfType().Any(f => f.MonetaryValue > 100.00m && f.CurrencyCode == "DKK"));

var enumerable = queryable.GetBatchEnumeratorSync(20);

while (enumerable.MoveNext()) { var interactionBatch = enumerable.Current; // Batch of <= 20 interactions

foreach (var interaction in interactionBatch) { var matchingOutcomes = interaction.Events.OfType(); } }

} catch (XdbExecutionException ex) { // Handle exception } } } } }

以下のクエリは、10日未満の0565e9b0-936c-4594-8cc3-5fcace3918edChannelIdとのやり取りをすべて返します。

using System; using System.Collections.Generic; using System.Linq; using Sitecore.XConnect; using Sitecore.XConnect.Client;

namespace Documentation { public class SearchInteractionProperty { // Async example public async void ExampleAsync() { using (Sitecore.XConnect.Client.XConnectClient client = Sitecore.XConnect.Client.Configuration.SitecoreXConnectClientConfiguration.GetClient()) { try { var someChannelId = Guid.Parse("0565e9b0-936c-4594-8cc3-5fcace3918ed");

IAsyncQueryable<Sitecore.XConnect.Interaction> queryable = client.Interactions .Where(x => x.ChannelId == someChannelId && x.StartDateTime > DateTime.UtcNow.AddDays(-10));

var enumerable = await queryable.GetBatchEnumerator(10);

while (await enumerable.MoveNext()) { IReadOnlyCollection currentBatch = enumerable.Current; } } catch (XdbExecutionException ex) { // Handle exception } } }

// Sync example public void ExampleSync() { using (Sitecore.XConnect.Client.XConnectClient client = Sitecore.XConnect.Client.Configuration.SitecoreXConnectClientConfiguration.GetClient()) { try { var someChannelId = Guid.Parse("0565e9b0-936c-4594-8cc3-5fcace3918ed");

IAsyncQueryable<Sitecore.XConnect.Interaction> queryable = client.Interactions .Where(x => x.ChannelId == someChannelId && x.StartDateTime > DateTime.UtcNow.AddDays(-10));

var enumerable = queryable.GetBatchEnumeratorSync(10);

while (enumerable.MoveNext()) { IReadOnlyCollection currentBatch = enumerable.Current; } } catch (XdbExecutionException ex) { // Handle exception } } } } }

Search by interaction facets

以下の例は、IpInfoやWebVisitなどの相互作用ファスティットで検索する方法を示しています。

!注 .GetFacet メソッドや、利用可能な場合は .WebVisit() のような拡張メソッドを使うことができます。

using Sitecore.XConnect.Collection.Model; using System.Collections.Generic; using System.Linq; using Sitecore.XConnect; using Sitecore.XConnect.Client;

namespace Documentation { public class SearchInteractionFacet { public async void ExampleAsync() { using (Sitecore.XConnect.Client.XConnectClient client = Sitecore.XConnect.Client.Configuration.SitecoreXConnectClientConfiguration.GetClient()) { try { IAsyncQueryable<Sitecore.XConnect.Interaction> queryable = client.Interactions .Where(x => x.GetFacet(CollectionModel.FacetKeys.WebVisit).Browser.BrowserMajorName == "Chrome" && x.IpInfo().Country == "Denmark");

var enumerable = await queryable.GetBatchEnumerator(20);

while (await enumerable.MoveNext()) { var interactionsBatch = enumerable.Current; // Batch of 20 interactions }

} catch (XdbExecutionException ex) { // Handle exception } } }

public void ExampleSync() { using (Sitecore.XConnect.Client.XConnectClient client = Sitecore.XConnect.Client.Configuration.SitecoreXConnectClientConfiguration.GetClient()) { try { IAsyncQueryable<Sitecore.XConnect.Interaction> queryable = client.Interactions .Where(x => x.GetFacet(CollectionModel.FacetKeys.WebVisit).Browser.BrowserMajorName == "Chrome" && x.IpInfo().Country == "Denmark");

var enumerable = queryable.GetBatchEnumeratorSync(20);

while (enumerable.MoveNext()) { var interactionsBatch = enumerable.Current; // Batch of 20 interactions }

} catch (XdbExecutionException ex) { // Handle exception } } } } }

結果とページ付け

クエリの結果を返す推奨方法は、.GetBatchEnumerator() または .GetBatchEnumeratorSync() 拡張メソッドです。詳細は ページングの概要 をご覧ください。

!重要各メソッドごとに、単一バッチの最大サイズはSitecore.XConnect.SearchExtensions.DefaultBatchSizeにハードコードされており、1000に設定されています。この値は現在設定できません。

同期

方法

注記

awaitclient.GetBatchEnumerator()

結果のページ付けの推奨方法。

awaitclient.ToSearchResults()

Skip()やTake()と組み合わせてバッチサイズを制御できます。総結果のカウントを返します。

awaitclient.ToList()

Skip()およびTake()と共に使用できます。連絡先一覧を返します。

同期

方法

注記

client.GetBatchEnumeratorSync()

結果のページ付けの推奨方法。

awaitclient.AsEnumerable()

Skip()とTake()で使用可能です。返すIEnumerable。

以下の例は、各メソッドを使って結果を返す方法を示しています:

using Sitecore.XConnect.Collection.Model; using System.Collections.Generic; using System.Linq; using Sitecore.XConnect; using Sitecore.XConnect.Client;

namespace Documentation { public class SearchResultsInteractions { // Async example public async void ExampleAsync() { using (Sitecore.XConnect.Client.XConnectClient client = Sitecore.XConnect.Client.Configuration.SitecoreXConnectClientConfiguration.GetClient()) { try { IAsyncQueryable<Sitecore.XConnect.Interaction> queryable = client.Interactions.Where(c => c.GetFacet<Sitecore.XConnect.Collection.Model.PersonalInformation>(CollectionModel.FacetKeys.PersonalInformation).FirstName == "Myrtle");

// Option #1 - .ToSearchResults() SearchResults<Sitecore.XConnect.Interaction> resultsOne = await queryable.ToSearchResults();

var totalResults = resultsOne.Count; // Total results var interactions = resultsOne.Results.Select(x => x.Item); // Interactions var something = resultsOne.Results.Select(x => x.Score); // Scores

// Option #2 - .ToSearchResults() with Skip()/Take() SearchResults<Sitecore.XConnect.Interaction> resultsTwo = await queryable.Skip(10).Take(20).ToSearchResults();

var totalResultsTwo = resultsTwo.Count; // Total results var interactionsTwo = resultsTwo.Results.Select(x => x.Item); // Interactions - will be 20 var scoresTwo = resultsTwo.Results.Select(x => x.Score); // Scores

// Option #3 - .GetBatchEnumerator() var resultsThree = await queryable.GetBatchEnumerator(10); var totalResultsThree = resultsThree.TotalCount; // Count

while (await resultsThree.MoveNext()) { var interactionsThree = resultsThree.Current; // Interactions }

// Option #4 - .ToList() var resultsFour = await queryable.ToList();

var interactionsFour = resultsFour; // Interactions

// Option #5 - .ToList() with Skip()/Take() var resultsFive = await queryable.Skip(10).Take(20).ToList();

var interactionsFive = resultsFive; // Interactions } catch (XdbExecutionException ex) { // Handle exception } } }

// Sync example public void ExampleSync() { using (Sitecore.XConnect.Client.XConnectClient client = Sitecore.XConnect.Client.Configuration.SitecoreXConnectClientConfiguration.GetClient()) { try { IAsyncQueryable queryable = client.Interactions.Where(c => c.GetFacet<Sitecore.XConnect.Collection.Model.PersonalInformation>(CollectionModel.FacetKeys.PersonalInformation).FirstName == "Myrtle");

// Option #1 // .ToSearchResults() not available as sync extension

// Option #2 // .ToSearchResults() not available as sync extension

// Option #3 - .GetBatchEnumerator() var resultsThree = queryable.GetBatchEnumeratorSync(10); var totalResultsThree = resultsThree.TotalCount; // Count

while (resultsThree.MoveNext()) { var interactionsThree = resultsThree.Current; // Interactions }

// Option #4 - Can be used with :code:`Skip()` and :code:`Take()` var resultsFour = queryable.AsEnumerable();

var interactionsFour = resultsFour; // Interactions

// Option #5 - .ToEnumerable() with Skip()/Take() var resultsFive = queryable.Skip(10).Take(20).AsEnumerable();

var interactionsFive = resultsFive; // Interactions } catch (XdbExecutionException ex) { // Handle exception } } } } }

順番結果

相互作用の面や性質によって結果を順序付けることができます。以下の例は相互作用の順序付け方法を示しています。 StartDateTime

IAsyncQueryable<Sitecore.XConnect.Interaction> queryable = client.Interactions .OrderByDescending(x => x.StartDateTime)

!注リストの性質で順序付けることはできません。例えば、相互作用をそのイベントのStartDateTime特性で順序付けすることはできません。

オプションを展開

.WithExpandOptions()メソッドを使って、各インタラクションでどのインタラクション面と接触面を返すべきかを指定します。これらの展開オプションは、IDでインタラクションを取得する際に使うものと同じです。展開オプションを指定しなければ、ファセットは返されません。

以下の例は、各インタラクションでWebVisitを返す方法と、もし利用可能な場合の接触PersonalInformation面を返す方法を示しています。

using Sitecore.XConnect.Collection.Model; using System.Collections.Generic; using System.Linq; using Sitecore.XConnect; using Sitecore.XConnect.Client;

namespace Documentation { public class SearchInteractionExpandOptions { public async void ExampleAsync() { using (Sitecore.XConnect.Client.XConnectClient client = Sitecore.XConnect.Client.Configuration.SitecoreXConnectClientConfiguration.GetClient()) { try { IAsyncQueryable<Sitecore.XConnect.Interaction> queryable = client.Interactions .Where(x => x.GetFacet(CollectionModel.FacetKeys.WebVisit).Browser.BrowserMajorName == "Chrome") .WithExpandOptions(new InteractionExpandOptions(CollectionModel.FacetKeys.WebVisit) { Contact = new RelatedContactExpandOptions(PersonalInformation.DefaultFacetKey) });

var enumerable = await queryable.GetBatchEnumerator(20);

while (await enumerable.MoveNext()) { var currentBatch = enumerable.Current;

foreach (var interaction in currentBatch) { var contact = interaction.Contact as Contact; // Cast IEntityReference to Contact var personalInfo = contact.Personal();

var interactionFacet = interaction.WebVisit(); } }

} catch (XdbExecutionException ex) { // Handle exception } } }

public void ExampleSync() { using (Sitecore.XConnect.Client.XConnectClient client = Sitecore.XConnect.Client.Configuration.SitecoreXConnectClientConfiguration.GetClient()) { try { IAsyncQueryable<Sitecore.XConnect.Interaction> queryable = client.Interactions .Where(x => x.GetFacet(CollectionModel.FacetKeys.WebVisit).Browser.BrowserMajorName == "Chrome") .WithExpandOptions(new InteractionExpandOptions(CollectionModel.FacetKeys.WebVisit) { Contact = new RelatedContactExpandOptions(PersonalInformation.DefaultFacetKey) });

var enumerable = queryable.GetBatchEnumeratorSync(20);

while (enumerable.MoveNext()) { var currentBatch = enumerable.Current;

foreach (var interaction in currentBatch) { var contact = interaction.Contact as Contact; // Cast IEntityReference to Contact var personalInfo = contact.Personal();

var interactionFacet = interaction.WebVisit(); } }

} catch (XdbExecutionException ex) { // Handle exception } } } } }

!注関連する接触のInteractionsプロパティは常にnullとなります。インタラクション検索を行う際には接触面の側面を展開できます。

カウント相互作用

以下の例は、一致する相互作用のカウントを返す方法を示しています。このメソッドはカウントのみを返し、結果はワイヤー上で送信されません。

using System.Linq; using Sitecore.XConnect; using System;

namespace Documentation { public class SearchResultsWithCountInteractions { // Async example public async void Example() { using (Sitecore.XConnect.Client.XConnectClient client = Sitecore.XConnect.Client.Configuration.SitecoreXConnectClientConfiguration.GetClient()) { try { var count = await client.Interactions.Where(c => c.StartDateTime > DateTime.UtcNow.AddDays(-10)).Count(); } catch (XdbExecutionException ex) { // Handle exception } } }

// Sync example public void ExampleSync() { using (Sitecore.XConnect.Client.XConnectClient client = Sitecore.XConnect.Client.Configuration.SitecoreXConnectClientConfiguration.GetClient()) { try { // There is no synchronous extension for Count - use SuspendContextLock instead int count = Sitecore.XConnect.Client.XConnectSynchronousExtensions.SuspendContextLock(client.Interactions.Where(c => c.StartDateTime > DateTime.UtcNow.AddDays(-10)).Count); } catch (XdbExecutionException ex) { // Handle exception } } } } }

この記事を改善するための提案がある場合は、 お知らせください!