階層的facetsの作成
このページの翻訳はAIによって自動的に行われました。可能な限り正確な翻訳を心掛けていますが、原文と異なる表現や解釈が含まれる場合があります。正確で公式な情報については、必ず英語の原文をご参照ください。
非常に大規模なコンテンツコレクションをナビゲートするには、訪問者が複数のフィルターを使う必要がある場合もあります。階層的facetsは検索時にフィルターを組み合わせることを可能にし、訪問者は大規模で多様なコンテンツコレクションからも特定の結果を見つけられます。
この例は、APIインタラクションにおける通常の(フラットな)ファセットサーチの使用を示し、このフィルタリング方法のみを使用した場合に生じる問題について説明します。
facetsの単純の場合
現在16台の車が販売されているディーラーを検討してみてください。facets car_brand、car_model、city、car_yearで整理されています。

- car_brandは複数のモデルを提供できます。
- car_modelは1年以上かけて製造された可能性があります。
- 車は複数の都市で販売されていることがあります。
この例では16台の車があり、それぞれブランド、モデル、都市、年式の組み合わせを表しています。Searchはそれらの組み合わせを表すために21のファセットオブジェクトを作成します。これらのオブジェクトはデータおよび4つのfacetsに関連付けられ、そのIDはフィルター要求に使用されます。
以下のコードは、ウィジェットがこの情報を表示するよう要求したことを示します。ウィジェットIDはrfkid_7です。
{ "context": { "locale": { "country": "us", "language": "en" } }, "widget": { "items": { "rfk_id": "rfkid_7", "entity": "car", "sources": "981588" , "search": { "limit"
, "content": { "fields": "car_brand", "car_model", "car_year", "city"}, "facet": { "max": 100, "types":
{ "name": "car_brand", "filtering_options": "hard_filters", "other_facet_values" }, { "name": "car_model", "filtering_options": "hard_filters", "other_facet_values" }, { "name": "car_year", "filtering_options": "hard_filters", "other_facet_values" }, { "name": "city", "filtering_options": "hard_filters", "other_facet_values" }
} } }
} }
以下の応答には、そのリクエストで返されるデータが含まれています。
{ "widgets": { "rfk_id": "rfkid_7", "type": "content_grid", "used_in": "page", "entity": "car", "facet": { "name": "car_brand", "label": "Brand", "value": { "id": "facetid_9ssdk0c13d7e384l6735y6904z30055yap70q8zw", "text": "Ford", "count": 10 }, { "id": "facetid_9x7wb5q2cq323s80n47y4ha2a0791uct00r7743a", "text": "Porsche", "count": 6 } }, { "name": "car_model", "label": "Model", "value": { "id": "facetid_23738gzg2e5n984k3pu733kpf4y930fo18q80iri", "text": "Fiesta", "count": 1 }, { "id": "facetid_12yrm13881j0ra2mgll579rmuz5gg2n4f01560d0", "text": "Focus", "count": 6 }, { "id": "facetid_12yrm13881j0ra2mgll579rmuz5gg2n4f01560d1", "text": "Kuga", "count": 2 }, { "id": "facetid_12yrm13881j0ra2mgll579rmuz5gg2n4f01560d2", "text": "Ranger", "count": 1 }, { "id": "facetid_23738gzg2e5n984k3pu733kpf4y930fo18q80iri2", "text": "Cayenne", "count": 4 }, { "id": "facetid_12yrm13881j0ra2mgll579rmuz5gg2n4f01560d3", "text": "Macan", "count": 1 }, { "id": "facetid_12yrm13881j0ra2mgll579rmuz5gg2n4f01560d4", "text": "Taycan", "count": 1 } }, { "name": "car_year", "label": "Year", "value": { "id": "facetid_98spr93e7w49s9l1bobn72c06y94c18jzl64jj94", "text": "2023", "count": 2 }, { "id": "facetid_yvfb0615m5ir28rz8wuq72038lf3ij43psm4m94x", "text": "2022", "count": 5 }, { "id": "facetid_98spr93e7w49s9l1bobn72c06y94c18jzl64jj95", "text": "2019", "count": 1 }, { "id": "facetid_yvfb0615m5ir28rz8wuq72038lf3ij43psm4m94y", "text": "2018", "count": 5 }, { "id": "facetid_98spr93e7w49s9l1bobn72c06y94c18jzl64jj96", "text": "2017", "count": 3 } }, { "name": "city", "label": "City", "value": { "id": "facetid_fp1c8287ea7k71h6070hpg3x7a87mo79bcdz4xv4", "text": "Kungsbacka", "count": 1 }, { "id": "facetid_5439e8r769543v350f86lx0845ygv60j20z2wmf9", "text": "Bromma", "count": 1 }
} , "count": 2 { "card_brand": "Ford", "car_model": "Fiesta", "city": "Orlando", "car_year": "2021", "id": "64218" }, { "card_brand": "Kia", "car_model": "Ceed SWPlug", "city": "Atlanta", "car_year": "2021", "id": "64299" }, { "card_brand": "Kia", "car_model": "XCeedPlug", "city": "Seattle", "car_year": "2021", "id": "63932" } }, { "id": "facetid_fp1c8287ea7k71h6070hpg3x7a87mo79bcdz4xv5", "text": "Eskilstuna", "count": 2 }, { "id": "facetid_5439e8r769543v350f86lx0845ygv60j20z2wmf0", "text": "Molndal", "count": 5 }, { "id": "facetid_fp1c8287ea7k71h6070hpg3x7a87mo79bcdz4xv6", "text": "Kristianstad", "count": 3 }, { "id": "facetid_5439e8r769543v350f86lx0845ygv60j20z2wmf1", "text": "Segeltorp", "count": 2 }, { "id": "facetid_fp1c8287ea7k71h6070hpg3x7a87mo79bcdz4xv7", "text": "Halmstad", "count": 1 } } , "content": { "car_brand": "Ford", "car_model": "Fiesta", "city": "Kungsbacka", "car_year": "2023", "id": "64218" }, { "car_brand": "Ford", "car_model": "Focus", "city": "Bromma", "car_year": "2022", "id": "64219" }, { "car_brand": "Ford", "car_model": "Kuga", "city": "Eskilstuna", "car_year": "2019", "id": "64220" }, { "car_brand": "Ford", "car_model": "Ranger", "city": "Molndal", "car_year": "2018", "id": "64221" }, { "car_brand": "Porsche", "car_model": "Cayenne", "city": "Kristianstad", "car_year": "2017", "id": "64222" }, { "car_brand": "Porsche", "car_model": "Macan", "city": "Segeltorp", "car_year": "2022", "id": "64223" }, { "car_brand": "Porsche", "car_model": "Taycan", "city": "Halmstad", "car_year": "2018", "id": "64224" } ... , "total_item": 16, "limit": 50, "offset": 0 } , "dt": 30, "ts": 1727250342206 }
このデータでは:
- facet配列内のすべてのアイテムには、インデックス作成時に作成された、そのファセットアイテムに関連付けられたユニークなファセットオブジェクトを含むvalueパラメータがあります。
- リクエストにファセットフィルターが含まれていなかったため、すべてのインデックス車が content 配列にリストされています。
面値の増加に関する問題
在庫車の数が増えるにつれて、ブランド、モデル、年式、都市の数も増加する可能性が高いです。これにより、これら4つのfacetsによるフィルタリングはますます複雑になり、追加のオーバーヘッドや応答時間の延長が生まれます。
例えば、自動車ディーラーが20都市の10ブランドから6モデルを提供した場合、インデックス作成プロセス中に作成されたファセットオブジェクトの数は、製造年ごとに1,200に増加します。 search.facet配列に多くのファセットオブジェクトをリクエストごとに含めるのは非効率で、過剰なパフォーマンスリソースを消費します。
フラットfacetsを使うことで、ブランドとモデルの関係が明確に見えなくなり、フロントエンドでの提示方法も複雑になります。
階層的facetsの解法
この例の問題の解決策は階層的facetsを使うことです。
検索でフィルターを組み合わせて階層的facetsを使うには、階層的側面戦略を実装する必要があります。