1

この質問がされた場合は申し訳ありませんが、この件に関して明確な答えが見つかりませんでした。

Elasticsearch インデックスの作成中に問題が発生しました。関係を適切に管理する方法がよくわかりません。

次のエンティティがあるとします。

  • 製品
    • ID
    • 参照
    • ID
    • 名前
    • 製品番号
  • シャツ
    • ID
    • 製品番号
  • ストックアイテム
    • ID
    • サプライヤーID
    • 製品番号

そうしたいです :

  • 色からシャツを探す
  • Supplier_id 5 で指定されたすべての本を検索します

複数のクエリ、ネストされたオブジェクト、親子関係などを実行する必要があるかどうかを見つけることができませんでした...「そのように実行する」という適切なチュートリアルが見つかりませんでした。

実際、私はネストされたオブジェクトを扱っていますが、必要なすべてのデータを自分の型ごとに再定義するのはかなり面倒です。

これについてアドバイスはありますか?

ありがとう。

4

2 に答える 2

1

Elasticsearch で関係を検索してモデル化するための鍵は、非正規化です。これは、Lucene には、データ内のリレーションシップのサポートが組み込まれていないフラットなデータ モデルがあるためです。

検索結果の観点から考えてみてください。探し物は何ですか?検索結果には何が表示されますか? それはあなたが探しているものです。関連オブジェクトの値に基づいてそれらをフィルタリングまたはソートする場合は、インデックス作成時にそれらの値を取得する必要があります。

シャツを検索していて、色でフィルタリングしたい場合は、シャツのドキュメントすべてにcolorフィールドが必要です。書籍を検索していて、特定のサプライヤーにフィルターをかけたい場合は、書籍ドキュメントのフィールドとしてサプライヤー名または ID を含める必要があります。

言語と ES クライアントの選択により、これが容易になる場合があります。たとえば、Ruby では、任意のメソッド呼び出しの結果にインデックスを付けることができます。これにより、データにインデックスを付けながら、関連する他のモデルから動的にフェッチできます。

于 2015-08-13T00:26:23.513 に答える
0

ネストされた構造または親子関係が最善の策です。このブログがお役に立てば幸いです。

于 2015-08-12T18:43:09.750 に答える