2017-02-08 1 views
3

Ich muss eine Volltext-basierte Suche in einem PDF-Dokument mit Elasticsearch Ingest Plugin implementieren. Ich bekomme ein leeres Treffer-Array, wenn ich versuche, das Wort someword im PDF-Dokument zu suchen.Wie indiziert man eine PDF-Datei mit Elasticsearch ingest-attachment plugin?

//Code for creating pipeline 

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

//Code for creating the index 

PUT my_index/my_type/my_id?pipeline=attachment 
{ 
    "filename" : "C:\\Users\\myname\\Desktop\\bh1.pdf", 
    "title" : "Quick", 
    "data": "e1xydGYxXGFuc2kNCkxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0DQpccGFyIH0=" 

} 

//Code for searching the word in pdf 

GET /my_index/my_type/_search 
{ 
    "query": { 
    "match": { 
     "data" : { 
     "query" : "someword" 
    } 
} 
} 
+0

Senden Wenn Sie das PDF in einem PDF-Viewer öffnen, können Sie für „someword“ in ihm suchen und ein Spiel zu finden? – Alcanzar

+0

@Alcanzar Ja, es sucht nach dem Wort. – Ashley

+0

Dies sieht aus wie ein Duplikat von http://stackoverflow.com/questions/37861279/how-to-index-a-pdf-file-in-elasticsearch-5-0-0-with-ingest-attachment-plugin- Beachten Sie, dass Ihre PUT-Anweisung spezifische "Daten" für die Datei angibt. Sie müssen curl oder etwas ähnliches verwenden, um die spezifischen Dateidaten zu übergeben. Die "Daten", die du eingibst, sind "Lorem ipsum dolor sit amet" - wenn du nach Lorem suchst, würdest du ein Ergebnis finden – Alcanzar

Antwort

2

Wenn Sie Index Ihr Dokument mit dem zweiten Befehl durch den Base64 codiert Inhalt vorbei, sieht das Dokument dann wie folgt aus:

 { 
      "filename": "C:\\Users\\myname\\Desktop\\bh1.pdf", 
      "data": "e1xydGYxXGFuc2kNCkxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0DQpccGFyIH0=", 
      "attachment": { 
       "content_type": "application/rtf", 
       "language": "ro", 
       "content": "Lorem ipsum dolor sit amet", 
       "content_length": 28 
      }, 
      "title": "Quick" 
     } 

So Ihre Abfrage in das attachment.content Feld aussehen muss und nicht der data ein (die nur den Zweck bei der Indizierung des Sendens der Rohinhalt dient)

dazu ändern sie bitte Ihre Abfrage und es wird funktionieren:

POST /my_index/my_type/_search 
{ 
    "query": { 
     "match": { 
     "attachment.content": {   <---- change this 
      "query": "lorem" 
     } 
     } 
    } 
} 

PS: Verwenden POST statt GET wenn eine Nutzlast

+0

Froh, das hat geklappt. Sonst noch etwas benötigt? – Val

+0

Irgendeine Idee, wie können wir eine PDF-Datei in base64-codierte Datei mit elastischer Suche konvertieren? – Ashley

+0

Ich denke, das sollte eine neue Frage sein, da es nichts damit zu tun hat. – Val

Verwandte Themen