TTL для документов, использующих DocExpirationUpdateProcessorFactory в облачном режиме, не работает - PullRequest
0 голосов
/ 04 мая 2018

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

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

ЗАПРОС ПОЧТЫ

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

{ "responseHeader": { "Статус": 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

1 Ответ

0 голосов
/ 26 октября 2018

наконец я понял, почему вышеупомянутые изменения не работают. Я должен упомянуть имя цепочки обработчика запросов на обновление в моем запросе, иначе solr будет использовать цепочку обработчиков запросов на обновление по умолчанию. После добавления update.chain=add-unknown-fields-to-the-schema в качестве параметра к URL-адресу запроса в документе solr после индексации поле expires_at_ было заполнено правильно, как и ожидалось.

локальный: 8983 / Solr / Coll1 / обновление фиксации = истина & update.chain = адд-неизвестные-поля-к-схеме

?
...