DocExpirationUpdateProcessorFactory не удаляет записи

Я пытаюсь использовать DocExpirationUpdateProcessorFactoryfactory в версии Solr 4.10.1.

Я включил следующее в свой 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, как показано ниже.

"id": "3888a8ac-fbc4-437a-8248-132384753c00",
"timestamp": "2015-02-04T04:09:21.29Z",
"_version_": 1492147724740460500,
"ttl": "2015-02-04T04:10:21.29Z"

person user1965449    schedule 04.02.2015    source источник


Ответы (1)


Это потому, что я устанавливал ttl для типа date, он должен быть установлен для типа string и должен быть установлен как "+60SECONDS", а не как "NOW+60SECONDS"

person user1965449    schedule 04.02.2015
comment
Как ты заставил его работать? У меня точно такая же проблема. Я думаю, что DocExpirationUpdateProcessorFactory никогда не вызывается. Поле expire_at никогда не вычисляется. Не подскажете, что я могу делать не так? - person rudedude; 02.03.2015
comment
Я ответил на вопрос, не могли бы вы опубликовать свои конфиги? - person user1965449; 03.03.2015
comment
Я заработал. Я устанавливал ttlFieldName, но он никогда не устанавливался во входящих документах. В схеме это было указано как строка со значением по умолчанию. Но очевидно, expiredFieldName вычисляется только тогда, когда ttlFieldName существует во входящем документе. Кстати, я использую бессхемный режим. - person rudedude; 03.03.2015