1

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

<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 查询方法可能会导致多个文档被索引而不是一个。

4

2 回答 2

2

我遇到的几件事:-

  • 如果您有一对一的映射,则可以使用联接,以便通过一个查询本身获取所有字段。
  • 如果您有多个根记录,您将使用可能会创建多值字段的子实体。
  • 子实体对每条记录进行查询,因此性能较慢。

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

于 2012-11-14T05:11:03.353 回答
1

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

于 2012-11-14T07:17:41.347 回答