汎用検索フレームワーク

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

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

Sitecore Experience Commerce (XC) リリース10.0では、プロバイダーに依存しない汎用の検索フレームワークが導入されており、サポートされている任意の検索プロバイダーに対する検索操作に同じ検索クエリ構文を使用できます。検索操作は、プログラム (Searchプラグインを使用) または公開されているAPIエンドポイントを介して呼び出すことができます。

汎用検索APIは、カタログ品目、価格表、注文、顧客、およびプロモーションを検索する機能を提供します。Commerce Engineは、価格カードやプロモーションの検出など、Commerceエンティティの検出を必要とするパイプライン プロセスで汎用検索フレームワークの機能も活用します。

メモ

XC Business Toolsの検索機能では、汎用検索フレームワークは使用されません。

検索クエリモデル

汎用検索フレームワークでは、検索クエリをサポートするために次のモデルが定義されています。

  • 検索クエリ

  • 等しい検索ノード

  • MatchAllSearchNode

  • フィールド名検索ノード

  • フィールド値検索ノード

クエリモデルのフィルタリング

汎用検索フレームワークでは、フィルター クエリをサポートするために次のモデルが定義されています。

  • フィルタークエリ

  • MatchAllFilterNode

  • ContainsFilterNode

  • AndFilterNode

  • 等しいフィルタノード

  • またはフィルターノード

  • フィールド名フィルターノード

  • フィールド値フィルタノード

  • NotFilterNode (英語)

  • GreaterThanFilterNode

  • LessThanFilterNode (英語)

FilterNodeValueTypes (フィルター ノード値型)

フィルター クエリのFieldValueFilterNodeパラメーターは、次のデータ型をサポートするFilterNodeValueTypes値を受け取ります。

  • テキスト : 文字列 (ほとんどの場合、デフォルト)

  • 整数

  • 浮動小数点数

  • 日付 : "yyyy-MM-ddTHH:mm:ss.FFFZ」

  • ブール値 ("true" または "false")

  • コレクション内の文字列 : コレクション内のテキスト。たとえば、Promotionsインデックスの関連カタログなどです。

汎用検索APIエンドポイント

汎用検索フレームワークは、次のGenericSearch APIエンドポイント {{ServiceHost}}/{{ShopsApi}}/GenericSearch()を公開します。

PostmanのGenericSearchサンプル リクエストを使用して、APIを操作できます。

GenericSearchCommandコマンド

汎用検索フレームワークは、GenericSearchCommandコマンドを定義します。 GenericSearchCommandコマンドは、IGenericSearchPipelineパイプラインを呼び出します。

GenericSearchCommandパラメーター

次の表に、GenericSearchCommand操作のパラメータを示します。

パラメーター

形容

"searchScopeName"

Plugin.Search.PolicySetで定義されているSearchScopePolicyの名前。検索するインデックスを定義します。

"searchQuery"

検索条件で構成されるクエリ。解析されたバージョンは、検索クエリとして検索プロバイダーに渡されます。

"filterQuery"

フィルター条件で構成されるクエリ。解析されたバージョンは、フィルター クエリとして検索プロバイダーに渡されます。

"options"

検索操作に関連するオプションは次のとおりです。

  • "skip": 検索結果からスキップするドキュメントの数を決定します。ページネーションに必要です。

  • "top": 検索結果から返すドキュメントの数を決定します。ページネーションに必要です。

  • "resultsOrderFields": 検索結果の並べ替えに使用する順序とフィールドを決定できます。

  • "fieldsToRetrieve": 検索プロバイダーから返すフィールドを決定します。フィールドが指定されていない場合、結果はすべてのフィールドを返します。

検索ノードとフィルター ノード

汎用検索フレームワークは、検索ノードとフィルター ノードを定義します。検索ノードは、検索クエリの主要な一致条件を表します。フィルター・ノードは、フィルター・クエリーの一致基準を表します。フィルター クエリを使用して、検索をさらに絞り込み、返される結果の数を制限します。

検索ノード

次の表に、検索クエリで使用される検索ノードの一覧と説明を示します。

検索ノード

形容

Match all

インデックス内のすべてのドキュメントに一致します。

Equals

指定したFieldNameFieldValueを使用して、指定したフィールド名と値に一致するドキュメントのみを検索します。

フィルター ノード

次の表に、フィルター クエリで検索結果をさらに絞り込み、特定のコンテンツに絞り込むために使用できるフィルター ノード演算子の一覧と説明を示します。

フィルターノード

形容

Match all

インデックス内のすべてのドキュメントに一致します。これは、フィルターを使用しない検索と同じです。

Contains

FieldNameFieldValueで指定された部分文字列containドキュメントのみと一致します。

手記

Azure Searchでは、Containsフィルター ノードは、スペースで区切られた複数の用語や特殊記号を指定するクエリをサポートしていません。たとえば、Azure Searchでは、2つのキーワード "video game" を含むフィルター クエリは、2番目のキーワードIDを考慮せずに、部分文字列videoを含むすべてのドキュメントを返しますgame

Equals

指定したFieldNameFieldValueを使用して、フィールド名とフィールド値の両方に一致するドキュメントのみを検索します。

And

他のノードと連携して複雑なクエリを作成できます。次のような複雑なクエリを作成するための論理AND操作を表します。 name = "bla" AND displayname contains "abc"。検索が結果を返すには、両方の句がtrueである必要があります。

Or

2つの句をOR関係と組み合わせることで、より複雑なクエリを作成できます。いずれかの句がtrueの場合、結果はドキュメントを返します。

Not

一部のノードのロジックを反転できます。

Greater than

FieldNameおよびFieldValueと組み合わせて、FieldValueが提供されたものより大きいドキュメントを返却することができます。数字と日付にのみ使用されます。

Less than

FieldNameおよびFieldValueと組み合わせて、FieldValueが提供されたものよりも少ないドキュメントを返却することができます。数字と日付にのみ使用

検索クエリとフィルター クエリの例

次に、C# プログラミング言語を使用した検索クエリとフィルター クエリの例を示します。

MatchAllSearchNode条件を使用した検索クエリの例

次の例は、MatchAllSearchNode条件を使用するクエリの例を示しています。

 var sq = new SearchQuery(); -
   search query to match all documents. The same as:
 var sq = new SearchQuery(new MatchAllSearchNode())

EqualsSearchNode条件を使用した検索クエリの例

次の例は、EqualsSearchNode条件を使用するクエリの例を示しています。

 var sq = new SearchQuery(
    new EqualsSearchNode(
    new FieldNameSearchNode("fieldName"),
    new FieldValueSearchNode("fieldValue"))); 

MatchAllFilterNode条件を使用したフィルター クエリの例

次の例は、MatchAllFilterNode条件を使用するクエリの例を示しています。

var fq = new FilterQuery() -
  applies no filtering on search results. The same as
var fq = new FilterQuery(new MatchAllFilterNode())

GreaterThanFilterNode条件を使用したフィルター クエリの例

次の例は、GreaterThanFilterNode条件を使用する複雑なクエリの例を示しています。

var fq = new FilterQuery(
  new AndFilterNode(
    new ContainsFilterNode(
      new FieldNameFilterNode("fieldName"),
      new FieldValueFilterNode("fieldValue")),
    new GreaterThanFilterNode(
      new FieldNameFilterNode("dateFieldName"),
      new FieldValueFilterNode("dateValue", FilterNodeValueType.Date)))); - filter query to return only those documents that contain text "fieldValue" within "fieldName" field and "dateFieldName" is greater than "dateValue".
手記

"dateValue"は、次の形式で記述する必要があります: "yyyy-MM-ddTHH:mm:ss.FFFZ"、例: "2000-01-01T12:00:00.000Z" ここで:

  • yyyyは年です。

  • MMは月です。

  • ddは、その月の日付です。

  • Tは時間区切り記号です。

  • HHは時間単位の時間です。

  • mmは分を表します。

  • ssは秒を表します。

  • FFF秒の小数部 (ゼロなし) を表します。

  • Zは、ゼロUTCオフセットのタイム ゾーン指定子です。

複雑なフィルター クエリの例

次の例は、複雑なフィルター クエリの例を示しています。

var fq = new FilterQuery(
   new OrFilterNode(
     new EqualsFilterNode(
       new FieldNameFilterNode("fieldName"),
       new FieldValueFilterNode("booleanValue", FilterNodeValueType.Boolean)),
     new NotFilterNode(
       new EqualsFilterNode(
         new FieldNameFilterNode("floatFieldName"),
         new FieldValueFilterNode("1.0",FilterNodeValueType.FloatNumber))))); -
filter query to return only those documents where "fieldName" equals
Boolean value "booleanValue" or "floatFieldName" not equals
1.0 float number.
この記事を改善するための提案がある場合は、 お知らせください!