问题描述
两个索引文件如下:
class First(Document):
class Index:
name = 'first'
case_id = Keyword()
name = Text()
class Second(Document):
class Index:
name = 'second'
case_id = Keyword()
status = Text()
select * from first as f,second as s where s.case_id = f.case_id or s.status = 'xyz'
解决方法
-
弹性搜索不支持索引之间的联接
原因:弹性搜索不是关系数据,应将非规范化数据存储在此处。
摘录自以下elastic Doc:
在像这样的分布式系统中执行完整的SQL风格的联接 Elasticsearch非常昂贵。相反,Elasticsearch 提供了两种可水平缩放的连接形式。
-
根据用例,使用嵌套或父/子映射来存储数据。
嵌套::如果嵌套文档的基数很低并且索引读取强度很高
父母/孩子::如果孩子的基数非常高,并且父母/孩子需要经常更新