Startseite » Forum » e-Journal Systeme » OJS, OCS, OMP, Harvester » Volltextsuche
Topic with no new replies

Volltextsuche


Author Message
Written on: 01. 11. 2010 [21:00]
uko
Professional
Topic creator
registered since: 22.10.2010
Posts: 24
Ich habe den Pfad zu pdftotext in der config angegeben und habe auch mit dem cli tool rebuildSearchIndex.php aufgerufen. Ich erhalte aber dennoch kein Suchergebnis.
(getestet habe ich bereits pdftotext selbst - klappt; convertiert die pdf in eine txt)

Was muss ich vielleicht noch beachten?
Danke, Ute

PS: Ich benutze xpdf.
Written on: 02. 11. 2010 [00:24]
fgrandel
Florian Grandel
Moderator
registered since: 24.11.2009
Posts: 65
Hallo Ute,

ich gehe nach deinen bisherigen Fragen davon aus, dass du keine Angst vor der Technik hast. :-) Wenn meine Erklärung zu technisch ist, dann sag' bescheid.

Folgende Schritte sollten dich hoffentlich schnell zum Ziel bringen:

1) Bitte überprüfe in der Datenbank, ob du in der Tabelle search_keyword_list eine Menge Suchwörter gespeichert hast.

Wenn diese Tabelle leer ist, dann heißt das, dass beim Indizieren etwas schief gegangen ist. Wenn die Tabelle voll ist, dann geht etwas beim Suchen im Index schief.

Sollte die Tabelle voll sein, dann kannst du die folgenden Schritte ignorieren und mir Bescheid sagen. Ich helfe dir dann von hier aus weiter.

2) Sollte die Tabelle leer sein (was das wahrscheinlichste Problem ist), dann kannst du als nächstes in der Datei lib/pkp/classes/search/SearchFileParser.inc.php in der Methode fromFileType() gleich in der ersten Zeile eintragen
PHP
echo $type."\n";


Wenn du jetzt rebuildSearchIndex.php ausführst, dann solltest du eine Liste der Dateitypen erhalten, die derzeit als Galleys in deiner Zeitschrift vorhanden sind. Sobald du diese Liste hast, kannst du die temporäre Programmzeile wieder herausnehmen.

Automatisch indiziert werden nur die folgenden Dateitypen:
text/plain, text/html, text/xml, application/xhtml, application/xml

Überprüfe bitte, ob du wirklich für alle anderen auftauchenden Dateitypen in deiner Konfigurationsdatei im Abschnitt [search] einen Eintrag im Format
index[dateityp] = ...
hast.

Siehe die Beispiele dazu in config.inc.php

3) Wenn alles korrekt konfiguriert ist, dann trage bitte in
lib/pkp/classes/search/SearchHelperParser.inc.php, nach der Zeile 34 ("$exec = ...") ein:
PHP
echo $exec."\n";


Wenn du jetzt wieder rebuildSearchIndex.php ausführst, dann solltest du nun die Kommandozeile erhalten, die PHP auszuführen versucht.

Bitte führe diese Kommandozeile manuell aus, nachdem du sichergestellt hast, dass du dich im OJS Installationsverzeichnis befindest (das ist das Verzeichnis mit der config.inc.php drin).

Wenn sich dieses Programm problemlos ausführen lässt und die gewünschten Umwandlung von PDF nach Plaintext ausgibt, dann weiter mit dem nächsten Schritt. Ansonsten bitte das Tool korrekt in config.inc.php konfigurieren.

4) Es kann auch sein, dass PHP so konfiguriert ist, dass der popen()-Befehl nicht erlaubt ist. In dem Fall würde der Aufruf von "$parser->open()" in Zeile 75 von
classes/search/ArticleSearchIndex.inc.php einen "falsch"-Wert zurückgeben. Bitte daher mit einer Testzeile (z.B. mit echo "test"; direkt nach Zeile 75) prüfen ob das Programm überhaupt in die if()-Kondition reinspringt.

Falls popen() nicht erlaubt ist, muss das in der php.ini korrigiert werden.

5) Falls bis dahin kein Fehler aufgetaucht ist, dann bitte prüfen, ob überhaupt Text in PHP eingelesen wird. Dazu bitte nach Zeile 80 in derselben Klasse (also innerhalb der while-Schleife) prüfen, ob die Variable $text etwas enthält (echo $text."\n";). Wenn nein, dann bitte schreiben, so dass wir das gemeinsam weiter prüfen können.

Das Ganze geht natürlich viel schneller und in einem einzigen Aufwasch, wenn du statt der vielen "echo"-Befehle einfach xdebug+Eclipse einsetzt und an den entsprechenden Stellen Breakpoints setzt und die Variableninhalte überprüfst. Gerne helfe ich dir xdebug entsprechend einzurichten.

Viele Grüße,
Florian


PS: Bitte nicht vergessen, die eingefügten Codezeilen wieder zu entfernen...

Florian Grandel
Software-Entwickler
Public Knowledge Project (PKP)
http://pkp.sfu.ca/people#fg
jerico.dev(at)gmail[dot]com
Written on: 02. 11. 2010 [14:02]
uko
Professional
Topic creator
registered since: 22.10.2010
Posts: 24
fgrandel schrieb:

1) Bitte überprüfe in der Datenbank, ob du in der Tabelle search_keyword_list eine Menge Suchwörter gespeichert hast.


meinst du die Tabelle article_search_keyword_list, denn search_keyword_list gibt es nicht?

fgrandel schrieb:

Überprüfe bitte, ob du wirklich für alle anderen auftauchenden Dateitypen in deiner Konfigurationsdatei im Abschnitt [search] einen Eintrag im Format
index[dateityp] = ...
hast.


index[application/pdf] = "pathto/xpdf %s -enc UTF-8 -nopgbrk %s - | /usr/bin/tr '[:cntrl:]' ' '"
Dumme Frage: das tr command - muss ich auch hier einen Eintrag machen?

fgrandel schrieb:

3) Wenn alles korrekt konfiguriert ist, dann trage bitte in
lib/pkp/classes/search/SearchHelperParser.inc.php, nach der Zeile 34 ("$exec = ...") ein:
PHP
echo $exec."\n";


Wenn du jetzt wieder rebuildSearchIndex.php ausführst, dann solltest du nun die Kommandozeile erhalten, die PHP auszuführen versucht.
Bitte führe diese Kommandozeile manuell aus, nachdem du sichergestellt hast, dass du dich im OJS Installationsverzeichnis befindest (das ist das Verzeichnis mit der config.inc.php drin).


Das funktioniert nicht. im php_error.log:
Message: WARNING: sprintf(): Too few arguments

fgrandel schrieb:

..."$parser->open()" in Zeile 75 von
classes/search/ArticleSearchIndex.inc.php ... Bitte daher mit einer Testzeile (z.B. mit echo "test"; direkt nach Zeile 75) prüfen ob das Programm überhaupt in die if()-Kondition reinspringt.


tut es

fgrandel schrieb:

bitte prüfen, ob überhaupt Text in PHP eingelesen wird. Dazu bitte nach Zeile 80 in derselben Klasse (also innerhalb der while-Schleife) prüfen, ob die Variable $text etwas enthält (echo $text."\n";). Wenn nein, dann bitte schreiben, so dass wir das gemeinsam weiter prüfen können.


Ich schreibe ;-)

fgrandel schrieb:

Das Ganze geht natürlich viel schneller und in einem einzigen Aufwasch, wenn du statt der vielen "echo"-Befehle einfach xdebug+Eclipse einsetzt und an den entsprechenden Stellen Breakpoints setzt und die Variableninhalte überprüfst. Gerne helfe ich dir xdebug entsprechend einzurichten.


Gerne.
Gruß Ute
Written on: 02. 11. 2010 [16:34]
fgrandel
Florian Grandel
Moderator
registered since: 24.11.2009
Posts: 65
Ich glaube, das Problem ist, dass du in deiner Konfiguration zwei mal %s verwendest, was dann dazu führt, dass sprintf() nicht korrekt funktioniert. Siehe die Beispiele in config.inc.php, die alle nur mit einem %s arbeiten. Wenn du tatsächlich einen komplexeren Programmaufruf brauchst, dann musst du wahrscheinlich ein Wrapper-Skript schreiben, das dann mit einem Parameter auskommt.

Falls dich das nicht weiterbringt: Können wir dein Problem direkt über Skype lösen und die Lösung dann im Forum veröffentlichen?

Ich glaube, das wäre das Schnellste. Dann kann ich dir auch mit xdebug/Eclipse helfen. Ich werde dann gleichzeitig auch die xdebug-Konfiguration für OJS in unserem Wiki aktualisieren können.

Florian Grandel
Software-Entwickler
Public Knowledge Project (PKP)
http://pkp.sfu.ca/people#fg
jerico.dev(at)gmail[dot]com
Written on: 02. 11. 2010 [18:41]
fgrandel
Florian Grandel
Moderator
registered since: 24.11.2009
Posts: 65
Das Problem war ein Fehler in der konfigurierten Kommandozeile.

Die richtige Konfiguration im speziellen Fall lautete:
index[application/pdf] = "C:/wamp/apps/xpdf/pdftotext %s -"

Das heißt: die Konfiguration muss eine funktionierende Kommandozeile enthalten, in der das %s von OJS durch den Dateinamen der PDF-Datei ersetzt werden kann.

Bitte diese Befehlszeile immer zuerst direkt in der Kommandozeilenumgebung ausprobieren, um sicher zu stellen, dass die Konfiguration stimmt.

Florian Grandel
Software-Entwickler
Public Knowledge Project (PKP)
http://pkp.sfu.ca/people#fg
jerico.dev(at)gmail[dot]com
Written on: 03. 11. 2010 [18:57]
uko
Professional
Topic creator
registered since: 22.10.2010
Posts: 24
Hallo Florian,
ich habe jetzt auf einem Testserver zwei OJS Installationen. Die eine ohne pdftotext, die andere mit - entsprechend der gefundenen Lösung. Nun habe ich das QuickSubmit Plugin getestet - auf beiden Installationen. Dabei entsteht bei mir folgendes Problem: Im Falle pdftotext auskommentiert, also ohne, läuft das Hochladen stabil und ohne Fehler. Im anderen Fall erhalte ich nach dem Absenden des Formulars zum Hochladen eine Blank Page (im php_error.log kein Eintrag). Ich habe dann gesehen, dass der AuthorName nicht übermittelt wurde (oder nicht in die DB eingetragen); die Datei zwar im ersten Schritt hochgeladen wurde, aber keine erfolgreiche submission erfolgte, also source_file_id=Null, submission_file_id=Null ...). Im error log steht kein Eintrag; wenn ich als Editor in's Archive gehe, sehe ich keinen Autorennamen, nur den Title. Gehe ich darauf, bricht der Aufbau der page submissionediting ab bei der Anzeige Copyediting mit folgender Fehlerausgabe:

PHP Fatal error: Call to a member function getDateNotified() on a non-object in ..\cache\t_compile\%%B0^B03^B0335942%%copyedit.tpl.php on line 61

Komischerweise konnte ich aber auch schon erfolgreich via QuickSubmit Artikel hochladen unter dieser configuration; aber bei den meisten Versuchen entstand bisher obiges Problem.

Bei auskommentierter Kommandozeile (also ohne pdftotext) klappt es dagegen stabil, Artikel hochzuladen.

Vielleicht gibt es ja gar keinen Zusammenhang, aber ich habe den Verdacht, dass das vielleicht doch so ist. Deshalb hatte ich mir jetzt OJS doppelt installiert, um nicht total durcheinander zu kommen.

Viele Grüße,
Ute
Written on: 03. 11. 2010 [19:52]
fgrandel
Florian Grandel
Moderator
registered since: 24.11.2009
Posts: 65
Hallo Ute,

das von dir beschriebene Phänomen hängt wahrscheinlich damit zusammen, dass dein Speicherlimit oder das Ausführlimit erreicht wird. Das Indizieren von Dokumenten braucht sehr viel Speicher. Das könnte auch erklären, warum das Problem nur sporadisch auftritt.

Bitte versuche einmal die folgenden Parameter in deiner php.ini höher zu setzen:

max_execution_time (z.B. 120)
memory_limit (z.B. 256M)

Danach bitte Apache neu starten und nochmal versuchen.

Viele Grüße!

Florian Grandel
Software-Entwickler
Public Knowledge Project (PKP)
http://pkp.sfu.ca/people#fg
jerico.dev(at)gmail[dot]com
Written on: 03. 11. 2010 [19:58]
fgrandel
Florian Grandel
Moderator
registered since: 24.11.2009
Posts: 65
...ah und noch etwas...

Das Problem mit den zwei %s (s. weiter oben) hatten offensichtlich auch schon andere erkannt und haben es als Fehler gemeldet. Siehe http://pkp.sfu.ca/bugzilla/show_bug.cgi?id=6120. Wir werden das sicher bald ändern. Ist ja aber nicht wirklich schlimm, da du, wie von mir beschrieben, jederzeit ein kleines Wrapper-Skript schreiben kannst, das mit einem Parameter auskommt, wenn du Unicode-Support für die Indizierung brauchst.

Florian Grandel
Software-Entwickler
Public Knowledge Project (PKP)
http://pkp.sfu.ca/people#fg
jerico.dev(at)gmail[dot]com
Written on: 05. 11. 2010 [19:42]
uko
Professional
Topic creator
registered since: 22.10.2010
Posts: 24
max_execution_time und memory_limit habe ich noch höher setzten müssen. Da das dann aber beim Hochladen alles sehr lange dauert und evtl. doch noch zu einem Abbruch* kommt, habe ich pdftotext erst nochmal wieder disabled. Vielleicht ist es besser, das Indizieren dann regelmäßig extra laufen zu lassen und nicht bereits beim Hochladen von pdf's. Ich muss auch noch etwas mehr testen, was die richtigen Einstellungen anbetrifft.

Gruß, Ute

PS: * Abbruch heißt dann leider auch unvollständige Einträge in der Datenbank. Der Autorenname bspw. fehlt. Über das Webinterface (Bereich Archiv) sieht man, dass der Autor fehlt. Leider gibt es dann keine Möglichkeit für den Editor, solche unvollständigen submissions im Nachhinein zu bearbeiten oder zu löschen.

Written on: 05. 11. 2010 [22:45]
fgrandel
Florian Grandel
Moderator
registered since: 24.11.2009
Posts: 65
Ute, kann es sein, dass du charset_normalization = On gesetzt hast? Das hat nämlich einen sehr negativen Effekt auf die Indizierungsperformance. Wenn ja, dann solltest du es 'mal mit charset_normalization = Off versuchen.

Außerdem muss man sagen, dass der Unterschied zwischen Linux und Windows sehr groß sein kann. Ich habe schon Unterschiede mit dem Faktor 100 bei der Geschwindigkeit und Faktor 2 beim Speicherverbrauch gesehen zwischen Linux und Windows bei der Ausführung von komplexen PHP-Skripten. Das hat vor allem mit dem besseren Dateicaching und der besseren Speicherverwaltung auf Linux zu tun und natürlich damit, dass die meisten PHP-Entwickler auf Linux arbeiten. ;-)

Florian Grandel
Software-Entwickler
Public Knowledge Project (PKP)
http://pkp.sfu.ca/people#fg
jerico.dev(at)gmail[dot]com


To top


User login

Login


This work or content is licensed under a Creative Commons Licence (CC BY-NC-SA 3.0). This Website collects anonymous user data. You can disable that for the current session by clicking the following link: Deactivate Session Cookie