検索インタラクション

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

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

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

メモ

xConnect検索 でサポートされている方法のリスト を参照してください。

インタラクションIDによる検索

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

連絡先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<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による検索

次の例は、指定した定義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プロパティを使用します。

イベントタイプから探す

次の例は、イベントの種類 (種類がGoalOutcomeのすべてのイベントなど) で検索する方法を示しています。

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
                }
            }
        }
    }
}

イベントプロパティから探す

次の例は、結果などのイベントのプロパティを使用してインタラクションを検索する方法を示しています。

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
                }
            }
        }
    }
}

インタラクションプロパティによる検索

次のクエリは、ChannelId0565e9b0-936c-4594-8cc3-5fcace3918edが10日未満のすべてのインタラクションを返します。

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<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
                }
            }
        }
    }
}

インタラクションファセットによる検索

次の例は、IpInfoWebVisitなどのインタラクションファセットで検索する方法を示しています。

手記

.GetFacet<TFacet> メソッド、または .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<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() 拡張メソッドは、クエリから結果を返すための推奨される方法です。詳細については、ページネーションの概要を参照してください。

大事な

各方法で、1つのバッチの最大サイズはSitecore.XConnect.SearchExtensions.DefaultBatchSizeにハードコードされ、1000に設定されます。この値は現在構成できません。

同期

方式

筆記

awaitclient.GetBatchEnumerator()

結果をページ分割する推奨される方法。

awaitclient.ToSearchResults()

Skip()Take()と併用してバッチサイズを制御できます。合計結果の数を返します。

awaitclient.ToList()

Skip()Take()で使用できます。連絡先のリストを返します。

同期

方式

筆記

client.GetBatchEnumeratorSync()

結果をページ分割する推奨される方法。

awaitclient.AsEnumerable()

Skip()Take()で使用できます。IEnumerable<Contact>を返します。

次の例は、各メソッドを使用して結果を返す方法を示しています。

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<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でインタラクションを取得するときに使用するものと同じです。展開オプションを指定しない場合、ファセットは返されません。

次の例は、各インタラクションで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<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
                }
            }
        }
    }
}
この記事を改善するための提案がある場合は、 お知らせください!