:         <processor
: class="solr.processor.DocExpirationUpdateProcessorFactory">
:             <int name="autoDeletePeriodSeconds">30</int>
:             <str name="ttlFieldName">ttl</str>
:             <str name="expirationFieldName">expire_at</str>
:         </processor>

        ...

: And I have included the following in my schema.xml
: 
:         <field name="ttl" type="date" indexed="true" stored="true"
: default="NOW+60SECONDS" multiValued="false"/>

there are a couple of problems here...

: As you can see I am setting the time to live to be 60 seconds and checking
: to delete every 30 seconds, when I insert a document , and check after a
: minute or couple or an hour it never gets deleted.

first off: you aren't actaully setting the ttl to "60 seconds" you are 
setting the ttl to be a fixed moment in time which is 60 seconds from when 
the doc is written to the index -- basically you are eliminating hte need 
for having a ttl field/param at all and saying "this is *exactly* when the 
document should expire".

if that's what you want to do, just elimintae the ttleFieldName everywhere 
in your schema.xml and solrconfig.xml and setup expire_at in your 
schema.xml with a default="NOW+60SECONDS" and you'll probably be good to 
go.

second...

: what might be the issue here ? Please note that the expire_at field is
: never getting generated in the Solr document as can be seen below.

...even if you redefined your ttl field to look like this...

  <field name="ttl" type="string" default="+60SECONDS" />

...the expire_at still wouldn't be populated by the processor because 
schema field "default" values are populated *after* the processors run -- 
so when the DocExpirationUpdateProcessorFactory sees the documents being 
added, it has no idea that they all have a default ttl, so it doesn't know 
that you want it to compute an expire_at for you.

instead of using default="" in the schema, you can use the 
DefaultValueUpdateProcessorFactory to assign it *before* the 
DocExpirationUpdateProcessorFactory sees the doc...

 <processor class="solr.DefaultValueUpdateProcessorFactory">
   <str name="fieldName">ttl</str>
   <str name="value">+60SECONDS</str>
 </processor>




-Hoss
http://www.lucidworks.com/

Reply via email to