汎用検索フレームワーク

概要

Search プラグインによって提供される一般的な検索フレームワークの概要。検索クエリおよびフィルター クエリを構成する要素の説明を含みます。

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

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

注記

XC Business Tools の検索機能は、汎用検索フレームワークを利用しません。

検索クエリのモデル

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

  • SearchQuery

  • EqualsSearchNode

  • MatchAllSearchNode

  • FieldNameSearchNode

  • FieldValueSearchNode

フィルター クエリのモデル

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

  • FilterQuery

  • MatchAllFilterNode

  • ContainsFilterNode

  • AndFilterNode

  • EqualsFilterNode

  • OrFilterNode

  • FieldNameFilterNode

  • FieldValueFilterNode

  • NotFilterNode

  • GreaterThanFilterNode

  • LessThanFilterNode

FilterNodeValueTypes

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

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

  • 整数

  • 浮動小数点数

  • 日付: 「yyyy-MM-ddTHH:mm:ss.FFFZ」の形式

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

  • コレクション内の文字列: コレクション内のテキスト (例: Promotions Scope index の関連カタログ)。

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

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

API の使い方については、Postman の GenericSearch サンプル リクエストを使用して学習できます。

GenericSearchCommand コマンド

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

GenericSearchCommand のパラメーター

次の表は、GenericSearchCommand 操作のパラメーターをまとめたものです。

パラメーター

説明

"searchScopeName"

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

"searchQuery"

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

"filterQuery"

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

"options"

検索操作に関連するオプション:

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

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

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

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

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

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

検索ノード

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

検索ノード

説明

Match all

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

Equals

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

フィルター ノード

次の表は、フィルター ノードの演算子を示したものです。これらの演算子を使用して、フィルター クエリで検索結果をさらに絞り込み、特定のコンテンツに焦点を当てることができます。

フィルター ノード

説明

Match all

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

Contains

FieldName および FieldValue で指定された部分文字列を含むドキュメントのみに一致します。

注記

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

Equals

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

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.