---
title: "汎用検索フレームワーク"
slug: "generic-search-framework"
abstract: "Searchプラグインが提供する汎用検索フレームワークの概要と、検索およびフィルタークエリを構成する要素の説明を含みます。"
---
# 汎用検索フレームワーク

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

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

> !注XC Business Tools検索機能は汎用検索フレームワークを利用していません。

## Searchクエリモデル

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

-   検索クエリ
-   EqualsSearchNode
-   MatchAllSearchNode
-   フィールドネーム検索ノード
-   フィールドバリューサーチノード

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

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

-   FilterQuery
-   MatchAllFilterNode
-   ContainsFilterNode
-   AndFilterNode
-   EqualsFilterNode
-   OrFilterNode
-   FieldNameFilterNode
-   FieldValueFilterNode
-   NotFilterNode
-   GreaterThanFilterNode
-   LessThanFilterNode

### FilterNodeValueTypes

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

-   テキスト:文字列(ほとんどの場合デフォルト)
-   整数
-   フロート番号
-   日付:形式「yyyy-mm-ddTHH:mm:ss」でFFFZ」
-   ブール(「真」または「偽」)
-   コレクション内の文字列:コレクション内のテキスト。例えば:プロモーション索引内の関連カタログ。

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

汎用探索フレームワークは以下のGenericSearch APIエンドポイント {{ServiceHost}}/{{ShopsApi}}/GenericSearch()を明らかにします。

[PostmanのGenericSearchサンプルリクエスト](https://doc.sitecore.com/xp/ja/developers/101/sitecore-experience-commerce/search-for-a-commerce-entity-using-the-genericsearch-api.html "Search for a Commerce entity using the GenericSearch API")を使ってAPIを操作できます。

## GenericSearchCommandコマンド

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

### GenericSearchCommandパラメータ

以下の表は、GenericSearchCommand操作のパラメータを示しています:

パラメータ

概要

"searchScopeName"

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

"searchQuery"

検索条件から成るクエリです。解析されたバージョンは検索クエリとして検索提供者に渡されます。

"filterQuery"

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

"options"

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

-   "skip": は検索結果からスキップすべき文書数を決定します。ページ付けに必要です。
-   "top"検索結果から返すべき文書数を決定します。ページ付けに必要です。
-   "resultsOrderFields": は検索結果のソートに使う順序やフィールドを決定することができます。
-   "fieldsToRetrieve": は検索提供者から返すべきフィールドを決定します。フィールドがなければ、結果はすべてのフィールドを返します。

### Search and filterノード

汎用検索フレームワークは検索ノードとフィルターノードを定義します。検索ノードは検索クエリ内の主要なマッチ条件を表します。フィルターノードはフィルタークエリ内のマッチ条件を表します。フィルタークエリを使って検索をさらに細かくし、結果の返り数を制限します。

#### Searchノード

以下の表は、検索クエリで使用される検索ノードを一覧と説明しています。

Searchノード

概要

Match all

索引内のすべての文書と一致します。

Equals

指定された FieldName と FieldValue を用いて、指定されたフィールド名と値に一致する文書のみを検索します。

#### フィルターノード

以下の表は、フィルタークエリで使えるフィルターノード演算子を一覧化し、検索結果をさらに絞り込み、特定の内容に絞り込むためのものです。

フィルターノード

概要

Match all

索引内のすべての文書にマッチします。これはフィルターを使わない検索に相当します。

Contains

FieldName と FieldValue で指定された部分文字列*を含む*文書のみにマッチします。  
  
\> \[!注\]  
\> Azure Searchでは、Containsフィルターノードは、スペースで区切られた複数の用語や特別な記号を指定するクエリをサポートしません。例えば、Azure Searchの場合、2つのキーワードを含むフィルタークエリ"video game"、2つ目のキーワード*ゲーム*を考慮しずに部分文字列*video*を含む文書を返します。

Equals

指定された FieldName と FieldValue を用いて、フィールド名と値の両方に一致する文書のみを検索します。

And

他のノードと連携して複雑なクエリを構築できます。name = "bla" AND displayname contains "abc"のような複雑なクエリを作成するための論理的*AND*操作を表します。両方の節が true でなければ、検索結果が返されません。

Or

関係を持つ2つの節を組み合わせることで、より複雑なクエリ *OR* 構築できます。いずれかの節が真であれば、結果は文書を返します。

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 0を含まない秒の分数を表します。
>     
> -   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.