9.1
  1. 検索に関する研究

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

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

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

xConnect searchはIAsyncQueryable すべてを実装しているわけではなく、サポートされていない方法を使おうとするとSitecore.XConnect.Search.YourLinqIsTooStrongException例外が出されます。以下のリストは、明示的に記載されていない限り、接触検索とインタラクション検索の両方に適用されます。

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

サポート

以下の拡張メソッドがサポートされています:

  • .Where()
  • .Any() (シンプル - 制限については「Azure Search: リストフィールド制限」セクションを参照してください)
  • .ToArray()
  • .ToList()
  • .Count()
  • .OrderBy()
  • .OrderByDescending()
  • .ThenBy()
  • .ThenByDescending()
  • .OfType()
  • .Skip() および .Take() (検索結果ページネーション参照)
  • .FirstOrDefault()
  • .First()
  • .Single()
  • .SingleOrDefault()
  • == および !=
  • < および >
  • <= および >=
  • && および ||

xConnect特有の拡張

  • .GetBatchEnumerator() / .GetBatchEnumeratorSync()
  • .ToSearchResults()
  • .WithExpandOptions()
  • .AsEnumerable() (同期のみ)

サポートされていません

以下の拡張メソッドはサポートされていません:

  • Contains
  • StartsWith
  • EndsWith
  • ToString
  • Equals

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

以下のシナリオは、xConnect検索のいかなる検索プロバイダーでもサポートされていません。

検索式内のカスタムメソッド

xConnectクライアントAPIはLINQクエリ式内でカスタムメソッド呼び出しをサポートしていません。例外Sitecore.XConnect.Search.YourLinqIsTooStrongException表示されます。

Search for null values

現在、ファセットがnullかどうかを確認することは不可能です。例えば:

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

以下のクエリ(カスタムTimespanプロパティを使用)は動作しません:

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

デフォルトのDurationプロパティはイベントに使えます。この制限はイベントにのみ適用され、ファセットには適用されません。

まず、FirstOrDefault、Last、LastOrDefault、またはLINQ式内のカウント

以下のクエリはFirst()を使ったため動作しません:

var interactions = await _client.Interactions.Where(i => i.Events.First().EngagementValue == 11).ToList();

以下のクエリはFirstOrDefault()を使ったため動作しません:

var contacts = await _client.Contacts.Where(contact => contact.Interactions.OrderByDescending(x => x.StartDateTime).FirstOrDefault().WebVisit().SiteName == "value");

以下のクエリはLast()を使ったため動作しません:

var contacts = await _client.Contacts.Where(contact => contact.Interactions.Last().WebVisit().SiteName == value);

期間

TimespanOfType演算子とTimespanプロパティ(例

, Minutes, Seconds etc.)を組み合わせたクエリでは使用できません。

これは以下の通りです:

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特有のものです。

  • contact.Interactions.Any()

    Searchプロバイダーは結合をサポートしていません。詳細については、「検索と連絡先Searchの使い方(結合の有無の例を含む)」をご覧ください。

    !重要この制限は、Azure Searchで使用できるセグメンテーションルールに影響を与えます。例えば、メールイベント(開封やメールのクリック、リンクのクリックなど)で連絡先を絞り込むことはできません。

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

9.0アップデート2

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.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")
  • 別のリストを含むリストの場合、ネストAny() を使ってそのリストにアクセスすることができます。例えば: someList.Any(v=>v.NestedList.Any(u=>u.SomeField==2))

  • 文字列、列挙、Guidの入れ子リストでは、Any()述語内で==と||を使用できます。以下のクエリがサポートされています:

    • 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

サポートされていません

ネストリストの場合、Any() 述語内で===のみが使用可能です。例えば、MyListProperty.Any(v=>v.SomeField==2)。以下はサポートされていません:

  • &&
  • ||
  • !
  • >
  • >=
  • <
  • <=
  • !=

その結果、以下のクエリはサポートされていません。

  • =>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") (このクエリは c=>c.SomeFacet().SomeList.Any(e=>e.Property1==2)||c=>c.SomeFacet().SomeList.Any(e=>e.Property2=="string")として書き換えられ、サポートされています)

OfType呼び出しの後に続くAny()は、指定された正確なタイプのフィールドのみを参照でき、基本クラスを参照することはできません。以下のクエリはサポートされていません:

  • i=>i.Events.OfType().Any(o=>o.MonetaryValue>10) ( MonetaryValue は Outcomeの性質であるが、 Any() は >では使えない)
  • i=>i.Events.OfType().Any(o=>o.DefinitionId==someId) (DefinitionId は基底クラスの性質であり、 Outcomeの性質ではありません)

サポート

以下のクエリがサポートされています:

  • c=>c.InteractionCache().InteractionCaches.Any(i=>i.Goals.Any(i=>i.DefinitionId==1234567))
  • 別のリストを含むリストの場合、ネスト Any() を使ってそのリストにアクセスすることができます。例えば: someList.Any(v=>v.NestedList.Any(u=>u.SomeField==2))
この記事を改善するための提案がある場合は、 お知らせください!