首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在摄取过程中将对象值添加到字段以进行弹性搜索,并在摄取过程中删除所有空值字段

在摄取过程中将对象值添加到字段以进行弹性搜索,并在摄取过程中删除所有空值字段
EN

Stack Overflow用户
提问于 2020-11-11 01:56:07
回答 1查看 214关注 0票数 0

我正在使用append处理器将csv数据摄取到elasticsearch中。我已经有两个字段是对象(object1和object2),我想把它们都追加到一个不同字段的数组中(mainlist)。所以结果应该是值我已经用copy_from参数尝试了设置处理器,我得到了一个错误,我缺少所需的属性名“mainlist:[ {object1}, {object}]”,尽管ElasticSearch文档在使用"copy_from“时显然没有使用"value”属性。{"set": {"field": "mainlist","copy_from": ["object1", "object"]}}。我的语法甚至是从文档中完全复制过来的。请帮帮忙。

此外,我需要在摄取级别删除空字段,这样它们就不会被返回。我不希望将"fieldname:“返回给用户。最好的方法是什么呢?我刚开始使用ElasticSearch,它运行得并不顺利。

EN

回答 1

Stack Overflow用户

发布于 2020-11-11 17:26:09

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

代码语言:javascript
复制
PUT _ingest/pipeline/no_empty_fields
{
  "description": "Removes empty-ish fields from a doc",
  "processors": [
    {
      "script": {
        "source": """
          def keys_to_remove = ctx.keySet()
                          .stream()
                          .filter(field -> ctx[field] == null || 
                                           ctx[field] == "")
                          .collect(Collectors.toList());

          for (key in keys_to_remove) {
            ctx.remove(key);
          }
        """
      }
    }
  ]
}

并在索引时应用它

代码语言:javascript
复制
POST myindex/_doc?pipeline=no_empty_fields
{
  "fieldname23": 123,
  "fieldname": null,
  "fieldname123": ""
}

当然,您可以扩展条件以丢弃其他字段,如"undefined""Infinity"和其他字段。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64774230

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档