2017-05-22 2 views
0

Ich hätte gerne eine einfache Einrichtung von solr, wo ich große Ordner von pdf/docx-Dateien indizieren und durchsuchen kann. Ich brauche meistens nur eine Volltextsuche, keine Notwendigkeit, Felder zu trennen, und die Originaldokumente scheinen sowieso keine gut definierte Struktur zu haben. Ich folge https://lucene.apache.org/solr/quickstart.html, die aber einfach ist, wenn ich meine eigenen Ordner-Index mit einigen PDF-Dateien versuchen, einige Dateien zurückgeben Fehler wie:Solr pdf index schlechte Anfrage

POSTing file G1504225.pdf (application/pdf) to [base]/extract 
SimplePostTool: WARNING: Solr returned an error #400 (Bad Request) for 
url: http://localhost:8983/solr/gettingstarted/update/extract? 
resource.name=%2Fhome%2Fsolr%2Fsolr-6.5.1%2F..%2Ftrain_data%2FG1504225.pdf&literal.id=%2Fhome%2Fsolr%2Fsolr-6.5.1%2F..%2Ftrain_data%2FG1504225.pdf 
SimplePostTool: WARNING: Response: <?xml version="1.0" encoding="UTF-8"?> 
<response> 
<lst name="responseHeader"><int name="status">400</int><int 
name="QTime">263</int></lst><lst name="error"><lst name="metadata"><str 
name="error-class">org.apache.solr.common.SolrException</str><str 
name="root-error-class">java.lang.NumberFormatException</str><str 
name="error-class">org.apache.solr.update.processor.DistributedUpdateProcessor$DistributedUpdatesAsyncException</str><str name="root-error-class">org.apache.solr.update.processor.DistributedUpdateProcessor$DistributedUpdatesAsyncException</str></lst><str name="msg">Async exception during distributed update: Error from server at http://127.0.1.1:8983/solr/gettingstarted_shard2_replica1: Bad Request 

request: 
http://127.0.1.1:8983/solr/gettingstarted_shard2_replica1/update?update.chain=add-unknown-fields-to-the-schema&amp;update.distrib=TOLEADER&amp;distrib.from=http%3A%2F%2F127.0.1.1%3A8983%2Fsolr%2Fgettingstarted_shard1_replica1%2F&amp;wt=javabin&amp;version=2 
Remote error message: ERROR: [doc=/home/solr/solr-6.5.1/../train_data/G1504225.pdf] Error adding field 'title'='United Nations' msg=For input string: "United Nations"</str><int name="code">400</int></lst> 
</response> 
SimplePostTool: WARNING: IOException while reading response: 
java.io.IOException: Server returned HTTP response code: 400 for URL: 
http://localhost:8983/solr/gettingstarted/update/extract? 
resource.name=%2Fhome%2Fsolr%2Fsolr-6.5.1%2F..%2Ftrain_data%2FG1504225.pdf&literal.id=%2Fhome%2Fsolr%2Fsolr-6.5.1%2F..%2Ftrain_data%2FG1504225.pdf 

Die meisten Dateien sind in Ordnung und ich kann sie suchen. Irgendwelche Ideen?

Antwort

0

Solr verwendet Tika, um den Text aus diesen Dateien zu extrahieren. Einige Dateitypen, speziell PDF, sind schwer zu parsen, da es sich um ein proprietäres Format handelt und Tika immer versucht, Edge-Cases aufzufangen usw. Es ist also normal, dass einige Dateien Fehler erzeugen. Das musst du erwarten.

Siehe how many instances von NumberFormatException/pdfbox gefunden ... (pdfbox ist die Bibliothek, die Tika für PDF-Dateien verwendet).

Wenn Sie wirklich wollen, um den ganzen Text von allen pdf, sogar diejenigen, die Sie bekommen, können Sie sie in einen speziellen Ordner, und verarbeiten sie wieder extrahieren den Text selbst mit einer anderen Bibliothek, verschiedene Bibliotheken haben unterschiedliche Ergebnisse der gleichen pdf, so können Sie die Obermenge des Textes mehrere Bibliotheken produzieren. Aber Sie müssen dafür etwas Code schreiben, es sei denn, Tika erlaubt Ihnen, bestimmte Bibliotheken für bestimmte Dateitypen zu verbinden (nicht sicher, ob es das jetzt tut, hat es vorher nicht gemacht).

+0

Danke. Die pdf, die scheitert, ist wirklich sehr einfach und der ganze relevante Text wird leicht mit pdf2txt extrahiert. Auch die Fehlermeldung beklagt sich nicht über das Extrahieren von Daten aus pdf, sondern über das Einfügen in solr, aber ich kann hier natürlich etwas vermissen. Wie auch immer, das Konvertieren aller pdf-s in txt mit pdf2txt und dann das Indizieren scheint zu funktionieren und das ist mein schneller Hack für den Moment. – kakk11