2010-10-29 4 views
6

Meine Anwendung verwendet das Grails durchsuchbare Plugin mit Compass darunter.Grails durchsuchbares Plugin

Die Tabellen beginnen indiziert ist etwa 36   MB, und baut Indizes von etwa 350   MB. Dies ist in den meisten Büchern der Völker klein.

Wenn wir die Indizes löschen und die Grails-Anwendung starten, werden die Indexdateien wie erwartet neu erstellt, aber nach ungefähr einem Tag der Ausführung finden wir diesen Fehler. Wir rufen den 'Reindex' auf den TellMeEntity Instanzen auf, wie sie gespeichert werden, um sicherzustellen, dass der Index aktualisiert wird.

Ausnahme org.compass.core.engine.SearchEngineException: Fehler alias [TellMeEntity] und ids [[gespeichert/unkomprimiert, indiziert, omitNorms, omitTf]] löschen; Die geschachtelte Ausnahme ist java.io.FileNotFoundException:/var/www/web17/log/mn/index/tellmeentity/segments_2 (Keine solche Datei oder Verzeichnis) unter org.compass.core.lucene.engine.transaction.readcommitted.ReadCommittedTransaction (doDelete : 348)

Offensichtlich sobald der Fehler auftritt, wird der Index nicht aktualisiert, und die Suchvorgänge funktionieren nicht bei den neu eingegebenen Daten.

Wir haben die einfachen Dinge wie Speicherplatz usw. überprüft. Die 'segments_2' existiert nicht, aber ich würde erwarten, dass Compass es selbst erstellt.

In der grails-app/conf/Searchable.groovy Datei:

....

mirrorChanges = true 
    bulkIndexOnStartup = "fork" 

....

In meinem Code:

....

def formInstance = new TellMeEntity(name:'form',dataOwner:session.community,createBy:session.zoner,tellMeSite:form).save() 
formInstance.reindex() 

....

Meine aktuelle Erfahrung ist, dass dieser Code für etwa 24 Stunden funktioniert, aber dann beginnt, Probleme zu geben. Wir erzeugen etwa 3000 neue Einträge pro Tag, was sich nicht wie ein hohes Volumen anhört, also glaube ich nicht, dass es volumenbezogen ist.

Wie kann dieses Problem behoben werden?

+0

Wo in Ihrem Code sind Sie neu indizieren? Ich vermute, dass es irgendwo eine .lock-Datei gibt, die erstellt wurde und Ihre Probleme verursacht. Mehr Code würde helfen. –

+0

Der Code wurde aktualisiert. – user304217

+1

Ein Code-Segment wurde hinzugefügt. Ich schaue auch an, dass ich die standardmäßigen lokalen Dateiindizes nicht verwende, sondern den Cache in der Datenbank mit JDBCDirectory ablege. – user304217

Antwort

0

schießen aus der Hüfte: ist Ihre Indexposition/var/www/web17/log/mne Gegenstand einer Logfile Rotation Prozess, der durch einen Fehler versucht, die Indexdateien zu drehen? 24 Stunden sieht aus wie ein Cron-basierter Job hier eingreift.