Filtering facets (ファセットのフィルタリング)

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

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

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

これらのオブジェクトのデータモデルについては、Search and Recommendation APIリファレンスを参照してください。

用語ファセットのフィルタリング

この例では、productというファセットをフィルタリングします。次のことを行います。

  • ファセット値Aまたはファセット値Bの2つのファセット値のいずれかから項目を取得します。このためには、filterオブジェクトを使用してortypeとして渡し、2つのファセット値のIDをvaluesとして渡します。

    メモ

    ファセットID値を取得するには、エンドポイントに対してフィルター処理されていない要求を行います。応答にはファセットIDが含まれます。サンプル呼び出しについては、「利用可能なすべてのファセットを取得するfacets」を参照してください。

  • ハード フィルター、つまり、要求全体に適用される以前に決定されたフィルターを適用します。このためには、filtering_optionsオブジェクトの値としてhard_filtersを渡します。

  • 現在のファセットであるオブジェクトファセットにフィルターを適用します。これは、訪問者がファセット値Aを選択すると、ファセット値Bが消えることを意味します。このためには、filtering_optionsオブジェクトの値としてown_valuesを渡します。

  • 他のファセットのフィルターを現在のファセットに適用します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フィルタリングします。 facet value Aまたはfacet value Bの2つのファセット値のいずれかの項目が必要です。このためには、widget.item.search.facet.types.filterオブジェクトを使用してortypeとして渡し、2つのファセット値のIDをvaluesとして渡します。

手記

ファセットID値を取得するには、エンドポイントに対してフィルター処理されていない要求を行います。応答でファセットIDを取得します。サンプル呼び出しについては、「動的属性コレクションから上位のfacetsを取得する」を参照してください

次のコード サンプルは、要求を作成する方法を示しています。

{
    "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オブジェクト内で複数の演算子を使用します。

範囲ファセットでの複雑なフィルターの使用

複雑なファセットフィルターの一般的な使用例は、Review ratingPriceNewnessなどの値の範囲を持つfacetsのGUIにダブルスライダーがある場合です。このような場合、金額より小さいものと金額より大きいものの両方を表示できなければなりません。

たとえば、アイテムが追加された日時に基づいてユーザーが結果を絞り込むのに役立つ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で複雑なフィルターを使用することもできます。

たとえば、書店のWebサイトとGenreファセットがあるとします。このファセットは、string属性に基づいています。各content item (つまり、各書籍) には複数のジャンルを含めることができます。たとえば、本のgenre値はYoung adultFantasyMysteryDystopian、およびFictionです。訪問者は、MysteryまたはFictionの本を見たいが、Young adult本を見たくない。

次のサンプル要求は、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"
    }
  }
}
この記事を改善するための提案がある場合は、 お知らせください!