0

我正在使用附加处理器将 csv 数据摄取到 elasticsearch 中。我已经有两个作为对象的字段(object1 和 object2),我想将它们都附加到不同字段(主列表)的数组中。所以它会出现,因为mainlist:[ {object1}, {object}]我已经尝试使用 copy_from 参数设置处理器并且我收到一个错误,即我缺少所需的属性名称“值”,即使 ElasticSearch 文档显然没有使用“值”属性时它使用“copy_from”。 {"set": {"field": "mainlist","copy_from": ["object1", "object"]}}. 我的语法甚至完全从文档中复制而来。请帮忙。

此外,我需要在摄取级别删除空字段,以便它们不会被返回。我不希望将“fieldname:”返回给用户。最好的方法是什么。我是 ElasticSearch 的新手,但进展并不顺利。

4

1 回答 1

0

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

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);
          }
        """
      }
    }
  ]
}

并在索引时应用它

POST myindex/_doc?pipeline=no_empty_fields
{
  "fieldname23": 123,
  "fieldname": null,
  "fieldname123": ""
}

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

于 2020-11-11T09:26:08.870 回答