2016-05-26 10 views
1

私は、開始サイトをモデル化する例を持っています。サイトに数百のショップと数百万の製品があるとします。 1店舗あたりの製品数:1000〜100,000品目/ショップ私は、製品とショップのフィールドを集めることができる必要があります。すべての製品とすべてのショップは同じスキーマを持ちます。Elasticsearchでデータをモデル化する最も効率的な方法

製品

 { 
      "productName" 
      "price" 
      "category" 
     } 

ショップ

{ 
    "shopName" 
    "rating" 
} 

1)、A)1個のインデックス/ショップ、b)は同じインデックスと1種類/ショップまたはc)同じインデックスを持っていることが、より効率的です同じタイプで、製品の店を決定するフィールドがありますか?

私はいくつかの関連記事を読んでおり、そのほとんどは同じインデックスと1つのタイプ/ショップを好んでいます。しかし、彼らは、多数のドキュメントを持つ1つのインデックスがあれば、複数のインデックスを持つよりもさらに遅いかもしれない、と彼らは言う。

2)ショップと商品の間でJOINSと集計を実行する必要もあります。たとえば、8/10を超える店舗からすべての製品を取得し、カテゴリごとの製品数を取得できるようにする必要があります。 a)アプリケーション側のJOIN、b)親子関係、c)Siren plug-in、d)何か他のものを使用することが望ましいですか?

+0

最近私も同様の問題を解決しなければなりませんでした。まず、すべての検索シナリオを書き留めます。データの検索方法とクエリから返す必要があるものを考えます。次に、各ソリューションの長所と短所についてお読みください。答えがあります。たとえば、私が8/10を超える格付けを持つ何千ものショップを持っていて、他のクエリにこれらの何千ものIDを提供しなければならないので、アプリケーションの参加を使用しないと、パフォーマンスの問題が発生します。 –

+0

Thnx Adam。あなたは、すべてのシナリオを考える必要があるという点では間違いありません。私はデータを構造化することができる多くの異なる方法があり、私はその全ての意味を持っているわけではないということです。私はESの内部的な働きを理解するのに時間を費やす必要があると思います。 – panipsilos

+0

あなたは進歩しましたか? –

答えて

1

あなたが言及したユースケースに対して、私は間違いなく単一の非正規化インデックス/タイプを使用します。店舗用のフィールドがさらに必要になる場合は、最初の正規化されていないインデックスを維持しながら、店舗の別のインデックスを作成します。ショップ名の横にユニークなショップIDが必要な場合があることを忘れないでください。

+0

正規化されていないインデックス/タイプの唯一の問題は、あなたのショップデータが製品タイプの中にあり、店の詳細が変更される場合です。 –

+0

ESインデックスは、実際のデータの検索可能なビューとして認識される必要があります。そのため、将来のインデックス再作成のために常にインデックスを設計する必要があります。 – xeye

+0

こんにちは。パフォーマンスに関して、私はいくつかの簡単なテストを行いました。結論としては、約30店舗と約300,000品目について、1つのインデックス/ショップまたは単一のインデックスと1つのタイプ/ショップの間に有意差はなかったという結論でした。だから私は単一のインデックスと1つのタイプ/ショップの理由に賛成している私はまた、メタデータなどのためのいくつかの他のインデックスを使用する必要がありますしかし、その後、私は特定のタイプ(店)のすべてのドキュメントを削除することができる必要があり、 ES 2.xxはそれをそのままの状態でサポートしていません。 – panipsilos

関連する問題