在摄取期间向字段添加对象值以进行ElasticSearch,并在摄取期间删除所有空值字段

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

我正在使用append处理器将csv数据接收到elasticsearch中。我已经有两个字段是对象(object1和object2),我想将它们都附加到另一个字段(mainlist)的数组中。所以结果是 mainlist:[ {object1}, {object}] 我用copy\u from参数尝试了set处理器,但遇到了一个错误,即缺少所需的属性名“value”,即使elasticsearch文档在使用“copy\u from”时显然没有使用“value”属性。 {"set": {"field": "mainlist","copy_from": ["object1", "object"]}} . 我的语法甚至完全是从文档中复制过来的。请帮忙。
此外,我需要在摄取级别删除空字段,以便它们不会返回。我不希望将“fieldname:”返回给用户。最好的办法是什么。我对elasticsearch还不熟悉,但进展并不顺利。

izkcnapc

izkcnapc1#

至于在摄取级别删除空字段--设置一个管道:

  1. PUT _ingest/pipeline/no_empty_fields
  2. {
  3. "description": "Removes empty-ish fields from a doc",
  4. "processors": [
  5. {
  6. "script": {
  7. "source": """
  8. def keys_to_remove = ctx.keySet()
  9. .stream()
  10. .filter(field -> ctx[field] == null ||
  11. ctx[field] == "")
  12. .collect(Collectors.toList());
  13. for (key in keys_to_remove) {
  14. ctx.remove(key);
  15. }
  16. """
  17. }
  18. }
  19. ]
  20. }

并在索引时应用它

  1. POST myindex/_doc?pipeline=no_empty_fields
  2. {
  3. "fieldname23": 123,
  4. "fieldname": null,
  5. "fieldname123": ""
  6. }

当然,可以将条件扩展到其他字段,例如 "undefined" , "Infinity" 和其他人。

展开查看全部

相关问题