Dav*_*542 11 json elasticsearch
我有两个必须分开的索引:
// 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"
}
Run Code Online (Sandbox Code Playgroud)
我将如何在搜索中"加入"这两个表格,以便它返回以下内容:
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"
}
Run Code Online (Sandbox Code Playgroud)
Val*_*Val 15
正如您在其他问题中所解释的那样,没有什么可以阻止您在索引时将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"
}
Run Code Online (Sandbox Code Playgroud)
此解决方案的优点是每个订单项都是完全独立的,您可以对它们进行分组/聚合OrderID
,以获取给定订单的所有项目.
另外,正如@JohnAment在评论中提到的,order/order_item
用例也是使用其中任何一个的好选择
在第一种情况下,你有一个order
"父"文件......
curl -XPUT localhost:9200/orders/order/82 -d '{
"ID": 82,
"Customer": "John Smith"
}'
Run Code Online (Sandbox Code Playgroud)
以及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
}'
Run Code Online (Sandbox Code Playgroud)
在第二种情况下,您的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
}
]
}'
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
17983 次 |
最近记录: |