是的,這是可以用彈性,b首先,你必須將你的數據從SQL表建模到基於文檔的no-sql數據。
嵌套文檔的方法
1)可以按如下
{
"purchasedDate": "2017-04-05",
"revenue": 30,
"user": {
"id": 1,
"city": "delhi",
"event": [{
"name": "signup",
"time": "2017-04-05"
}]
}
}
對於這個數據模型數據的一個實例模型,你還需要增加配套映射
{
"mappings": {
"type_name": {
"properties": {
"purchasedDate": {
"type": "date"
},
"revenue": {
"type": "integer"
},
"user": {
"type": "object",
"properties": {
"id": {
"type": "integer"
},
"city": {
"type": "text"
},
"event": {
"type": "nested",
"properties": {
"name": {
"type": "text"
},
"time": {
"type": "date"
}
}
}
}
}
}
}
}
}
最後你可以啓動下面的查詢來獲得想要的結果
{
"size": 0,
"aggs": {
"revenue_sum": {
"sum": {
"field": "revenue"
}
}
},
"query": {
"bool": {
"must": [{
"term": {
"purchasedDate": {
"value": "2017-04-05"
}
}
}, {
"term": {
"user.city": {
"value": "delhi"
}
}
}, {
"nested": {
"path": "user.event",
"query": {
"bool": {
"must": [{
"term": {
"user.event.name": {
"value": "signup"
}
}
}, {
"term": {
"user.event.time": {
"value": "2017-04-05"
}
}
}]
}
}
}
}]
}
}
}
爲furthur閱讀,你可以參考以下鏈接
mappings nested datatype
親子方法
映射
{
"mappings": {
"user": {
"properties": {
"city": {
"type": "text"
}
}
},
"event": {
"_parent": {
"type": "user"
},
"properties": {
"name": {
"type": "text"
},
"time": {
"type": "date"
}
}
},
"order": {
"_parent": {
"type": "user"
},
"properties": {
"purchasedDate": {
"type": "date"
},
"revenue": {
"type": "integer"
}
}
}
}
}
指數用戶,爲了和事件的文件
POST data_play2/user/1
{
"city":"london"
}
POST data_play2/order/10?parent=1
{
"purchasedDate":"2017-04-05",
"revenue": 100
}
POST data_play2/event/1?parent=1
{
"userid" : 1,
"name" : "signup",
"time" : "2017-04-05"
}
查詢
{
"size": 0,
"aggs": {
"revenue": {
"children": {
"type": "order"
},
"aggs": {
"filtered_order": {
"filter": {
"bool": {
"must": [{
"term": {
"purchasedDate": {
"value": "2017-04-05"
}
}
}]
}
},
"aggs": {
"revenue_sum": {
"sum": {
"field": "revenue"
}
}
}
}
}
}
},
"query": {
"bool": {
"must": [{
"term": {
"city": {
"value": "london"
}
}
}, {
"has_child": {
"type": "order",
"query": {
"bool": {
"must": [{
"term": {
"purchasedDate": {
"value": "2017-04-05"
}
}
}]
}
}
}
}, {
"has_child": {
"type": "event",
"query": {
"bool": {
"must": [{
"term": {
"name": {
"value": "signup"
}
}
}, {
"term": {
"time": {
"value": "2017-04-05"
}
}
}]
}
}
}
}
]
}
}
}
請參閱本link爲furthur閱讀
希望這有助於
我們能解決父子relationship.Where用戶作爲父母,順序和事件表是用戶的子項,架構與所有表相同。 – Sandy
是啊,你可以,親子會更好,如果你有大量的訂單爲每個用戶作爲文件的大小將在限制 – user3775217
可以請你分享查詢,如果我有用戶作爲父母和訂單和事件作爲孩子和所有的模式都與mysql相同。 – Sandy