如何在2个独立实体之间启用solr文档缓存?

时间:2016-11-02 11:48:26

标签: caching solr

我试图索引一个应用程序(它同时包含元数据和附件)。我正在使用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>

1 个答案:

答案 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>

否则功能应该相同。