2017-02-08 5 views
3

Мне нужно реализовать полнотекстовый поиск в pdf-документе, используя Elasticsearch плагин ingest. Я получаю пустой массив хитов, когда пытаюсь найти слово someword в pdf-документе.Как проиндексировать PDF-файл, используя 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

Если открыть PDF в программе просмотра PDF, вы в состоянии найти «someword» в нем и найти матч? – Alcanzar

+0

@Alcanzar Да, он ищет слово. – Ashley

+0

Это похоже на дубликат http://stackoverflow.com/questions/37861279/how-to-index-a-pdf-file-in-elasticsearch-5-0-0-with-ingest-attachment-plugin - обратите внимание, что ваш оператор PUT помещает определенные данные в файл. Для передачи конкретных данных файла вам нужно использовать завиток или что-то в этом роде. «Данные», которые вы вводите, - «Lorem ipsum dolor sit amet» - если вы ищете Lorem, вы найдете результат – Alcanzar

ответ

2

При индексировании документа со второй командой, передавая Base64 кодированное содержимое, документ будет выглядеть следующим образом:

 { 
      "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" 
     } 

Таким образом, ваш запрос должен выглядеть в attachment.content поле и не data один (который только служит для отправки необработанного контента во время индексации)

Modify запрос к этому, и он будет работать:

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

PS: Использование POST вместо GET при передаче полезной нагрузки

+0

Рад, что это сработало. Что-нибудь еще нужно? – Val

+0

Любая идея о том, как мы можем преобразовать файл pdf в файл с кодировкой base64, используя поиск в режиме поиска? – Ashley

+0

Я думаю, что это должен быть новый вопрос, поскольку он не связан с этим. – Val

Смежные вопросы