xConnect検索に対応している方法と演算子
このページの翻訳はAIによって自動的に行われました。可能な限り正確な翻訳を心掛けていますが、原文と異なる表現や解釈が含まれる場合があります。正確で公式な情報については、必ず英語の原文をご参照ください。
xConnect searchはIAsyncQueryable
同期および非同期拡張メソッドの概要については 、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);
カスタムイベントプロパティ内の時間帯によるSearch
以下のクエリ(カスタムTimespanプロパティを使用)は動作しません:
var interactions = await _client.Contacts.Where(c => c.Interactions.Any(i => i.Events.OfType
デフォルトの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
これはうまくいきません:
events.OfType
複素リストへのパスにおける重複名
以下のクエリはサポートされていません。なぜなら、Path.To.Nestedは両方のリストで同じだからです。
- i.Scores().Scores.Any(s=>s.Path.To.Nested.Any())
- i.ProfileScores().ProfileScores.Any(s=>s.Path.To.Nested.Any())
サポートされていません(Azure Search)
以下の制限は、xConnect検索のプロバイダー Azure 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)
- i=>i.Events.OfType
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
- 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))