分離する必要がある2つのインデックスがあります。
// index = `order_item`
{
"ID": 1,
"Name": "Shoes",
"Price": 9.99,
"OrderID": 82
},{
"ID": 1,
"Name": "Hat",
"Price": 19.99,
"OrderID": 82
}
// index = `order`
{
"ID": 82,
"Customer": "John Smith"
}
検索でこれらの2つのテーブルを「結合」して、次の行に沿って何かを返すにはどうすればよいですか。
results = {
"ID": 1,
"Name": "Shoes",
"Price": 9.99,
"Order.ID": 82,
"Customer": "John Smith"
},{
"ID": 1,
"Name": "Hat",
"Price": 19.99,
"Order.ID": 82,
"Customer": "John Smith"
}
他の質問 で回答したように、Customer
の名前を各order_item
インデックス作成時のドキュメント。ただし、専用のインデックスorders
があり、Customer
データも含まれています。すべてのドキュメントが必要に応じて「自己完結型」になるように、データを適切に非正規化することがすべてであることを忘れないでください。
curl -XPUT localhost:9200/order_items/order_item/1 -d '{
"ID": 1,
"Name": "Shoes",
"Price": 9.99,
"OrderID": 82,
"Customer": "John Smith"
}'
curl -XPUT localhost:9200/order_items/order_item/2 -d '{
"ID": 2,
"Name": "Hat",
"Price": 19.99,
"OrderID": 82,
"Customer": "John Smith"
}
このソリューションの利点は、各注文アイテムが完全に自己完結型であり、OrderID
でそれらをグループ化/集約して、特定の注文のすべてのアイテムを取得できることです。
また、@ JohnAmentがコメントで述べたように、order/order_item
ユースケースもどちらかを使用するための良い候補です
最初のケースでは、order
「親」ドキュメントが1つあります...
curl -XPUT localhost:9200/orders/order/82 -d '{
"ID": 82,
"Customer": "John Smith"
}'
そしていくつかのorder_item
親IDを使用してインデックスを作成した「子」ドキュメント:
curl -XPUT localhost:9200/order_items/order_item/1?parent=82 -d '{
"ID": 1,
"Name": "Shoes",
"Price": 9.99
}'
curl -XPUT localhost:9200/order_items/order_item/2?parent=82 -d '{
"ID": 2,
"Name": "Hat",
"Price": 19.99
}'
2番目の場合、order
ドキュメントには、ネストされたOrderItems
プロパティにすべての注文アイテムが含まれ、次のようになります。
curl -XPUT localhost:9200/orders/order/82 -d '{
"ID": 82,
"Customer": "John Smith"
"OrderItems": [
{
"ID": 1,
"Name": "Shoes",
"Price": 9.99
},{
"ID": 2,
"Name": "Hat",
"Price": 19.99
}
]
}'