如何使用elasticsearch-dsl-py连接两个ElasticSearch索引?

问题描述

两个索引文件如下:

class First(Document):

    class Index:
       name  = 'first'
       
   case_id = Keyword()
   name = Text()
   
class Second(Document):

    class Index:
       name  = 'second'
       
   case_id = Keyword()
   status = Text()

我只想以sql格式执行如下查询

select * from first as f,second as s where s.case_id = f.case_id or s.status = 'xyz'

如何使用弹性搜索dsl查询来做到这一点?

解决方法

  1. 弹性搜索不支持索引之间的联接

    原因:弹性搜索不是关系数据,应将非规范化数据存储在此处。

    摘录自以下elastic Doc

在像这样的分布式系统中执行完整的SQL风格的联接 Elasticsearch非常昂贵。相反,Elasticsearch 提供了两种可水平缩放的连接形式。

  1. 根据用例,使用嵌套或父/子映射来存储数据。

    嵌套::如果嵌套文档的基数很低并且索引读取强度很高

    父母/孩子::如果孩子的基数非常高,并且父母/孩子需要经常更新