我安装了elasticsearch 5.0.1和相应的摄取附件。尝试从shell脚本索引PDF文档,如下所示
#!/bin/ksh var=$(base64 file_name.pdf) var1=$(curl -XPUT 'http://localhost:9200/my_index4/my_type/my_id?pipeline=attachment&pretty' -d' { "data" : $var }') echo $var1
I got error as { "error" : { "root_cause" : [ { "type" : "exception", "reason" : "java.lang.IllegalArgumentException: ElasticsearchParseException[Error parsing document in field [data]]; nested: IllegalArgumentException[Illegal base64 character 24];", "header" : { "processor_type" : "attachment" } } ]...
任何人都可以帮助解决上述问题。不确定我是否传递了无效的base64字符?
请注意,当我这样通过时,它有效!
var1=$(curl -XPUT 'http://localhost:9200/my_index4/my_type/my_id?pipeline=attachment&pretty' -d' { "data" : "e1xydGYxXGFuc2kNCkxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0DQpccGFyIH0=" }')
我猜想问题在于外壳不能在单引号内扩展变量,您需要双引号来扩展它。即
更改 -d' { "data" : $var }'
-d' { "data" : $var }'
至
-d '{"data" : "'"$(base64 file_name.pdf)"'"}'
直接通过base64流。
base64
(要么)
-d '{"data" : "'"$var"'"}'
有关报价和变量的更多信息,请参见ksh 此处。
ksh