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

时间:2012-11-13 21:36:25

标签: solr dataimporthandler dih

我正在尝试使用Solr的数据导入处理程序在多个表中索引数据。 official wiki on the 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查询方法可能会导致多个文档被索引而不是一个。

2 个答案:

答案 0 :(得分:2)

我遇到的一些事情: -

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

也想听听其他用户的意见。

答案 1 :(得分:1)

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