繁体   English   中英

Solr DIH中的Join Query和Embedded Entities有什么区别?

[英]What is the difference between a Join Query and Embedded Entities in Solr DIH?

我正在尝试使用Solr的数据导入处理程序在多个表中索引数据。 DIH上的官方维基建议使用嵌入式实体链接多个表,如下所示:

<document>
    <entity name="item" pk="id" query="SELECT * FROM item">
        <entity name="member" pk="memberid" query="SELECT * FROM member WHERE memberid='${item.memberid}'>
        </entity>
    </entity>
</document>

另一种方法是:

<document>
    <entity name="item" pk="id" query="SELECT * FROM item INNER JOIN member ON item.memberid=member.memberid">
    </entity>
</document>

这两种方法在功能上有所不同吗? 有性能差异吗? 我的猜测是第一种方法是支持非SQL表,但我不确定。

另一个问题是,如果在MySQL中使用连接表,则使用具有多个连接的SQL查询方法可能会导致多个文档被索引而不是一个。

我遇到的一些事情: -

  • 如果您具有一对一映射,则可以使用连接,以便使用一个查询本身获取所有字段。
  • 如果您有多个根记录,您将使用可能创建多值字段的子实体。
  • 子实体为每个记录触发查询,因此性能较慢。

想听听其他用户的意见。

如果要优化性能,可以使用第二个选择来创建物化视图。 这意味着您可以直接从物化视图导入DIH(不在DIH中创建任何内部连接或子实体,这将意味着更快的导入和源数据库不会“过热”)如果您愿意,您可以创建一个cronjob每天或根据需要快速刷新物化视图。 如果您使用的是MySQL,可以在这里查看具体化视图的详细信息。 希望有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM