使用ttl字段的默认值进行Solr自动删除

时间:2017-01-18 05:07:08

标签: solr solrj solrcloud

我正在尝试使用Solr-6的Solr自动删除功能。我在managed-schema.xml和solrconfig.xml中进行了以下更改。

管理型模式

<!--expiration date field-->
<field name="eDate" type="date" multiValued="false" indexed="true" stored="true"/>
<field name="ttl" type="string" multiValued="false" indexed="true" stored="true" default="+90SECONDS"/>

solrconfig

<processor class="solr.processor.DocExpirationUpdateProcessorFactory">
    <int name="autoDeletePeriodSeconds">30</int>
    <str name="ttlFieldName">ttl</str>
    <str name="expirationFieldName">eDate</str>
</processor>

如果我在传入文档中显式设置ttl字段或者在更新请求中设置ttl请求参数,我可以按预期使用自动删除功能。 但是,如果我没有显式设置ttl字段,我想使用托管模式中指定的ttl的默认值。当我尝试这个时,使用默认值生成ttl字段,但不生成相应的eDate字段。

有可能做我想做的事吗? 如果是,那我该怎么做?如果您需要任何进一步的细节,请发表评论。

1 个答案:

答案 0 :(得分:2)

我无法通过default描述中的field param使其正常工作,但我通过添加solr.DefaultValueUpdateProcessorFactory

来实现

在我的更新链中,我有这个:

    <processor class="solr.DefaultValueUpdateProcessorFactory">
        <str name="fieldName">ttl</str>
        <str name="value">+15SECONDS</str>
    </processor>
    <processor class="solr.processor.DocExpirationUpdateProcessorFactory">
        <int name="autoDeletePeriodSeconds">5</int>
        <str name="ttlFieldName">ttl</str>
        <str name="expirationFieldName">eDate</str>
    </processor>

我更改值以更快地测试:)链接到工作code