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

标签 solr solrj solrcloud

我正在尝试将 Solr 自动删除功能与 solr-6 一起使用。我在 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"/>

解决方案

<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 字段。

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

最佳答案

我无法通过 field 描述中的 default 参数使其工作,但我通过添加 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

关于Solr 使用 ttl 字段的默认值自动删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41711740/

相关文章:

solr - SolrCloud 上的自定义分片或自动分片?

java - AtomicReader 和 KNearestNeighbour train() 方法

solr - 使用 SolrJ 中的 CollectionAdminRequest.Create 创建集合

solr - 使用 Solr 索引 PDF

java - 从另一台机器使用 solr 服务器

solr - 使用 curl 创建 sol 集合

SolrCloud Collection API 返回错误请求

mysql - 将 MySQL 数据库和 XML 混合处理成 Solr 索引

search - solr 搜索多个类别和标签

solr : search query with spaces between words