solr TTL для документов, использующих DocExpirationUpdateProcessorFactory в облачном режиме, не работает

Я пытаюсь реализовать TTL для документов solr, как указано в ссылке ниже:

DocExpirationUpdate

Изменения работают нормально, когда я запускаю 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"/>

changes in managed-schema file

<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" />

ПОСЛЕ ЗАПРОСА

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

{"responseHeader": {"status": 0, "QTime": 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

person blankCoder    schedule 04.05.2018    source источник
comment
Так где же вы вносите эти изменения? Работает ли это, если вы используете имя поля _ttl_ (по умолчанию)? Когда вы работаете в облачном режиме, все данные конфигурации хранятся в zookeeper.   -  person MatsLindh    schedule 04.05.2018
comment
Я мог видеть изменения конфигурации, отображаемые в пользовательском интерфейсе solr, из файлов в облаке. Я загружаю конфигурацию из zookeeper, меняю ее и снова загружаю. Конфигурация также не работает с параметром ttl.   -  person blankCoder    schedule 07.05.2018
comment
@MatsLindh я вношу изменения в managed-schema и solr-config.xml после загрузки конфигурации из zk, используя команды solr zk downconfig и upconfig для обратной загрузки конфигурации.   -  person blankCoder    schedule 24.05.2018


Ответы (1)


наконец, я понял, почему вышеуказанные изменения не работают. Я должен указать имя цепочки обработчиков запросов на обновление в моем запросе, иначе 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

person blankCoder    schedule 26.10.2018