Sql Elasticsearch中的联接-嵌套查询或父查询能否处理此联接情况?
我在Elastic中有一些类似这样的数据(将其转换为表格格式,我就是这样描述的) 等等 我想做的是找到所有的实例,在这些实例中,action_taked='search'和user都在实验中_condition='B' 这在SQLLand中非常简单,但我正在努力找出如何在Elastic中实现这一点 我在这里查看了父/子查询: 但这似乎不是我想要的,但也许我只是有麻烦把我的大脑围绕着它 谢谢 编辑:以下是ES中的JSON记录Sql Elasticsearch中的联接-嵌套查询或父查询能否处理此联接情况?,sql,elasticsearch,Sql,elasticsearch,我在Elastic中有一些类似这样的数据(将其转换为表格格式,我就是这样描述的) 等等 我想做的是找到所有的实例,在这些实例中,action_taked='search'和user都在实验中_condition='B' 这在SQLLand中非常简单,但我正在努力找出如何在Elastic中实现这一点 我在这里查看了父/子查询: 但这似乎不是我想要的,但也许我只是有麻烦把我的大脑围绕着它 谢谢 编辑:以下是ES中的JSON记录 { "_index": "04-06-2017", "_type
{
"_index": "04-06-2017",
"_type": "logs",
"_id": "record_id_123",
"_score": null,
"_source": {
"@version": "1",
"@timestamp": "2017-04-06T03:59:42.000Z",
"datetime": "05/Apr/2017:23:59:42 -0400",
"duration": "05/Apr/2017:23:59:42 -0400",
"sessionid": "session_hash_1234",
"un": "user_id_1234",
"ev": "login",
"experimentGroup": "B"
},
"fields": {
"@timestamp": [
1491451182000
]
}
},
{
"_index": "04-06-2017",
"_type": "logs",
"_id": "record_id_567",
"_score": null,
"_source": {
"@version": "1",
"@timestamp": "2017-04-06T04:00:22.000Z",
"datetime": "06/Apr/2017:00:00:22 -0400",
"rc": "200",
"pcd": "85",
"duration": "06/Apr/2017:00:00:22 -0400",
"un": "user_id_1234",
"sessionid": "session_hash_1234",
"rtid": "query_hash_1234",
"js": "1",
"rs": "1422x889",
"cd": "16",
"ln": "en",
"tz": "GMT%20-04%3A00",
"action": "toc",
"event": "click",
"node": "BUTTON",
"ev": "search",
"query":"query_terms_here"
},
"fields": {
"@timestamp": [
1491451222000
]
},
}
我想做的是能够找到ev='search'中所有用户的所有记录,这些用户的实验组='B'因此,在与之斗争了一段时间后,我决定只做两个查询。通过使用python的弹性插件,我可以获得所需的数据,然后发出一个包含所有用户列表的术语查询 获取用户:
blob=es.search(index='my-index', body={
"size": 0,
"query": {
"query_string": {
"query": "settings.experimentGroup:\"A\""
}
}
})
然后把它变成一个列表
users_in_group_a = json_normalize(blob['hits']['hits'])
unique_users_in_a=list(set(users_in_group_a['_id']))
然后获取这些用户的结果:
blob = es.search(index='my-index', body={
"size":0,
'query': {
'filtered': {
'filter': {
'bool':{
'must':[
{'terms': { 'userid': [unique_users]}},
{'range':{'@timestamp':{'gte':1489280900154,'lte':1491005332057}}}
]
}
}
}
})
这个答案可能会有帮助:(提示:反规范化)感谢@Val的编辑和评论。如果我正确阅读了您对链接问题的回答,您建议在数据方面进行反规范化。我不能改变数据结构,它已经相当平坦了。我将用弹性数据结构更新我的问题。
blob = es.search(index='my-index', body={
"size":0,
'query': {
'filtered': {
'filter': {
'bool':{
'must':[
{'terms': { 'userid': [unique_users]}},
{'range':{'@timestamp':{'gte':1489280900154,'lte':1491005332057}}}
]
}
}
}
})