【发布时间】:2014-09-09 07:07:39
【问题描述】:
我使用mongodb将登录数据存储为一个集合,例如:
// userA 登录模块 mA:
{
"_id" : ObjectId("uuid 1"),
"user" : "userA",
"module" : "mA",
"collectDate" : ISODate("2013-03-18T08:25:11.601Z")
}
// userA也登录模块mB:
{
"_id" : ObjectId("uuid 2"),
"user" : "userA",
"module" : "mB",
"collectDate" : ISODate("2013-03-18T08:34:15.106Z")
}
// userB登录模块mB:
{
"_id" : ObjectId("uuid 3"),
"user" : "userB",
"module" : "mB",
"collectDate" : ISODate("2013-03-18T08:34:15.106Z")
}
然后使用map-reduce框架统计每个用户每天多少次 结果如下所示: // 计数为 2,因为 userA 登录 mA 和 mB
{
"_id" : {
"user" : "userA",
"date" : ISODate("2013-03-18")
},
"value" : {
"count" : 2.0
}
}
//计数为1,因为userB登录mB
{
"_id" : {
"user" : "userB",
"date" : ISODate("2013-03-18")
},
"value" : {
"count" : 1.0
}
}
问题是如何将缩减的结果移动到 Elastic 搜索中? 我希望 ES 中的数据显示为:
{
"user" : "userA",
"date" : ISODate("2013-03-18")
"count" : 2
},
{
"user" : "userB",
"date" : ISODate("2013-03-18")
"count" : 1
}
如何更改嵌套数据?
我使用以下命令:
curl -XPUT "es.server.com:9200/_river/Entity/_meta" -d '
{
"type":"mongodb",
"mongodb":{
"servers":[{"host":"mongodb.server.com","port":27017 }],
"options":{"secondary_read_preference":true},
"db":"udc","collection":"Entity"
},
"index":{
"name":"udc","type":"Entity"
}
}'
但是导入的数据不符合我的要求,如下图:
{
_index: udc
_type: user
_id: {
"user" : "userA" ,
"date" : {
"$date" : "2013-06-22T07:00:00.000Z"
}
}
_version: 1
_score: null
_source: {
_id: {
date: 2013-06-22T07:00:00.000Z
user: userA
}
value: {
count: 18
}
}
sort: [
user
]
}
【问题讨论】:
标签: mongodb elasticsearch elasticsearch-mongo-river