Forums

Home » Liferay Portal » Deutsch

Combination View Flat View Tree View
Threads [ Previous | Next ]
toggle
Lisa Gunkel
Probleme mit Indizierung von Dokumenten
March 15, 2012 2:42 AM
Answer

Lisa Gunkel

Rank: New Member

Posts: 23

Join Date: October 26, 2010

Recent Posts

Hallo zusammen,

Wir haben Probleme beim Reindex von Dokumenten bei der Benutzung der DocumentenLib-API von liferay.
Es gibt standardmäßig das Dokumentenbibliotheks-Portlet von Liferay, wo Dokumente hochgeladen werden können und deren Conent auch gleich indiziert wird. Das funktioniert dort auch alles ganz gut. Haben wir keine Probleme bezüglich des Contents (außer beim Massenupload) feststellen können. Unser Content (Inhalt des Dokuemnts) wird indiziert und wir haben auch bei einer Suchanfrage entsprechende Treffer.

Wir haben jetzt ein eigenes Portlet, welches ebenfalls Dokumente aus einem lokalen Verzeichnis in die Dokumentenbibliothek (bzw in die Jackrabbit Datenbank) per Scheduler einfügen soll, gleichzeitig soll dann der Content indiziert werden.
Die Dokumente bekommen wir mit der Methode DLFileEntryLocalServiceUtil.addFileEntry zwar in die Dokumentenbibliothek geladen, aber der Content wird nicht indiziert. Unsere Suchanfrage bleibt erfolglos. Suchanfragen auf den Titel des Dokuments funktionieren. Suchanfragen auf den Inhalt funktionieren nicht. Auch ein codetechnischer Reindex für das Dokument führt nicht zum Erfolg:

Wir haben mal debuggt und an der Stelle passiert der Fehler:

In der FileUtil.classe wird dann die Methode extractText(InputStream is, String fileName) aufgerufen in der dann der Content extrahiert wird bzw werden sollte.
 1public String extractText(InputStream is, String fileName)
 2          {
 3          String text = null;
 4          try
 5                {
 6                Tika tika = new Tika();
 7                boolean forkProcess = false;
 8                if(PropsValues.TEXT_EXTRACTION_FORK_PROCESS_ENABLED)
 9                     {
10                String mimeType = tika.detect(is);
11               if(ArrayUtil.contains(PropsValues.TEXT_EXTRACTION_FORK_PROCESS_MIME_TYPES, mimeType))
12                     forkProcess = true;
13                     }
14                if(forkProcess)
15                     text = (String)ProcessExecutor.execute(new ExtractTextProcessCallable(getBytes(is)), ClassPathUtil.getPortalClassPath());
16                else
17                     text = tika.parseToString(is);
18                }
19          catch(Exception e)
20                {
21          _log.error(e, e);
22   }….
23          if(text == null)
24          text = "";
25          return text;
26          }


text = tika.parseToString(is);
hier wird der Text extrahiert, ist aber leider bei unserem Upload immer leer.

Erst wenn wir im Adminbereich -> Server „Alle Indexe neu erstellen“ klicken, wird der Conent korrekt indiziert und die Suche in unserem eigenen Portlet führt zum Ziel. Nur ist das keine echte Lösung, dass man danach immer erstmal noch in den Adminbereich wechseln muss….

Wir haben hier schon einige Versuche unternommen, aber finden keine Lösung für das Problem. Wir haben auch versucht die Adminfunktionalität in unserem Portlet nachzubauen, aber auch dies führt nicht zum Erfolg:

Wir haben uns den Code mal besorgt und das ausführen wollen (Quelle zu finden in der Klasse EditServerAction >> reindex(ActionRequest actionRequest)
Unsere Code sah dann folgendermaßen aus:

(Die 10136 ist unsere CompanyId, die wir erstmal nur hart hier verwendet haben.)
 1 try {
 2
 3                Portlet portlet = PortletLocalServiceUtil.getPortletById(10136, "20");
 4                List<Indexer> indexers = portlet.getIndexerInstances();
 5                for (Indexer indexer : indexers) {
 6                     try {
 7                          indexer.reindex(new String[] { String.valueOf(10136) });
 8                     } catch (Exception e) {
 9                System.out.println("Error " + e.getMessage());                     }
10                }
11          } catch (Exception e) {
12                System.out.println("Error " + e.getMessage());
13          }
14


Leider wird auch hier der Reindex für den Content nicht ausgeführt. Es erscheint nicht mal eine Fehlermeldung oder sowas.
Wir haben auch geprüft, ob unsere Dateien (Extension) von der Indizierung ausgeschlossen sind, aber auch hier ist die Konfiguration korrekt.

Ich weiß, das klingt alles absurd, ist aber so. Wenn wir es nicht gesehen hätten, würden wir es auch nicht glauben, dass ein und der selbe Funktionsaufruf unterschiedliche Ergebnisse liefert emoticon

Kann es sein, dass die Funktion im Adminbereich von irgendetwas zusätzliches abhängig ist und wir es übersehen?

Vielen Dank für eure Hilfe

Lisa
André Bunse
RE: Probleme mit Indizierung von Dokumenten
March 15, 2012 6:51 PM
Answer

André Bunse

Rank: Junior Member

Posts: 85

Join Date: March 15, 2012

Recent Posts

Hallo Lisa,

ich bin gerade erst dabei mich in Liferay einzuarbeiten und daher noch nicht vertraut mit allen APIs,
aber bei "Manuell funktioniert es, in der Massenverarbeitung nicht" klingeln gleich meine Alarmglocken.
Ich sag nur "Race condition". Da die Indizierung eines einzelnen Dokuments sicher seine Zeit braucht,
kann ich mir die Abarbeitung in einer Schleife schon als kritisch vorstellen. Der Aufruf "processExecutor()"
vermittelt den Eindruck als würde jedes Dokument in einem separaten Thread ausgeführt, ob das so
ist und welchen zusätzlichen Einfluss die Arbeit mit der angesprochenen Jackrabbit Datenbank hat,
kann ich aber leider nicht sagen. Aus dem Bauch heraus würde ich sagen, dass die Verarbeitung
über eine Queue und entsprechende Callbacks abgewickelt werden muss, sollte die Reindizierung
am Ende des Vorgangs nicht ausreichen.

Dagegen spricht aber wohl, dass der Code für das "Alle Indexe neu erstellen" aus dem Adminbereich
ebenfalls mit einer Schleife arbeitet und der manuelle Aufruf auch nicht zum Erfolg führt. Ich gehe mal
davon aus, dass zum Zeitpunkt der Reindizierung wirklich alle Dokumente erfolgreich eingelesen
wurden. Hier wäre es vielleicht hilfreich vor der Ausführung eine Pause einzulegen, sollte das auch
nicht helfen kann man diesen Punkt auch ausschließen und die Profis ;) sind gefragt.

Ich verfolge den Thread auf jeden Fall und bin mal gespannt was am Ende rauskommt.

Keep on coding
André
Lisa Gunkel
RE: Probleme mit Indizierung von Dokumenten
March 16, 2012 1:30 AM
Answer

Lisa Gunkel

Rank: New Member

Posts: 23

Join Date: October 26, 2010

Recent Posts

Hallo,

danke für die Antwort. Nur leider wird das Problem immer größer. Wir haben uns das ganze mal auf einer Produktivumgebung angesehen, und da funktioniert das Liferay-Dokumentenlib-Portlet auch nur sporadisch. Nach einem Redindex im Adminbereich geht hier nichts mehr, auch eine Pause einlegen hilft nix. Im Log wird auch angezeigt, wann der Reindex durch ist. Alles sehr merkwürdig.

Da gebe ich dir Recht, dass der Aufruf jedesmal nach hochladen eine Dokuments performancelastig ist. Daher wollten wir den Index nach dem gesamten hochladen ausführen. Der Scheduler läuft nur einmal in der Nacht und daher sollte das kein Problem sein. Denk ich emoticon

Ja mal schauen, ob jemand damit schonmal Erfahrungen gemacht hat und ob wir das Problem gelöst bekommen…..


Vielen Dank
Lisa
Lisa Gunkel
RE: Probleme mit Indizierung von Dokumenten
March 21, 2012 6:53 AM
Answer

Lisa Gunkel

Rank: New Member

Posts: 23

Join Date: October 26, 2010

Recent Posts

Hallo,

wir haben mittlerweile rausgefunden wo das Problem liegt.
Und zwar sind beim Aufruf aus unserem Portlet heraus die Parser leer
d.h. bei der Erzeugung des Tika-Objekts
Tika tika = new Tika();
können die zugehörigen Parser nicht erzeugt werden und der content so nicht aus der Datei ermittelt werden.

Wir haben dann einfach mal die Tika-jars aus dem root/webinf/lib Verzeichnis ins tomcat/lib/ext-Verzeichniss gelegt und schon klappte alles prima.
Der Index wird nun vollständig ausgeführt.

Ob das eine gangbare Lösung ist können wir nicht sagen, aber es funktioniert erstmal.

Eine Liste der betroffenen Jars gibts hier

http://tika.apache.org/0.9/gettingstarted.html

Wir haben es leider nur so hinbekommen.

Eine Definition der abhängigen Jars mittels der liferay-plugin-package.properties-Datei hat leider nicht funktioniert. So, dass wir uns erstmal für diesen Weg entscheiden haben. Hat jemand damit schon Erfahrung gemacht?

Viele Grüße
Lisa
André Bunse
RE: Probleme mit Indizierung von Dokumenten
March 23, 2012 11:07 AM
Answer

André Bunse

Rank: Junior Member

Posts: 85

Join Date: March 15, 2012

Recent Posts

Hallo Lisa,

ich teste gerade intensiver im Bereich JCR, Jackrabbit, CMIS.

Ausserdem versuche ich direkt nach einem File-Upload mit Tika zu parsen
und die ermittelten Infos in die Eingaben der Metadata-Sets zu packen.

Ich wollte im Anschluß mal einen Erfahrungsbericht abgeben, zum einen
dürfte das Thema interessant für andere sein und ich habe auch das
Gefühl die dynamischen Datenlisten benötigen noch ein paar Anpassungen.


Ich halte euch auf dem Laufenden ;)
André
Lisa Gunkel
RE: Probleme mit Indizierung von Dokumenten
April 4, 2012 7:21 AM
Answer

Lisa Gunkel

Rank: New Member

Posts: 23

Join Date: October 26, 2010

Recent Posts

Hallo,

mittlerweile haben wir eine Rückantwort von Liferay bezüglich des Problems. Es ist ein Classloader-Problem. Wir verwenden die Version 6.0EE SP2 .

In der Version 6.1EE wurde das gefixt und sieht dann so aus:

 1      public String extractText(InputStream is, String fileName) {
 2            String text = null;
 3
 4            ClassLoader portalClassLoader = PortalClassLoaderUtil.getClassLoader();
 5
 6            Thread currentThread = Thread.currentThread();
 7
 8            ClassLoader contextClassLoader = currentThread.getContextClassLoader();
 9
10            try {
11                [color=#f91c3a] [color=#ddb73c] if (contextClassLoader != portalClassLoader) {
12                        currentThread.setContextClassLoader(portalClassLoader);
13                  }[/color][/color]
14
15                  Tika tika = new Tika();
16            ...


Daher werden wir uns um das Problem jetzt nicht weiter kümmern. Wir verwenden die addEntry-Methode aus dem Service. Wenn der Bugfix von Liferay kommt, ist das Problem für uns erledigt.

Übrigens: Toller Bugfix, sowas hab ich noch nicht gesehen :-/


Viele Grüße
Lisa