4

ES(またはそのことについてはSolr)を使用した製品バリアントのモデリングに頭を悩ませています

考えてみてください(考案された例):

  • さまざまな製品(Tシャツなど)
  • 各製品には一連のプロパティ(productid、name、desc、brand、color、popularity)があります。
  • 各製品には、プロパティ(productvariantid(productid ++ sizeの組み合わせ)、productid、size、availability、price)を持つ一連のproductvariantがあります。

これは、製品と製品バリアントの間の標準的な親子関係のようです。そこで、ESでそのようにモデル化したいと思います。

次のことができるようになりたいです。

  • A. productvariantsをクエリします(そしてすべてのプロパティを返します)。product-propertiesを返す必要はありません。productvariantプロパティで十分です。

  • B.各ユーザークエリは、製品ごとに最大1つのproductvariantが一致するように制約されます(上記の例では、productvariant.sizeに制約することを意味します)

  • C.価格でフィルタリングします。

  • D.製品のいくつかのプロパティをフィルタリングする

  • E.価格で注文する

  • F.人気などの製品の特性に関する注文、または2の組み合わせ。

  • G.productvariant.priceのファセット

  • H.製品の複数のプロパティに関するファセット(親)

親/子ドキュメントおよびhas_parentESでこれを行う:AE+Gが可能です。

しかし、FHはどうですか?私は_scopeファセット(確かに可能性を100%理解していませんが)や頭に浮かぶ他のすべてのものについて調べましたが、製品のプロパティのファセットを表示して可能にするための明白な解決策は見当たりませんと組み合わせてそれらでソートしますhas_parent

私は他のことを(紙の上で)試しました-has_child->運がなくてもバリアント情報が返されます-埋め込まれたドキュメント(製品内のバリアント)とすべてのバリアントを含む製品全体が返されます。不格好な感じがします。さらに、私はそのように価格でファセット/注文することはできないと確信しています。

感謝します

4

1 に答える 1

5

私は、同様のスキームを機能させるために、長い間壁に頭をぶつけました。私のスキームは、製品/ベンダーの関係でした(複数のベンダーによって販売された単一の製品、潜在的に異なる説明/価格/可用性)。

ESでの親->子のマッピングは、現時点ではそれほど堅牢ではなく、使いやすいものでもありません。何かが機能していても、ESがサポートしていないため、文字通り不可能なエッジケースにすぐに遭遇します。

親子マッピングを自分で管理し、ドキュメントを自分のインデックスに保存するのが最善の策だと思います。製品にはIDがあり、ProductVariantドキュメントにProduct_IDとして保存されます。これは実際、ESが親->子の関係を内部的に保存する方法です。

実際には、「トップレベル」のインデックス(Products)をクエリしてから、Product_IDフィールドのフィルターを使用してProductVariantのインデックスに対して2番目のクエリを実行します。

維持するのは少し面倒ですが、はるかに柔軟です。少なくともESがより良い親->子機能を取得するまで

于 2012-12-20T20:46:43.790 に答える