2017-01-18 4 views
2

Ich versuche Solr Auto-Lösch-Funktion mit Solr-6 zu verwenden. Ich habe die folgenden Änderungen in meiner Managed-Schema.xml und Solrconfig.xml vorgenommen.Solr automatisch löschen mit Standard-Wert von TTL-Feld

Managed-Schema

<!--expiration date field--> 
<field name="eDate" type="date" multiValued="false" indexed="true" stored="true"/> 
<field name="ttl" type="string" multiValued="false" indexed="true" stored="true" default="+90SECONDS"/> 

solrconfig

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

ich in der Lage bin Auto zu verwenden, löscht Funktion wie erwartet, wenn ich das TTL-Feld explizit entweder in dem eingehenden Dokument oder wenn ich die ttl Anfrage-Parameter in der Update-Anfrage. Ich möchte jedoch einen Standardwert für ttl verwenden, wie im verwalteten Schema angegeben, wenn ich das Feld ttl nicht explizit festlege. Wenn ich dies versuche, wird das TTL-Feld mit dem Standardwert generiert, aber das entsprechende eDate-Feld wird nicht erzeugt.

Ist es möglich zu tun, was ich versuche zu tun? Wenn ja, wie kann ich das tun? Bitte hinterlassen Sie einen Kommentar, wenn Sie weitere Informationen benötigen.

Antwort

2

konnte ich nicht machen es über default param in field Beschreibung zu arbeiten, aber ich mache es über Arbeits Zugabe solr.DefaultValueUpdateProcessorFactory

In meinem Update Kette Ich habe diese:

<processor class="solr.DefaultValueUpdateProcessorFactory"> 
     <str name="fieldName">ttl</str> 
     <str name="value">+15SECONDS</str> 
    </processor> 
    <processor class="solr.processor.DocExpirationUpdateProcessorFactory"> 
     <int name="autoDeletePeriodSeconds">5</int> 
     <str name="ttlFieldName">ttl</str> 
     <str name="expirationFieldName">eDate</str> 
    </processor> 

I-Werte ändern müssen ein schneller Test :) Link zum arbeiten code

+0

Eine Idee, warum es nicht für Standardfeld direkt im Schema funktioniert? Weil wir nicht die TTL für jedes Dokument aus unserem Code übergeben wollen. Ich denke, das Hinzufügen von "Standard" Schlüsselwort in der Feld-Eigenschaft sollte intern diesen Update-Prozessor auslösen? – Tanvi

+1

meine Antwort erfordert nicht, TTL für jedes Dokument zu übergeben. habe keine Ahnung, warum es nicht durch Schema param funktioniert – Mysterion

+0

@ Mysterion Es funktioniert auch für mich. Danke –

Verwandte Themen