能否在Elasticsearch中实现类似含IN子查询的指定SQL语句?
Elasticsearch 实现等价SQL查询
当然可以实现。你的SQL逻辑是:从data索引(对应SQL的表)里找出所有uid属于“colX字段值为val1的文档的uid集合”的文档。下面是两种实现方式:
方式一:使用Terms Lookup DSL查询
这是Elasticsearch专门用来处理类似SQL中IN子查询场景的原生方式:
{ "query": { "terms": { "uid": { "index": "data", "path": "uid", "query": { "term": { "colX": "val1" } } } } } }
关键参数说明
index:指定要查询的索引(对应SQL里的data表)path:指定子查询中要提取的字段(也就是子查询的d2.uid)query:定义子查询的过滤条件(对应d2.colX='val1')
方式二:直接使用Elasticsearch SQL
如果你习惯用SQL语法,Elasticsearch本身支持SQL查询,直接运行你原有的SQL语句即可,它会自动转成底层DSL执行:
SELECT * FROM data WHERE uid IN (SELECT d2.uid FROM data d2 WHERE d2.colX='val1');
内容的提问来源于stack exchange,提问作者user3532232
相关产品推荐
相关产品推荐

