问题描述
我正在使用附加处理器将csv数据摄取到elasticsearch中。我已经有两个字段是对象(object1和object2),我想将它们都附加到另一个字段(mainlist)的数组中。因此,它会以mainlist:[ {object1},{object}]
的形式出现,我尝试使用copy_from参数设置处理器,并且遇到错误,即使ElasticSearch文档显然没有使用“值”属性使用“ copy_from”时。 {"set": {"field": "mainlist","copy_from": ["object1","object"]}}
。我的语法甚至完全从文档中复制。请帮忙。
此外,我需要在提取级别删除空字段,以便不返回它们。我不希望将“ fieldname:”“退还给用户。什么是最好的方法?我是ElasticSearch的新手,而且进展不太顺利。
解决方法
关于在摄取级别删除空白字段-建立管道:
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"
和其他字段。