连接查询和Solr-DIH中的嵌入实体之间有什么区别?
我试图使用Solr的数据导入处理程序跨多个表索引数据。建议使用嵌入式实体链接多个表,如下所示:连接查询和Solr-DIH中的嵌入实体之间有什么区别?,solr,dataimporthandler,dih,Solr,Dataimporthandler,Dih,我试图使用Solr的数据导入处理程序跨多个表索引数据。建议使用嵌入式实体链接多个表,如下所示: <document> <entity name="item" pk="id" query="SELECT * FROM item"> <entity name="member" pk="memberid" query="SELECT * FROM member WHERE memberid='${item.memberid}'>
<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>
我遇到的几件事:
- 如果您有一对一映射,您可以使用联接,这样您就可以通过一个查询本身获得所有字段
- 如果根目录有多条记录,则将使用可能创建多值字段的子实体
- 子实体为每个记录触发一个查询,因此性能较慢
也希望听取其他用户的意见。如果要优化性能,可以使用第二个选择创建物化视图。这意味着您可以直接从物化视图导入DIH(无需在DIH中创建任何内部联接或子实体,这意味着导入速度要快得多,并且源数据库不会“过热”),如果您愿意,您可以创建一个cronjob,每天或根据需要快速刷新物化视图。如果您使用的是MySQL,您可以查看有关物化视图的详细信息。
希望这会有所帮助。我认为重要的一点是:对于一对一表,使用join可能会更快,但会导致为一对多或多对多关系索引多个文档。
<document>
<entity name="item" pk="id" query="SELECT * FROM item INNER JOIN member ON item.memberid=member.memberid">
</entity>
</document>