に私はカテゴリ内の製品に基づいてソートに関連する問題を解決したい:Solrのソート動的な列
私は3つのテーブル
製品
|-------id----------|-----name-------|
| p1 | Prod 1 |
| p2 | Prod 2 |
| p3 | Prod 3 |
| p4 | Prod 4 |
| p5 | Prod 5 |
|-------------------|----------------|
カテゴリー
|-------id----------|-----name-------|
| c1 | Cat 1 |
| c2 | Cat 2 |
| c3 | Cat 3 |
| c4 | Cat 4 |
|-------------------|----------------|
を持っています
Product_Category
|-----prod id-------|-----cat id-----|----score----|
| p1 | c1 | 120 |
| p1 | c2 | 130 |
| p2 | c1 | 150 |
| p2 | c3 | 120 |
| p2 | c2 | 140 |
| p3 | c2 | 180 |
| p3 | c3 | 160 |
|-------------------|----------------|-------------|
これは、複数のカテゴリに分類された商品があることを意味します。 私はsolrクエリによって各カテゴリのリストページを動的に生成しています。
は、現在、私のSolrのdocに見える
{
product_id:p1,
category_id:[c1, c2]
}
私が今直面しています挑戦私は順序とリストに製品P1、P2を持つことになり、C1のページを一覧表示する製品カテゴリの重量、すなわちに基づいてソートをサポートする必要があるような私は
{
product_id:p1,
category_id:[c1, c2],
c1_weight: 120,
c2_weight: 130
}
などのドキュメントを見たいと私はフィールドを追加する必要があります。この方法は、スキーマを変更した場合はC3のP3、P2、P1
を(スコアの高い順)となります新しいカテゴリを追加するたびにcx_weightをスキーマに追加して、cx_weightフィールドでソートできるようにします。
ソルのソートメカニズムを使用してカテゴリの重みをソートすることができ、カテゴリを追加するたびにスキーマを変更する必要がないソリューションを教えてください。
おかげ Dheerendra
(このためfield-collapsing docを参照)が表示され、私は価格等に照会する必要があります他の多くの分野を持っています重量、送料無料など、これらのフィールドはすべての文書でも繰り返されます。私は一般的に上記の手法でシステムを重くしています。システムに1Mの製品があれば、5つのカテゴリに製品を関連付けることができれば平均して2つのフィールド、つまりcategory_idとweightを変更するだけです。 –
Luceneは列ストアのようなシンボルテーブルを使用してフィールド値をエンコードします。一般に、データの重複は、リレーショナルDBの場合ほど問題にはなりません。 –
また、Solrの結合機能を調べて、単純な製品を製品/カテゴリに追加できますかどうかを確認できますが、もう少し作業が必要になります。 –