在云模式下使用DocExpirationUpdateProcessorFactory的文档上的solr TTL不起作用

时间:2018-05-04 12:28:13

标签: solr solrcloud ttl

我正在尝试在solr文档上实现TTL,如下面的链接所示:

DocExpirationUpdateProcessorFactory

当我在本地计算机中以独立模式启动solr时,更改正常。但是当我在云模式下启动solr(Solr安装可用的示例云模式)并执行必要的更改(如下所述)时,expire_at字段不会使用my_ttl字段中的计算日期值进行更新。 我可以看到保存的文档只有my_ttl字段和id字段,expires_at字段在保存的文档中不可用。

在这种情况下,有人能帮我理解我做错了什么吗?

solr-config.xml中的更改

 <updateRequestProcessorChain name="add-unknown-fields-to-the-schema">
<!-- UUIDUpdateProcessorFactory will generate an id if none is present in the incoming document -->
<processor class="solr.processor.DocExpirationUpdateProcessorFactory">
    <str name="ttlFieldName">my_ttl_</str>
    <str name="ttlParamName">_ttl_</str>
    <int name="autoDeletePeriodSeconds">120</int>
    <str name="expirationFieldName">expires_at_</str>
</processor>
<processor class="solr.LogUpdateProcessorFactory"/>
<processor class="solr.DistributedUpdateProcessorFactory"/>
<processor class="solr.RunUpdateProcessorFactory"/>

托管架构文件中的更改

<field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" />
<field name="my_ttl" type="string" indexed="true" stored="true" required="false" multiValued="false" />
<field name="expires_at_" type="date" indexed="true" stored="true" required="false" multiValued="false" />

POST REQUEST

curl -H "Content-Type: application/json" -X POST -d '[{"id":"1","my_ttl":"+120SECONDS"}]' http://localhost:8983/solr/dailyforecasts/update?comit=true

{&#34; responseHeader&#34; {&#34;状态&#34;:0,&#34; QTIME&#34;:8}}

此更新成功运行,但expires_at_字段未在保存的文档中更新,因此尽管在sole-config.xml中设置了时间,文档仍然永远不会被删除

但是如果我明确地将文档中的expires_at_字段设置为过去的日期,那么文档将被保存并在到期触发时间之后被删除。

curl -H "Content-Type: application/json" -X POST -d '[{"id":"1","my_ttl":"+120SECONDS", "expires_at_":"2018-01-01T00:00:00Z"}]' http://localhost:8983/solr/dailyforecasts/update?comit=true

1 个答案:

答案 0 :(得分:0)

最后,我弄清楚了以上更改为何不起作用。 我必须在请求中提及更新请求处理器链的名称,否则solr将使用默认的更新请求处理器链。 在将update.chain=add-unknown-fields-to-the-schema作为参数添加到请求URL之后,索引后的solr文档已按预期正确填充了expires_at_字段。

  

localhost:8983 / solr / coll1 / update?commit = true&update.chain = add-unknown-fields-to-the-schema