我可以在elasticsearch中表达一个类似于下面sql查询的查询吗?
select * from data where data.uid in(select d2.uid from data d2 where d2.colX='val1');
4xy9mtcn1#
有两种可能的解决方案。你可以先运行一个查询来获取一个ID列表,然后使用这些ID来运行第二个查询(术语查询)。如果你知道第一个查询的结果将保持在65,536个ID/术语以下,请使用这种方法。Elasticsearch对这个数量有default limit限制。你不应该增加这个限制,它是有原因的!您可以使用嵌套文档或父/子文档。主要区别是嵌套文档比父/子文档更快,但是,嵌套文档需要重新索引父文档及其所有子文档,而父/子文档允许重新索引/添加/删除特定子文档。我没有足够的上下文来了解哪种类型的连接最适合您的情况。如果Elasticsearch不是必需的,你可能想看看Clickhouse,它支持现成的连接查询(以SQL方式)。
1条答案
按热度按时间4xy9mtcn1#
有两种可能的解决方案。
你可以先运行一个查询来获取一个ID列表,然后使用这些ID来运行第二个查询(术语查询)。如果你知道第一个查询的结果将保持在65,536个ID/术语以下,请使用这种方法。Elasticsearch对这个数量有default limit限制。你不应该增加这个限制,它是有原因的!
您可以使用嵌套文档或父/子文档。主要区别是嵌套文档比父/子文档更快,但是,嵌套文档需要重新索引父文档及其所有子文档,而父/子文档允许重新索引/添加/删除特定子文档。我没有足够的上下文来了解哪种类型的连接最适合您的情况。
如果Elasticsearch不是必需的,你可能想看看Clickhouse,它支持现成的连接查询(以SQL方式)。