2016-02-29 18 views
5

に私はカテゴリ内の製品に基づいてソートに関連する問題を解決したい: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

答えて

2

PRODUCT_CATEGORY行としてあなたのSolrドキュメントをモデル化しようとしないのはなぜ?

{ 
    product_id:p1, 
    category_id:c1, 
    weight:120 
}, 
{ 
    product_id:p1, 
    category_id:c2, 
    weight:130 
} 

これは、カテゴリページの要件をサポートします。あなたには、いくつかの製品の属性を検索し、重複除外するカテゴリ全体に必要がある場合

ザ・唯一の複雑な要因は、その理由が、製品である

+0

(このためfield-collapsing docを参照)が表示され、私は価格等に照会する必要があります他の多くの分野を持っています重量、送料無料など、これらのフィールドはすべての文書でも繰り返されます。私は一般的に上記の手法でシステムを重くしています。システムに1Mの製品があれば、5つのカテゴリに製品を関連付けることができれば平均して2つのフィールド、つまりcategory_idとweightを変更するだけです。 –

+0

Luceneは列ストアのようなシンボルテーブルを使用してフィールド値をエンコードします。一般に、データの重複は、リレーショナルDBの場合ほど問題にはなりません。 –

+0

また、Solrの結合機能を調べて、単純な製品を製品/カテゴリに追加できますかどうかを確認できますが、もう少し作業が必要になります。 –