我正在尝试在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
答案 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