Ошибка Elasingearch Parse Exception при попытке индексирования PDF
Я только начинаю с поиска elastics. Наше требование состоит в том, что нам нужно индексировать тысячи 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
содержит встроенный файл Base64 PDF (в соответствии с инструкциями). Первая строка файла выглядит корректно (для меня все равно): {"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$1.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)
Надеясь, что кто-то может помочь мне понять, что я пропущу или сделал не так?
Ответы
Ответ 1
Следующая ошибка указывает на источник проблемы.
Failed to derive xcontent from (offset=0, length=9): [106, 115, 111, 110, 46, 102, 105, 108, 101]
Коды UTF-8 [106, 115, 111,...] показывают, что вы пытаетесь индексировать строку "json.file" вместо содержимого файла.
Чтобы индексировать содержимое файла, просто добавьте букву "@" перед именем файла.
curl -X POST "localhost:9200/test/attachment/" -d @json.file
Ответ 2
Отключает необходимость export ES_JAVA_OPTS=-Djava.awt.headless=true
перед запуском приложения java на "безголовом" сервере... кто бы подумал!?!