2015-02-04 1 views
0

Solr 4.10.1 버전에서 DocExpirationUpdateProcessorFactoryfactory를 사용하려고합니다.DocExpirationUpdateProcessorFactory가 레코드를 삭제하지 않습니다.

나는 내 solrconfig.xml

<updateRequestProcessorChain default="true"> 
    <processor class="solr.UUIDUpdateProcessorFactory"> 
     <str name="fieldName">id</str> 
    </processor> 

    <processor class="solr.TimestampUpdateProcessorFactory"> 
     <str name="fieldName">timestamp</str> 
    </processor> 
    <processor class="solr.processor.DocExpirationUpdateProcessorFactory"> 
     <int name="autoDeletePeriodSeconds">30</int> 
     <str name="ttlFieldName">ttl</str> 
     <str name="expirationFieldName">expire_at</str> 
    </processor> 
    <processor class="solr.LogUpdateProcessorFactory" /> 
    <processor class="solr.RunUpdateProcessorFactory" /> 
</updateRequestProcessorChain> 

에 다음을 포함했다 그리고 난 당신이 내가 사는 시간을 설정하고 볼 수 있듯이 내의 schema.xml

<field name="timestamp" type="date" indexed="true" stored="true" default="NOW" multiValued="false"/> 
    <field name="ttl" type="date" indexed="true" stored="true" default="NOW+60SECONDS" multiValued="false"/> 
    <field name="expire_at" type="date" indexed="true" stored="true" multiValued="false"/> 

에 다음을 포함했다 60 초, 문서를 삽입 할 때마다 30 초마다 삭제할 ​​것인지 확인한 다음 분이 지나지 않아 몇 시간 또는 몇 시간 후에 삭제되는지 확인합니다.

이것은 색인 된 문서에서 볼 수있는 것입니다. 문제가 무엇인지 알려주십시오. 아래에서 볼 수 있듯이 expire_at 필드는 Solr 문서에서 절대로 생성되지 않습니다.

나는 TTL 타입 date이 될 수있는 설정 되었기 때문이다
"id": "3888a8ac-fbc4-437a-8248-132384753c00", 
"timestamp": "2015-02-04T04:09:21.29Z", 
"_version_": 1492147724740460500, 
"ttl": "2015-02-04T04:10:21.29Z" 

답변

0

, 오히려 string를 입력하도록 설정해야하고 "+60SECONDS"로 설정해야하며,

+0

"NOW+60SECONDS"으로 어떻게 당신은 그것을 실행에 도착하지 않았다? 나는 같은 문제를 가지고있다. DocExpirationUpdateProcessorFactory는 절대로 호출되지 않습니다. expire_at 필드는 절대로 계산되지 않습니다. 내가 뭘 잘못하고 있을지 제안 해 줄 수 있니? –

+0

나는 질문에 답했다. 설정을 올리시겠습니까? – user1965449

+0

나는 그것을 작동시켰다. 나는 ttlFieldName을 설정하고 있었지만 들어오는 문서에 설정되지 않았습니다. 스키마에서는 기본값으로 문자열로 언급되었습니다. 하지만 expiredFieldName은 들어오는 문서에 ttlFieldName이있는 경우에만 계산됩니다. 나는 방법없는 모드를 사용하고 있습니다. –