2016-06-16 6 views
10

Ich bin neu bei Elasticsearch und ich lese hier https://www.elastic.co/guide/en/elasticsearch/plugins/master/mapper-attachments.html, dass das Mapper-Anhänge-Plugin in Elasticsearch 5.0.0 veraltet ist.Wie indiziert man eine PDF-Datei in Elasticsearch 5.0.0 mit Ingest-Anhang-Plugin?

Ich versuche nun, eine PDF-Datei mit dem neuen Ingest-Anhang-Plugin zu indizieren und den Anhang hochzuladen.

Was ich bisher versucht habe, ist

curl -H 'Content-Type: application/pdf' -XPOST localhost:9200/test/1 -d @/cygdrive/c/test/test.pdf 

aber ich bekomme die folgende Fehlermeldung:

{"error":{"root_cause":[{"type":"mapper_parsing_exception","reason":"failed to parse"}],"type":"mapper_parsing_exception","reason":"failed to parse","caused_by":{"type":"not_x_content_exception","reason":"Compressor detection can only be called on some xcontent bytes or compressed xcontent bytes"}},"status":400} 

Ich würde erwarten, dass die PDF-Datei indiziert werden und hochgeladen. Was mache ich falsch?

Ich habe auch Elasticsearch 2.3.3 getestet, aber das Mapper-Attachment-Plugin ist nicht gültig für diese Version und ich möchte keine ältere Version von Elasticsearch verwenden.

Antwort

12

Sie müssen sicherstellen, dass Sie Ihre aufnehmen Pipeline mit erstellt haben:

PUT _ingest/pipeline/attachment 
{ 
    "description" : "Extract attachment information", 
    "processors" : [ 
    { 
     "attachment" : { 
     "field" : "data", 
     "indexed_chars" : -1 
     } 
    } 
    ] 
} 

Dann können Sie nicht POST zu Ihrem Index mit der Pipeline die Sie erstellt haben eine PUT machen.

curl -H 'Content-Type: application/pdf' -XPUT localhost:9200/test/1?pipeline=attachment -d @/cygdrive/c/test/test.pdf 

Daran erinnernd, dass der PDF-Inhalt muss Base64 codiert werden:

PUT my_index/my_type/my_id?pipeline=attachment 
{ 
    "data": "e1xydGYxXGFuc2kNCkxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0DQpccGFyIH0=" 
} 

In Ihrem Beispiel soll wie etwas sein.

Ich hoffe, es wird Ihnen helfen.

Edit 1 Bitte stellen Sie sicher, diese zu lesen, es hat mir sehr geholfen:

Elastic Ingest

Ingest Plugin

Ingest Presentation

Edit 2

Außerdem müssen Sie ingest-attachment Plugin installiert haben.

./bin/elasticsearch-plugin install ingest-attachment 

bearbeiten 3

Bitte, bevor Sie Ihr Ingest Prozessor (Anlage) erstellen, erstellen Sie Ihre Index, Karte mit den Feldern Sie verwenden und stellen Sie sicher, dass Sie das haben Daten Feld in Ihrem Karte (der gleiche Name des "Feld" in Ihrem Anhang Prozessor), so ingest verarbeiten und erfüllen Ihre dat ein Feld mit Ihrem PDF-Inhalt.

ich eingeführt, um die indexed_chars Option im Ingest-Prozessor, mit -1 Wert, so können Sie große PDF-Dateien Index.

bearbeiten 4

Die Abbildung etwas wie das sein sollte:

PUT my_index 
{ 
    "mappings" : { 
     "my_type" : { 
      "properties" : { 
       "attachment.data" : { 
        "type": "text", 
        "analyzer" : "brazilian" 
       } 
      } 
     } 
    } 
} 

In diesem Fall verwende ich die brasilianische Filter, aber Sie können das entfernen oder Ihre eigenen verwenden.

+0

Warum benötigen Sie eine Zuordnung für das Datenfeld? Nimmt die Pipeline das Datenfeld nicht auf und verarbeitet es, ohne dass es explizit zugeordnet werden muss? Wie würde dieses Mapping aussehen? – bjlevine

+0

@bjlevine Sie müssen nicht das Feld tatsächlich zuordnen ... der Prozessor wird ein Innen (von Ihrem Prozessor) das Feld erstellen. Aber manchmal müssen Sie einen Filter wie die aktualisierte Antwort haben. hoffe, es hilft – Evis

+1

Ich habe viel mit Ingest Attachment Plugin gekämpft. Es kann nicht in der Produktion verwendet werden. Ich benutze Ambar (http://ambar.rdseventeen.com) als eine solide Lösung zum Stroaken und Durchsuchen von Dokumenten – SochiX

Verwandte Themen