elasticsearch摄取管道脚本处理器无法强制转换

yuvru6vn  于 2021-06-10  发布在  ElasticSearch
关注(0)|答案(1)|浏览(550)

我正在尝试重新索引数据,并根据源文档中的字段进行一些计算。我使用了摄取管道来丰富文档中的geo\u点,并希望计算一些其他值。
我遇到的问题是源数据抛出了一个错误,说它不能被强制转换。详情如下:
原始(从ml csv输入):

  1. "_source": {
  2. "Time": "18.06.2017 17:37:32",
  3. "Weight (kg)": 286000,
  4. "People": 2,
  5. "Seats": "2"}

但是,使用ml进行的导入清楚地说明了以下内容:

  1. {
  2. "convert": {
  3. "field": "Seats",
  4. "type": "long",
  5. "ignore_missing": true
  6. }
  7. },{
  8. "convert": {
  9. "field": "People",
  10. "type": "long",
  11. "ignore_missing": true
  12. }
  13. }

传入的原始数据在某种程度上是一致的,所有的值都是严格的数字,没有引号等(前3个是重量、座位和人:

  1. 66990;189;172;0;0;0;0;0

为了便于澄清,后面的索引Map/Map模板也显示了正确的类型:

  1. "People": {
  2. "type": "long"
  3. },
  4. "Seats": {
  5. "type": "long"
  6. },

现在,当我使用kibana脚本字段时,我可以计算如下:

  1. if (doc['Seats'].value == 0)
  2. { return 0 } else
  3. {
  4. long utilization = (doc["People"].value * 100)/doc["Seats"].value;
  5. return utilization
  6. }

一切正常,我得到一个计算的利用率。
当我尝试对摄取管道中的脚本执行相同操作时,如下所示:

  1. "caused_by" : {
  2. "type" : "class_cast_exception",
  3. "reason" : "cannot explicitly cast float [java.lang.String] to byte"
  4. }

我使用的代码如下:

  1. "script": {
  2. "if": "!(ctx.Seats=0) && !(ctx.Seats==null)",
  3. "lang": "painless",
  4. "source": "ctx.utilization = (float)ctx.People*100.0/(float)ctx.Seats"
  5. }

我的问题是:
为什么ml摄取行为不同(来自csv的原始数据完全相同,只有int)
在摄入管道中我能做些什么来完成它
kibana索引模式的性能是否与摄取管道一样好,或者我是否应该在负载等方面坚持摄取管道。
谢谢你的帮助和提示。
奇比苏克

omtl5h9j

omtl5h9j1#

在摄入管道中, ctx.Seats 仍将是字符串,因为它是源文档中的字符串。您要么需要在脚本中解析它,要么就在脚本之前转换它。
选项,而不进行转换并仅分析脚本中的值:

  1. "script": {
  2. "if": "!(ctx.Seats=="0") && !(ctx.Seats==null)",
  3. "lang": "painless",
  4. "source": "ctx.utilization = 100.0 * ctx.People / Float.parseFloat(ctx.Seats)"
  5. }

在运行脚本之前使用转换选项:

  1. {
  2. "convert" : {
  3. "field" : "Seats",
  4. "type": "float",
  5. "ignore_missing": true
  6. }
  7. },
  8. {
  9. "script": {
  10. "if": "!(ctx.Seats==0) && !(ctx.Seats==null)",
  11. "lang": "painless",
  12. "source": "ctx.utilization = 100.0 * ctx.People / ctx.Seats"
  13. }
  14. }
展开查看全部

相关问题