---
title: "Searchインタラクション"
slug: "search-interactions"
abstract: "インタラクションのクエリ方法(行動検索とも呼ばれる)について。"
---
# Searchインタラクション

このトピックでは、インタラクション(行動検索とも呼ばれる)クエリの方法を示します。各例では、client.GetBatchEnumerator() / client.GetBatchEnumeratorSync() メソッドを用いて [結果をページ付け](https://doc.sitecore.com/xp/ja/developers/91/sitecore-experience-platform/paginatingxconnect-search-results.html "Paginating xConnect search results")します。

> !注[xConnect検索のサポート方法一覧](https://doc.sitecore.com/xp/ja/developers/91/sitecore-experience-platform/supported-methods-and-operators-for-xconnect-search.html "Supported methods and operators for xConnect search") を参照してください。

## インタラクションIDによるSearch

インタラクションIDによるSearchはサポートされていません。インタラクションIDが分かっている場合は、[コレクションデータベースからインタラクションを取得し](https://doc.sitecore.com/xp/ja/developers/91/sitecore-experience-platform/work-with-interactions.html "Work with interactions")てください。

## 連絡先IDでSearch

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

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

using Sitecore.XConnect.Collection.Model;
using Sitecore.XConnect.Operations;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using System.Linq;
using Sitecore.XConnect.Search;
using Sitecore.XConnect;
using Sitecore.Xdb.Common.Web.Synchronous;
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<Interaction> 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<Interaction> 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によるSearch

以下の例は、指定された定義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<Goal>().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<Goal>().Where(x => x.DefinitionId == someGoalId).ToList();
 }
 }

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

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

## イベントタイプ別Search

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

using System;
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<Goal>().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<Goal>();
 }
 }

 }
 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<Goal>().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<Goal>();
 }
 }

 }
 catch (XdbExecutionException ex)
 {
 // Handle exception
 }
 }
 }
 }
}
## イベントプロパティによるSearch

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

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<Outcome>().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<Outcome>();
 }
 }

 }
 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<Outcome>().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<Outcome>();
 }
 }

 }
 catch (XdbExecutionException ex)
 {
 // Handle exception
 }
 }
 }
 }
}
## 相互作用性質によるSearch

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

using Sitecore.XConnect.Collection.Model;
using Sitecore.XConnect.Operations;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using System.Linq;
using Sitecore.XConnect.Search;
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<Interaction> 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<Interaction> currentBatch = enumerable.Current;
 }
 }
 catch (XdbExecutionException ex)
 {
 // Handle exception
 }
 }
 }
 }
}
## Search by interaction facets

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

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

using Sitecore.XConnect.Collection.Model;
using Sitecore.XConnect.Operations;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using System.Linq;
using Sitecore.XConnect.Search;
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<WebVisit>(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<WebVisit>(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() 拡張メソッドです。詳細は [ページングの概要](https://doc.sitecore.com/xp/ja/developers/91/sitecore-experience-platform/paginatingxconnect-search-results.html "Paginating xConnect search results") をご覧ください。

> !重要各メソッドごとに、単一バッチの最大サイズは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
 }
 }
 }

 // Async example
 public void ExampleSync()
 {
 using (Sitecore.XConnect.Client.XConnectClient client = Sitecore.XConnect.Client.Configuration.SitecoreXConnectClientConfiguration.GetClient())
 {
 try
 {
 IAsyncQueryable<Interaction> 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でインタラクションを取得する](https://doc.sitecore.com/xp/ja/developers/91/sitecore-experience-platform/expand-related-contact.html "Expand related contact")際に使うものと同じです。展開オプションを指定しなければ、ファセットは返されません。

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

using Sitecore.XConnect.Collection.Model;
using Sitecore.XConnect.Operations;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using System.Linq;
using Sitecore.XConnect.Search;
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<WebVisit>(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<Contact> 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<WebVisit>(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<Contact> 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
 }
 }
 }
 }
}