我试图索引一个应用程序(它同时包含元数据和附件)。我正在使用DIH来构建solr文档。在我的DIH Config xml中,我定义了2个独立的实体,其中第一个实体将获取所有活动记录的元数据,第二个实体将获取所有这些记录的附件(可以是0到多个)。 这两个实体都有一个" SEQUENCE ID"有一种方法,我可以从我的第一个实体缓存SEQUENCE ID&在第二个实体中重用它? 感谢任何帮助 谢谢!
<entity name="metadata" query="SELECT sequence_id,field1,field2 from table1 where active_indicator='Y'">
<field column="sequence_id" name="seq_id"/>
<field column="field1" name="field_1"/>
<field column="field2" name="field_2" />
</entity>
<entity name="attachments" query="select t2.sequence_id,t2.field3 from table1 t1,table2 t2 where t1.sequence_id=t2.sequence_id and t1.sequence_id=(SELECT sequence_id from table1 where active_indicator='Y')">
<!--if i can get the t1.sequence_id cached, i can use them to select attachments for those seq ids alone-->
<field column="sequence_id" name="seq_id"/>
<field column="field3" name="field_3"/>
</entity>
</document>
答案 0 :(得分:0)
您可以将依赖实体包装在它所依赖的实体中,这样您就可以访问父实体中行的列值。 the community wiki中有一个示例,其中有多个实体。
<entity name="record" query="SELECT * FROM records">
<entity name="attachment"
query="SELECT field_1, field_2 FROM attachments WHERE SEQUENCE_ID='${record.SEQUENCE_ID}'">
<field name="attachment_val" column="field_1" />
</entity>
<field ... />
</entity>
这是基本的DIH配置,应该可以使用。要重写它以使用缓存实现(如果这是您要求的),您必须配置内部实体以选择所有行并使用缓存进行查找:
<entity name="attachment"
query="SELECT field_1, field_2 FROM attachments"
cacheKey="SEQUENCE_ID" cacheLookup="record.SEQUENCE_ID">
....
</entity>
否则功能应该相同。