【问题标题】:How do I join two ElasticSearch indices using elasticsearch-dsl-py?如何使用 elasticsearch-dsl-py 加入两个 ElasticSearch 索引?
【发布时间】:2020-08-21 16:48:31
【问题描述】:

两个索引文件如下:

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 查询来做到这一点?

【问题讨论】:

    标签: python-3.x elasticsearch dsl


    【解决方案1】:
    1. Elastic Search 不支持索引之间的连接

      原因: Elastic Search 不是关系型的,非规范化的数据应该存储在这里。

      摘自以下elastic Doc

    在分布式系统中执行完整的 SQL 样式连接,例如 Elasticsearch 非常昂贵。相反,Elasticsearch 提供两种形式的连接,旨在水平扩展。

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

      嵌套:如果嵌套文档的基数非常低并且索引是读取密集型的

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

    【讨论】:

    • 或第三个选项:简单地对您的数据进行非规范化
    猜你喜欢
    • 1970-01-01
    • 2018-08-29
    • 2016-01-24
    • 1970-01-01
    • 1970-01-01
    • 2016-03-27
    • 1970-01-01
    • 2019-02-09
    • 2020-03-10
    相关资源
    最近更新 更多