从shell脚本调用弹性搜索以索引pdf文档

时间:2016-11-21 09:24:51

标签: unix elasticsearch

我安装了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=" }')

1 个答案:

答案 0 :(得分:0)

我想问题是shell不要在单引号中扩展变量,你需要双引号来扩展它。即。

更改-d' { "data" : $var }'

-d '{"data" : "'"$(base64 file_name.pdf)"'"}'  

直接传递base64流。

(或)

-d '{"data" : "'"$var"'"}'

有关ksh here中引用和变量的详情。