2

データの例を挙げます。(純粋にデモンストレーションのため、私は車についてあまり知りません)

トップカテゴリー、

Car, Computer, Shoes, ..

車にはさまざまな側面があります(サブカテゴリー)

Car - 2 door/4 door  
Car - Audi/Bmw/..

サブカテゴリは、別のサブカテゴリを持つことができます。

Audi - A series/S series/R series  

現在、製品は複数の親を持つことができます。

Audi A4 -child of- A series - Audi - Car 
Audi A4 -child of- 4 door  - Car (one shorter depth)

これをDBでどのようにモデル化しますか?

私は RDBMS 専用の検索機能のアプローチをいくつか見てきましたが、維持するのが大変そうです。
私はdjango-haystack、solrアプローチを見ています。
しかし、これを django の models.py でモデル化する必要があります。

これを行うにはどうすれば干し草の山の検索インデックスを作成できますか?

私はdjango/haystack/solr全体が初めてです。
私はsolrのサンプルドキュメントを見ました。
各アイテムには必要なデータがすべて含まれているようです。

DBでメタデータ(カテゴリツリー)とデータ(実際の商品アイテム)をどうにか切り離すことはできますか?
私はそれが正しいアプローチだと感じています、私は間違っていますか?

  • 編集

solr のファセット検索機能を使用したいということを忘れていました。
DB でモデル化した後、私の search_indexes.py は haystack でどのように見えるでしょうか?

4

1 に答える 1

0

これらは2つの異なるものです。

1 つは、アイテムの複数のプロパティを保存する場合です。このために、リレーショナル データベースを使用する場合は、entity-attribute-value パターンを使用します。eav-djangoは、django にこの実装を提供します。

ただし、より柔軟な (かつ煩雑でない) アプローチは、ドキュメント データベース (ソファなど) または他の NoSQL ソリューションを使用することです。これらは柔軟なスキーマを提供するため、特定のオブジェクト/アイテムについて保存する必要がある「プロパティ」または「メタデータ」の数について心配する必要はありません。

あなたの質問の他の部分は、 n深さの関係のツリーを維持することです。これは、ネストされたセット モデル(変更された事前注文ツリー トラバーサルとも呼ばれます)を使用して実装されます。eav と同様にdjango-mpttがあります。

于 2012-04-16T06:40:43.843 に答える