---
title: "フィルタリング・facets"
slug: "filtering-facets"
abstract: "Searchと推奨のAPIを使い、Sitecore Searchをfacetsにフィルターする方法を学びましょう。"
---
# フィルタリング・facets

ファセットレベルでフィルタリングできます。つまり、ファセット内の値をフィルタリングします。これを行うには、search.facet.types.filterオブジェクトを追加してください。オプションで、widget.items.search.facet.types.filtering\_optionsオブジェクトを追加することもできます。

これらのオブジェクトのデータモデルについては、[SearchおよびRecommendation API参照](https://doc.sitecore.com/search/en/developers/search-and-recommentation-api/index.html)を参照してください。

## 用語の側面のフィルタリング

この例では、*プロダクト*と呼ばれるファセットをフィルタリングしたいです。次のことをしたいのです:

-   アイテムは2つのファセット値、すなわちファステット値Aかファステット値Bのいずれかから取得します。この場合、filterオブジェクトを使い、orをtypeとして渡し、2つのファセット値のIDをvaluesとして渡します。
    
    > [!注ファセットID値を取得するには、エンドポイントに対してフィルターなしのリクエストを行ってください。レスポンスにはファセットIDが含まれています。サンプルコールについては「Get all available facets」を参照してください。](https://doc.sitecore.com/search/ja/developers/search-developer-guide/integrating-using-rest-apis/using-the-search-and-recommendation-api-to-create-search-experiences/using-faceted-search.html#UUID-1bab7dc1-558b-93c5-43ce-4a4c264b49a8_section-idm4654583551281633326426223705 "Get all available facets")
    
-   ハードフィルター、つまりリクエスト全体に適用される事前に決められたフィルターを適用します。この場合、filtering\_optionsオブジェクトの値としてhard\_filtersを渡します。
    
-   現在のファセット、つまりオブジェクトのファセットにフィルターをかけます。つまり、訪問者が例えばファセット値Aを選択すると、ファセット値Bは消えます。そのため、own\_valuesをfiltering\_optionsオブジェクトの値として渡します。
    
-   他の面のフィルターを現在のファセットに適用facets。これは、訪問者が他のファセットの値を他のfacetsで選択すると、現在のファセットのファセット値は、フィルターがまだ適用されているかどうかによって動的に変化することを意味します。そのため、filtering\_optionsオブジェクトの値としてother\_facet\_valuesを渡します。
    

以下のコードサンプルは、リクエストの作成方法を示しています:

{
 "widget": {
 "items": 
 {
 "rfk\_id": "rfkid\_7",
 "entity": "product",
 "search": {
 "facet": {
 "types": 
 {
 "name": "product",
 "max": 5,
 "filtering\_options": 
 "own\_values",
 "hard\_filters",
 "other\_facet\_values"
 ,
 "filter": {
 "type": "or",
 "values": 
 "facetid\_A",
 "facetid\_A"
 
 }
 }
 
 }
 }
 }
 
 },
 "context": {
 "locale": {
 "country": "us",
 "language": "en"
 }
 }
}

## 動的属性のフィルタリング

動的属性のファセットをフィルタリングすることは、用語のファセットやヒストグラムのファセットをフィルタリングするのと似ています。主な違いは、動的属性のファセットを扱う場合、facet.types.nameが動的属性の名前である点です。

この例では、attribute\_tags.ID01動的属性のファセットをフィルタリングしたいです。アイテムは2つのファセット値、**フェイス値A**か **フェイス値B**のいずれかから選びたいです。この場合、widget.item.search.facet.types.filterオブジェクトを使い、orをtypeとして渡し、2つのファセット値のIDをvaluesとして渡します。

> [!注ファセットID値を取得するには、エンドポイントにフィルターなしのリクエストを送ります。レスポンスでファセットIDが返ってきます。サンプルコールについては、「動的属性コレクションからトップfacetsを取る」をご覧ください](https://doc.sitecore.com/search/ja/developers/search-developer-guide/integrating-using-rest-apis/using-the-search-and-recommendation-api-to-create-search-experiences/using-faceted-search.html#UUID-1bab7dc1-558b-93c5-43ce-4a4c264b49a8_section-idm4659587376150433326494584954 "Get the top facets from a dynamic attributes collection")

以下のコードサンプルは、リクエストの作成方法を示しています:

{
 "widget": {
 "items": 
 {
 "rfk\_id": "rfkid\_7",
 "entity": "product",
 "search": {
 "facet": {
 "types": 
 {
 "name": "attribute\_tags.ID9",
 "filter": {
 "type": "or",
 "values": 
 "facetid\_A",
 "facetid\_B"
 
 }
 }
 
 }
 }
 }
 
 },
 "context": {
 "locale": {
 "country": "us",
 "language": "en"
 }
 }
}

## 複雑なファセットフィルターの利用

ネストされたオブジェクトで複雑なファセットフィルターを作成するには、facet.types.filterオブジェクト内に複数のオペレーターを使用します。

### レンジの面を持つ複雑なフィルターの使用

複雑なファセットフィルターの一般的なユースケースは、GUIにfacetsのダブルスライダーがあり、*Review rating* 、*Price*、*Newness*などの値が割り当てられている場合です。このような場合、量より小さいものも大きいものも表示できる必要があります。

例えば、アイテムの追加日から結果を絞り込むのに役立つ*Newness*ファセットがあります。ファセットの値は*0*から*30*までの範囲で、content itemsは0日前から30日前まで追加されたことを意味します。訪問者が10日前から20日前の追加アイテムを望んでいると仮定し、それに応じてスライダーを動かします。

以下のサンプルリクエストは、*10*(含む)から*20*までの値でフィルタリングされた*Newness*の扱い方を示しています。

{
 "widget": {
 "items": 
 {
 "rfk\_id": "rfkid\_7",
 "entity": "content",
 "search": {
 "facet": {
 "types": 
 {
 "name": "newness",
 "filter": {
 "type": "and",
 "values": 
 {
 "type": "gte",
 "value": 5
 },
 {
 "type": "lt",
 "value": 10
 }
 
 }
 }
 
 }
 }
 }
 
 },
 "context": {
 "locale": {
 "country": "us",
 "language": "en"
 }
 }
}

### 項面を持つ複素フィルターの使用

また、用語facetsを含む複雑なフィルターを使うこともできます。

例えば、書店のウェブサイトと*Genre*ファセットがあります。このファセットはstring属性に基づいています。各content item(つまり各本)は複数のジャンルを持つことができます。例えば、本のジャン *ル* 値は*Young adult*、*Fantasy*、*Mystery*、*Dystopian*、*Fiction*を持つかもしれません。訪問者は*Mystery*か*Fiction*の本を見たいが、*Young adult*本は見たくないのです。

以下のサンプルリクエストは、*ミステリー* や *フィクション* の項目をフィルタリングする方法を示していますが、*ヤングアダル*トではありません。

{
 "widget": {
 "items": 
 {
 "rfk\_id": "rfkid\_7",
 "entity": "product",
 "search": {
 "facet": {
 "types": 
 {
 "name": "genre",
 "filter": {
 "type": "and",
 "values": 
 {
 "type": "not",
 "filter": {
 "type": "eq",
 "value": "Young adult"
 }
 },
 {
 "type": "or",
 "filters": 
 {
 "type": "eq",
 "value": "Fiction"
 },
 {
 "type": "eq",
 "value": "Mystery"
 }
 
 }
 
 }
 }
 
 }
 }
 }
 
 },
 "context": {
 "locale": {
 "country": "us",
 "language": "en"
 }
 }
}