15

私はelasticsearchを始めたばかりです。私たちの要件では、何千もの PDF ファイルをインデックスに登録する必要があり、そのうちの 1 つだけをインデックスに登録するのに苦労しています。

Attachment Type プラグインをインストールし、応答を得ました: Installed mapper-attachments

Attachment Type in Action」チュートリアルに従いましたが、プロセスがハングし、エラー メッセージの解釈方法がわかりません。同じ場所にぶら下がっている要点も試しました。

$ 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

ログ:

[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)

誰かが私が見逃しているものや間違っていたことを理解するのを手伝ってくれることを願っていますか?

4

2 に答える 2

20

次のエラーは、問題の原因を示しています。

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
于 2012-06-13T19:46:00.667 に答える
3

export ES_JAVA_OPTS=-Djava.awt.headless=true「ヘッドレス」サーバーで Java アプリを実行する前に、これが必要であることが判明しました...誰が考えたでしょうか!?!

于 2012-06-21T22:09:58.037 に答える