在 Elasticsearch 中,我需要所有用户ID是执行这样的另一个elasticsearch查询的结果的文档
{
"size": 200,
"query": {
"bool": {
"must": {
"match": {
"targetId": {
"query": 1234
}
}
}
}
},
"_source": {
"includes": [
"userId"
],
"excludes": []
}
}
如果在sql中执行,将产生与下面类似的查询。
select * from mytable where userId in (select userId from mytable where targetId = 1234);
但是我无法形成类似的elasticsearch查询,还有其他吗
在Elasticsearch中实现子查询的方法
为了详细说明问题,我在下面添加了数据
"hits": [
{
"_index": "idx0",
"_type": "1234",
"_id": "1235-1486716882293",
"_source": {
"targetid": "42644",
"userid": "15784334830333693",
}
},
{
"_index": "idx0",
"_type": "1234",
"_id": "1235-1486716882293",
"_source": {
"data": {
"info":"user data available"
},
"userid": "15784334830333693",
}
},
{
"_index": "idx0",
"_type": "1234",
"_id": "1235-1486716882293",
"_source": {
"data": {
"info":"user data available"
},
"userid": "00000034830333693",
}
}
]
从上面的数据中可以看到,用户文档中的数据仅包含userid,达到目标的用户信息存储在另一个具有targetid和userid的文档中。
为了找出实现目标的用户,我需要执行两个查询
1.使用我拥有的targetid获取用户ID ES,
2.从先前的查询中获取所有具有用户标识的文档。
还有其他任何方法可以在单个查询中执行此操作。
最佳答案
ES中不允许内部联接。来自RDBMS世界,很难联系,但是关系是速度的权衡。
ES具有各种其他处理关系的方式,在here中进行了详细讨论。
关于elasticsearch - ElasticSearch中的子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42219053/