newegg.com にアクセスすると (ほんの一例です)、製品を閲覧しているときに、左側のサイドバーの各製品属性の横にアイテム数が表示されます。
一部のアイテムには非常に多くの属性があり、製品フィルターには非常に多くの異なる構成があるため、どのようにしてこれらすべての合計を非常に高速に計算するのでしょうか?
newegg.com にアクセスすると (ほんの一例です)、製品を閲覧しているときに、左側のサイドバーの各製品属性の横にアイテム数が表示されます。
一部のアイテムには非常に多くの属性があり、製品フィルターには非常に多くの異なる構成があるため、どのようにしてこれらすべての合計を非常に高速に計算するのでしょうか?
newegg.com では、endecaが提供するファセット ナビゲーション テクノロジを使用しています。
簡単に言えば、endeca は実際に xml/csv で提供されるデータを使用するか、任意のデータベース (mysql に限定されない) からデータを直接取得し、類似性を計算して結果を独自の形式にグループ化します。
Endeca は無料ではなく、 sphinxやlucene solrなどのオープンソースの代替手段です。
Newegg は Endeca を使用しており、おそらく Endeca の初期の顧客の 1 人でした。振り返ってみると、Endeca は彼らの成功に大きく貢献した可能性があります。ファセット ナビゲーションは、コンピューター部品のような複雑な電子機器で非常にうまく機能します。
ファセット ナビゲーションで考慮すべき点がいくつかあります。
1) カテゴリ駆動型のクエリでファセット ナビゲーションだけが必要ですか、それとも検索でも動作するようにしたいですか? 実際、カテゴリは一種の階層的な側面です。
2) Solr の非正規化逆インデックス モデルは問題を引き起こしますか?
1) に対する答えが true の場合 (おそらくそうです)、逆インデックスが必要になります。逆インデックスは、キーワード検索を行う唯一の方法です。彼らはまた、いくつかの注意を払ってファセットを行います。
基本的に、各ファセットを逆インデックスと見なすことができます (実際、キーワード検索はランキング機能を備えた特別なファセットと見なされる場合があります)。次に、カウントを行うには、現在のクエリとフィルターを他のすべてのファセット値と交差させる必要があります。ただし、まばらな製品セットを表す必要がある場合、このモデルは問題を引き起こす可能性があります (2 を参照)。
2) の答えが正しい場合は、OLAP の観点からファセットについて考えることがより役立つかもしれません。逆インデックスが抽象化なしで複雑な関係を処理できるかどうかはわかりません。
フルテキスト (通常は逆インデックスとして実装) および/または OLAP のブレンドとして、ファセット検索/ナビゲーションを検討および実装することは公平です。
列ストアを使用してファセットを実行できると確信していますが、キーワード検索が必要な場合は、自由に逆インデックスをマージしてマージする必要があります。
@ダン・グロスマン:
そう思われるかもしれませんが --
ファセットの組み合わせは何通りあるか、ちょっと考えてみましたか?そのような多くのページをキャッシュすることはできません。Newegg.com には、空の星よりも多くの組み合わせが存在する可能性があります。
複数の選択を追加すると、さらに悪化します。ゲームオーバー。
フィルタリングされていない場合や一般的にフィルタリングされている場合など、一部のケースのみをキャッシュできます。再帰のレベルを制限せずに Newegg.com をスパイダーしようとすると、スパイダーが殺されます。ファセット サイトは、まさにこの理由で、一般的に検索エンジンに問題を引き起こします。http://www.searchmarketingstandard.com/facets-navigational-seo-powerhouse-partを参照してください
彼らがそれらを速く計算することをあなたは知りません。レンダリングが高速であることだけはわかります。これらの合計を計算してページをレンダリングし、結果をキャッシュして、データを更新する必要があるときまでそれらの静的ファイルを提供するのに何時間も費やす可能性があります。