1. 検索に関する研究

xConnect検索に対応している方法と演算子

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

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

xConnect検索はIAsyncQueryable すべての手法を実装しておらず、サポートされていないメソッドを使おうとするとSitecore.XConnect.Search.YourLinqIsTooStrongExceptionまたはXdbModelException例外を投げ出します。以下の表は、明示的に記載されていない限り、接触検索とインタラクション検索の両方に適用されます。

同期および非同期拡張メソッドの概要については 、xConnect Client APIを参照してください。

拡張法と演算子サポート行列:

方法/演算子

xConnect

IAsyncQueryable

注記

.Where()

はい

はい

.Any()

はい

はい

制限については 「Azure Searchリストのフィールド制限 」セクションを参照してください。

.ToArray()

はい

はい

.ToList()

はい

はい

.Count()

はい

はい

.OrderBy()

はい

はい

.OrderByDescending()

はい

はい

.ThenBy()

はい

はい

.ThenByDescending()

はい

はい

.Skip()

はい

はい

ページ ングのxConnect検索結果をご覧ください。

.Take()

はい

はい

ページ ングのxConnect検索結果をご覧ください。

.FirstOrDefault()

はい

はい

.First()

はい

はい

.Single()

はい

はい

.SingleOrDefault()

はい

はい

== および !=

はい

はい

< および >

はい

はい

<= および >=

はい

はい

&& および ||

はい

はい

.GetBatchEnumerator()

はい

いいえ

.GetBatchEnumeratorSync()

はい

いいえ

.ToSearchResults()

はい

いいえ

.WithExpandOptions()

はい

いいえ

.AsEnumerable()

はい

いいえ

同期のみ。

Contains

いいえ

はい

StartsWith

いいえ

はい

EndsWith

いいえ

はい

ToString

いいえ

はい

Equals

いいえ

はい

!注Like() 拡張方法は存在しません。

xConnect検索プロバイダーの制限

xConnect検索プロバイダーは以下のシナリオをサポートしていません:

xConnect検索プロバイダーの制限:

  • シナリオ
  • 検索式内のカスタムメソッド
    Client APIはLINQクエリ式内でカスタムメソッド呼び出しをサポートしていません。例外は Sitecore.XConnect.Search.YourLinqIsTooStrongException または XdbModelException 例外として表示されます。
  • Search for null 値
    。例えば:

var notWebVisits = client.Interactions.Where(c => c.WebVisit() == null);

  • カスタムイベントプロパティでTimespanによるSearch
    (カスタムTimespanプロパティを使用)はサポートされていません:注
    。この制限はイベントにのみ適用され、ファセットには適用されません。

var interactions = await _client.Contacts.Where(c => c.Interactions.Any(i => i.Events.OfType().Any(e => e.CustomCampaignTimespan == TimeSpan.Zero)));

  • まず、LINQ式内のFirstorDefault、Last、LastOrDefault、またはカウントを行ってください:サポートされていません:

// First() inside a LINQ expression is unsupported: var interactions = await _client.Interactions.Where(i => i.Events.First().EngagementValue == 11).ToList();

// FirstOrDefault() inside a LINQ expression is unsupported: var contacts = await _client.Contacts.Where(contact => contact.Interactions.OrderByDescending(x => x.StartDateTime).FirstOrDefault().WebVisit().SiteName == "value");

// Last() inside a LINQ expression is unsupported: var contacts = await _client.Contacts.Where(contact => contact.Interactions.Last().WebVisit().SiteName == value);

  • Timespan
    (例
    、Minutes、Secondsなど)を組み合わせたクエリでTimespanを使うことはできません。サポート済み:サポートなし:

events.OfType(e => e.SomeTypeTimeSpanField > TimeSpan.FromHours(2))

events.OfType(e => e.SomeTypeTimeSpanField.Hours > 10)

  • 複雑なリストへのパスにおける重複名
    。なぜなら、Path.To.Nestedは両リストで同じだからです:

i.Scores().Scores.Any(s=>s.Path.To.Nested.Any()) i.ProfileScores().ProfileScores.Any(s=>s.Path.To.Nested.Any())

以下の制限は、xConnect検索のプロバイダー Azure Search特有のものです。

Azure Search提供者の限界:

  • シナリオ
  • contact.Interactions.Any(): Azure Searchプロバイダーは結合をサポートしていません。詳細については、「検索と連絡先のSearchの使い方(結合の有無の例を含む)」をご覧ください。重要 このAzure Search制限は使用できるセグメンテーションルールに影響します。例えば、メールイベント(メールを開く、リンクをクリックするなど)で連絡先を絞り込むことはできません。
  • 部分テキスト検索
    Searchプロバイダーでサポートされていません。例えば:

client.Contacts.Where(c => c.TextMatch("Mar"))

以下の表は、Azure Searchにおける 複素型の制限 に関するものです。

9.0アップデート2

9.0アップデート2では、複雑な型のリスト内の比較の改善が導入されました。以下はこれらの型に対する演算子のサポートを示しています:

Azure Search 9.0 アップデート2のフィールドサポートマトリックスリスト:

種類

==

||

&&

!

>

>=

<

<=

!=

文字列、列挙、またはGuidのネストリスト

はい

はい

はい

はい

いいえ

いいえ

いいえ

いいえ

いいえ

複雑な型やintfloat

はい

はい

はい

はい

はい

はい

はい

はい

はい

以下はこれらのタイプにおける演算子の使用例を示します。

Azure Search 9.0アップデート2のフィールド例一覧:

  • 種類
  • 文字列、列挙、Guidのネストリスト:サポートなし:サポート済み:

c=>c.SomeFacet().SomeList.Any(e=>e!="hello") c=>c.SomeFacet().SomeList.Any(e=>e!="hello"||e!="world")

c=>c.SomeFacet().SomeList.Any(e=>e=="hello") c=>c.SomeFacet().SomeList.Any(e=>e=="hello"||e=="world")

  • 複雑な型や int や floatのような単純な型のネストリスト:サポート:

c=>c.SomeFacet().SomeList.Any(e=>e.Property1>2) c=>c.SomeFacet().SomeList.Any(e=>e.Property1!=2) c=>c.SomeFacet().SomeList.Any(e=>e.Property1==2&&e.Property2=="string") c=>c.SomeFacet().SomeList.Any(e=>e.Property1==2||e.Property2=="string")

  • 別のリストを含むリスト
    ()を使用できます。サポート対象:

someList.Any(v=>v.NestedList.Any(u=>u.SomeField==2))

  • Any()述語内の文字列、エナグ、またはGuidのネストリスト
    ()述語内で == と || を使用可能です。サポート:

c=>c.SomeFacet().SomeList.Any(e=>e=="hello") c=>c.SomeFacet().SomeList.Any(e=>e=="hello"||e=="world")

  • OfTypeコールの後に続くAny()
    。サポート:

i=>i.Events.OfType().Any(o=>o.MonetaryValue>10) i=>i.Events.OfType().Any(o=>o.DefinitionId==someId)

9.0初期リリースと9.0アップデート1

以下はこれらのタイプのオペレーターサポートを示しています:

Azure Search 9.0初期リリースおよび9.0アップデート1のフィールドサポートを一覧にします。

種類

==

||

&&

!

>

>=

<

<=

!=

Any()述語内のネストリスト

はい

いいえ

いいえ

いいえ

いいえ

いいえ

いいえ

いいえ

いいえ

以下はこれらのタイプにおける演算子の使用例を示します。

Azure Search 9.0初期リリースおよび9.0アップデート1のフィールド例を示します。

  • 種類
  • 別のリストを含むリスト
    ()を使用できます。サポート対象:

someList.Any(v=>v.NestedList.Any(u=>u.SomeField==2))

  • Any()述語内のネストリスト:サポートなし:サポート済み:

c=>c.SomeFacet().SomeList.Any(e=>e.Property1>2) c=>c.SomeFacet().SomeList.Any(e=>e.Property1!=2) c=>c.SomeFacet().SomeList.Any(e=>e.Property1==2&&e.Property2=="string") c=>c.SomeFacet().SomeList.Any(e=>e.Property1==2||e.Property2=="string")

MyListProperty.Any(v=>v.SomeField==2) c=>c.SomeFacet().SomeList.Any(e=>e.Property1==2)|| c=>c.SomeFacet().SomeList.Any(e=>e.Property2=="string")

  • OfTypeコールの後に続くAny()
    、基本クラスを参照することはできません。サポートされていません
    、Any()は>と組み合わせて使うことはできません。NoteDefinitionIdはOutcomeのプロパティではなく、ベースクラスのプロパティです。

i=>i.Events.OfType().Any(o=>o.MonetaryValue>10)

i=>i.Events.OfType().Any(o=>o.DefinitionId==someId)

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