Ошибка исключения синтаксического анализа Elasticsearch при попытке индексировать PDF

Я только начинаю работу с elasticsearch. Наше требование заставляет нас индексировать тысячи PDF-файлов, и мне трудно получить только один из них для успешного индексирования.

установил плагин типа вложения и получил ответ:Installed mapper-attachments.

следовал тип вложения в учебнике действий но процесс зависает и я не знаю, как интерпретировать сообщение об ошибке. Также попробовал gist что висит на том же месте.

$ curl -X POST "localhost:9200/test/attachment/" -d json.file 
{"error":"ElasticSearchParseException[Failed to derive xcontent from (offset=0, length=9): [106, 115, 111, 110, 46, 102, 105, 108, 101]]","status":400}

Подробнее:

на json.file содержит встроенный файл PDF Base64 (в соответствии с инструкциями). Первая строка файла появляется правильно (мне все равно):{"file":"JVBERi0xLjQNJeLjz9MNCjE1OCAwIG9iaiA8...

Я не уверен, может быть,json.file является недопустимым или, возможно, elasticsearch просто не настроен для правильного анализа PDF-файлов?!?

кодирование - вот как мы кодируем PDF в json.file (согласно учебник):

coded=`cat fn6742.pdf | perl -MMIME::Base64 -ne 'print encode_base64($_)'`
json="{"file":"${coded}"}"
echo "$json" > json.file

тоже пробовал:

coded=`openssl base64 -in fn6742.pdf

log:

[2012-06-07 12:32:16,742][DEBUG][action.index             ] [Bailey, Paul] [test][0], node[AHLHFKBWSsuPnTIRVhNcuw], [P], s[STARTED]: Failed to execute [index {[test][attachment][DauMB-vtTIaYGyKD4P8Y_w], source[json.file]}]
org.elasticsearch.ElasticSearchParseException: Failed to derive xcontent from (offset=0, length=9): [106, 115, 111, 110, 46, 102, 105, 108, 101]
    at org.elasticsearch.common.xcontent.XContentFactory.xContent(XContentFactory.java:147)
    at org.elasticsearch.common.xcontent.XContentHelper.createParser(XContentHelper.java:50)
    at org.elasticsearch.index.mapper.DocumentMapper.parse(DocumentMapper.java:451)
    at org.elasticsearch.index.mapper.DocumentMapper.parse(DocumentMapper.java:437)
    at org.elasticsearch.index.shard.service.InternalIndexShard.prepareCreate(InternalIndexShard.java:290)
    at org.elasticsearch.action.index.TransportIndexAction.shardOperationOnPrimary(TransportIndexAction.java:210)
    at org.elasticsearch.action.support.replication.TransportShardReplicationOperationAction$AsyncShardOperationAction.performOnPrimary(TransportShardReplicationOperationAction.java:532)
    at org.elasticsearch.action.support.replication.TransportShardReplicationOperationAction$AsyncShardOperationAction.run(TransportShardReplicationOperationAction.java:430)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    at java.lang.Thread.run(Thread.java:680)

надеясь, что кто-то может помочь мне увидеть, что я пропустил или сделал неправильно?

2 ответов


следующая ошибка указывает на источник проблемы.

Failed to derive xcontent from (offset=0, length=9): [106, 115, 111, 110, 46, 102, 105, 108, 101]

коды UTF-8 [106, 115, 111,...] покажите, что вы пытаетесь индексировать строку "json.файл" вместо содержимого файла.

чтобы индексировать содержимое файла, просто добавьте букву " @ " перед именем файла.

curl -X POST "localhost:9200/test/attachment/" -d @json.file

получается надо export ES_JAVA_OPTS=-Djava.awt.headless=true перед запуском приложения java на "безголовом" сервере... кто бы мог подумать!?!